IT/web&dev

[파이썬 퀴즈] 사이트별 패스워드 자동생성기 만들기(문자열, 슬라이싱)

프레스트 2020. 9. 2. 08:00

파이썬은 문자열을 쉽게 다룰 수 있는 언어입니다. 문자열이란 문자들의 집합, 문자들의 나열을 의미하죠. 문자열을 출력하고 다루는 함수 몇가지와 문자열에서 일부분만 출력하거나 일부 정보만 이용하는 방법인 슬라이싱(Slice)에 대해서 공부해보겠습니다.

 

 

사이트별 자동으로 패스워드 만들기 : 센스프레스

 

사이트별로 서로 다른 패스워드를 만들어주는 예제를 통해서 문자열과 슬라이싱을 어떻게 적용하는지 살펴보려고 합니다. 파이썬이 문자열을 쉽게 다룰 수 있는 언어를 증명하듯 문자열과 관련된 함수도 많더라구요. 그래서 모두 다루지는 못하고 문제를 풀면서 필요한 함수들과 함께 연관 함수들을 같이 다루면 될 것 같습니다. 그리고 앞으로도 점점 더 많은 문제를 다루면서 자연스럽게 파이썬을 익혀가는 방식으로 진행해보려고 해요. 그리고 참고로 이 문제는 나도코딩님의 파이썬 코딩 무료강의를 참고로 하였으며 저 스스로도 실습을 실행해보는 과제수행이되겠습니다.

 

문제 : 사이트별로 패스워드 만들기

  • 예: https://google.com
  • 규칙 1 : https://부분은 제외 --> google.com
  • 규칙 2 : 처음만나는 점(.) 이후 부분은 제외 --> google
  • 규칙 3 : 남은 글자 중 처음 세자리 + 글자수 + 글자 내 'e' 갯수 + '$'로 구성
  • 예 생성된 비밀번호 : goo61$ (nav: 처음 세자리 + 글자수(6)+글자내 e갯수(1) + $)

우선 예는 google로 했는데요. 이 url을 변수로 하여 url이 바뀌면 새로운 비밀번호를 생성하도록 할 것입니다. 

규칙 1부터 하나씩 풀어보겠습니다. https://부분을 제외하라고 했죠? 파이썬에서 일정부분을 가져오는 방법을 먼저 살펴보겠습니다.

https://google.com에서 https://부분만 출력해보려면,


url = "https://google.com" #변수
print("url[0:8]")

위와같이 어떤 문자열을 변수로 놓고 그 변수에서 내가 원하는 문자들만 출력해보려면 [ ] 이렇게 대괄호로 감싸고 그 안에서 자리수를 넣어주면 되는데요. 파이썬에서 문자열의 첫번째 시작은 0부터입니다. https://에서 첫번째는 h인데 1이 아니고 0입니다. 그래서 0인 h부터 세어보면 마지막 /(슬래쉬)는 7번째입니다. 그런데 원하는 문자까지 출력하려면 바로 다음 부분까지 넣어줘야합니다. 즉 0부터 8미만으로 해줘야 https://만 나오게 할 수 있습니다.

원하는 부분만 출력하는 방법은 알았죠? 그런데 우리는 이걸 감춰야 합니다. 

 

replace

어떤 것을 다른 것으로 대치하는 것을 replace라고 합니다. 그래서 replace("a", "b")하게 되면  a대신 b로 바꿔주게 되는데요. 우리는 https://부분을 안보이게 할 거라서 replace("https://", "") 이렇게 ""따옴표 안에 아무것도 넣어주지 않으면 아무것도 없는 것으로 대치한다는 뜻이 됩니다.

 

파이썬 replace() / 센스프레스

 

index

