패스워드 생성기 따라하기 (Coding Password Generator)
오늘은 패스워드 생성기 코드를 따라 해 보겠습니다..
이미 워낙 유명하지만 모든 코딩은 직접 작성해보는데 의의가 있다고 생각합니다.
import string
import random
source = string.ascii_letters
source = source + string.digits
source = source + string.punctuation
count = input("Enter the number of digits: ")
count = int(count)
result = random.sample(source, count)
password = "".join(result)
print("Generated password: ", password.strip())
1행은 파이썬에서 스트링 패키지를 가져옵니다.
2행은 파이썬에서 랜덤 패키지를 가져옵니다.
3행은 스트링 패키지 내에서 ASCII 레터를 가져옵니다.
ASCII 레터는 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'를 지칭합니다.
즉 영어 소문자 알파벳 'a~z'와 영어 대문자 알파벳 'A~Z'까지 총 52자가 ASCII 레터입니다.
4행 digit은 스트링 패키지 내에서 우리가 흔히 쓰는 숫자입니다.
간단히 '0,1,2,3,4,5,6,7,8,9'를 의미합니다.
5행 punctuation은 스트링 패키지 내에 구두점 문자로 간주하는 ASCII 문자의 문자열입니다.
다음과 같은 특수 문자들을 의미합니다. '!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.'
6행 입력 문구에는"Enter the number of digits: "을 넣어봤습니다.
7행 6행에서 원하는 digits을 넣게 되면 int형 숫자로 인식하게 됩니다.
예를 들어 6행에서 3을 넣으면 7행에서 'count=int(3)'의 형태로 인식하게 됩니다.
8행에서 'random.sample'은 랜덤 하게 여러 개의 원소를 선택합니다.
간단히 예를 들어 보겠습니다.
'random.sample([6,7,8,9,0], 3)'이 예제입니다.
여기서 '[6, 7, 8, 9, 0]'은 원소입니다. 가로 오른쪽 3은 선택할 수 있는 원소 개수입니다..
따라서 '[6, 7, 8, 9, 0]' 안에서 랜덤 하게 3개의 원소를 선택할 수 있습니다.
'[6, 0, 9]' 같은 형식으로 원소가 선택됩니다.
그럼 이 방식을 가지고 다시 8행으로 가보겠습니다.
우리는 'random.sample(source, count)' 형식으로 사용했습니다.
count는 6행의 "Enter the number of digits"이 됩니다.
원소인 source는 'string.ascii_letters, source'와 'string.digits'와 'source + string.punctuation'이 됩니다.
즉 원소는 '[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
0,1,2,3,4,5,6,7,8,9, !,",#,$,%,&,',(,),*,+,,,-,.,/,:,;,<,=,>,?,@,[,\,],^,_,`,{,|,},~,.]'까지 되는 겁니다.
9행의 Join 함수는 String 리스트를 하나의 String으로 합쳐주는 역할을 합니다.
예를 들어 '%, 9, c'가 출력되면 Join이 '%9c' 형태로 합쳐줍니다.
위에서는 "".join(result)를 사용했는데 %와 9와 c 사이를 딱 붙여서 합쳐준다고 이해하시면 됩니다.
예를 들어 ",".join(result)를 사용하면 '%,9,c' 형태로 출력이 되는 것입니다.
"".join(result) = %9c
",".join(result) = %,9,c
마지막행에서 패스워드가 생성됩니다. 입력한 "Genenrated password: @@@@@@" 형식으로 출력됩니다.
코드 마지막 부분에 strip 함수가 나옵니다. strip은 빈 공간을 제거해줍니다.
예를 들어 띄어쓰기, 탭, 엔터 등등에서 생기는 빈 공간을 없애줍니다.
패스워드 입력할 때 빈 공간을 넣지 않는 일도 굉장히 중요합니다.
따라서 'password.strip()'을 사용하면 깔끔하게 패스워드를 출력할 수 있습니다.
그럼 오늘도 VSCode의 TERMINAL에서 실행해보겠습니다.
C:\Users\ATIV\Downloads\myworks>python .\RandomPassword.py을 입력합니다.
C:\Users\ATIV\Downloads\myworks>python .\RandomPassword.py
Enter the number of digits: 6
Generated password: m%8Eh}
C:\Users\ATIV\Downloads\myworks>python .\RandomPassword.py
Enter the number of digits: 6
Generated password: ONb!nu
C:\Users\ATIV\Downloads\myworks>python .\RandomPassword.py
Enter the number of digits: 6
Generated password: R>Hu2a
저도 요즘 공부하면서 많은 것을 느낍니다.
모르는 함수나 메서드는 구글링 해서 찾아보거나 자주 애용하는 카페에 질문하는 것도 좋은 방법이 되는 것 같습니다.
'코딩 따라하기' 카테고리의 다른 글
주사위 던지기 따라하기 (Coding Throwing Double Dice) (6) | 2020.11.20 |
---|---|
가위바위보 따라하기 (Coding rock-paper-scissors) (4) | 2020.11.19 |
로또번호 생성기 따라하기 (Coding Lottery Number Generator) (4) | 2020.11.17 |
윤년 판별기 따라하기 (Coding Leap Year Checker) (3) | 2020.11.16 |
구구단 따라하기(Coding 99steps) (4) | 2020.11.15 |
댓글