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

파이썬은 문자열을 쉽게 다룰 수 있는 언어입니다. 문자열이란 문자들의 집합, 문자들의 나열을 의미하죠. 문자열을 출력하고 다루는 함수 몇가지와 문자열에서 일부분만 출력하거나 일부 정보만 이용하는 방법인 슬라이싱(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별 패스워드 생성하기를 통해 문자열과 슬라이싱을 공부해봤습니다.

 

고맙습니다.

 

 

반응형

댓글

Designed by JB FACTORY