index함수를 쓰면 어떤 문자가 몇번째에 있는지 알 수 있습니다. 예를 들어 index(".")는 .(점)이 몇번째에 위치해 있는지 알 수 있습니다. index와 비슷한 함수로 find가 있습니다.  두가지의 차이점으로는 만약 원하는 문자를 입력했는데 해당 문자가 없으면 index는 찾는 문자가 없으면 오류를 내면서 프로그램이 종료되고 find는 -1을 출력해주고 프로그램이 종료되지는 않습니다. 프로그램이 종료되면 이후에 다른 문자를 출력해보려고 해도 이미 프로그램이 종료되었기 때문에 작동하지 않습니다. 그리고 index로 글자를 찾으면 맨 앞부터 가장 첫번째로 만나는 글자를 찾아주게 됩니다. 그러므로 만약 점이 2개 있다면  두번째 것을 찾기 위해서는 index("." ,  변수+1) 형식으로 해주면 2개 모두 찾게 됩니다. 우리는 문제에서 처음만나는 점이라고 했고 www없는 도메인을 예제로 하고 있으니 점 하나만 찾으면 됩니다.

 

 

파이썬 index() / 센스프레스


슬라이싱(Slice)

점 이후부분은 제외할 것이니 우리가 필요한 부분은 0번째 부터 첫번째 만나는 점(.)이 있는 부분 직전까지만 사용하게 됩니다. 이후 부분을 없애려고 할 필요 없이 해당부분까지만 출력하면 되죠. 바로 이렇게 원하는 문자열까지만 가져오는 범위를 정하는 것을 슬라이싱, 슬라이스라고 합니다. 슬라이스의 사용은 위에서 보셨던 것처럼 출력할 때 [ ] 대괄호로 감싸고 일정 부분 범위를 :(콜론)을 이용해서 지정합니다. 0:5는 0부터 5까지를 의미합니다, 0: 지정변수로 하면 지정변수로 특정한 부분까지를 의미합니다. 이때 0이 첫번째 글자라는 것을 꼭 기억해야합니다. 저는 이게 항상 헷갈리더라구요. 그래서 예를 들어 google은 여섯글자이지만 마지막 e는 0에서부터는 5번째입니다. 그러므로 google은 0:6이라고해야 직전 문자인 e까지 해당 되게 됩니다.

 


len

글자수를 알아내는 함수는 len()입니다. len([1,2,3,4,5])하면 5를 출력해줍니다. len("python")하면 6 이 출력되구요.

 

count

문자열 내에서 특정 문자의 갯수를 확인하려면 count함수를 사용합니다. 

 

여기까지 규칙 3까지 필요한 함수들은 확인을 했습니다. 

 

format

그런데 우리는 000의 패스워드는 ***입니다. 형식으로 출력을 해주려고 합니다. 두가지 변수부분에 원하는 값을 출력해줘야하는데요.

이럴 때는 중괄호{ }를 이용해서 print("{ }의 패스워드는 { }입니다." .format("000", "***")) 과 같이 해주면 format 안에 있는 것이 순서대로 중괄호로 반영되어 출력됩니다.

 

 

규칙 1, 2, 3을 적용해 password로 변수를 만들어줍니다.

 

파이썬 len(), count() / 센스프레스

위 첫번째 [:3]은 [0:3]과 같은 의미입니다. 0에서 부터 세번째 미만의 글자까지 즉 0(g), 1(o), 2(o) 이렇게 3개를 가져옵니다.

위에 format에서 했던것과 달리 중괄호 안에 {0}, {1} 을 각각 넣었는데요. 이렇게 하면 format안에 있는 0번째(url)과 1번째(password)를 가져와서 각각의 위치에 반영해줍니다.

 

format() / 센스프레스

 

 

결과물 확인

최종 결과물은 아래와 같이 작성하였고, 실행시켜보면 패스워드가 처음 예제와 같이 잘 나오는 것을 확인해볼 수 있습니다. 

 

url를 naver, daum으로 변경해서 출력해본 결과들도 함께 확인해보겠습니다.

 

 

다른 URL로 변경하니 각각의 URL에 맞춰 새로운 패스워드가 생성되었습니다.

 

오늘은 파이썬으로 URL별 패스워드 생성하기를 통해 문자열과 슬라이싱을 공부해봤습니다.

 

고맙습니다.

 

 

반응형