비밀번호 생성기를 파이썬으로 만들어보자.
for문, random함수, random.shuffle(), random.sample(), list(), input(), int(), +=연산자, f-string 등
많은 파이썬 함수들이 쓰인다.
<사용할 문자, 특수기호, 숫자는 아래와 같다>
letters = ['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']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
symbols = ['@', '*' '!', '#', '$', '-', '%', '&', '(', ')', '+']
비밀번호 생성기의 규칙
1. 비밀번호에서 문자, 특수기호, 숫자의 개수가 얼마나 되는지 입력을 받는다.
2. 해당 개수 만큼 뽑는다.
2-1 중복되지 않게 뽑는다.
2-2 중복될 수 있게 뽑는다.
3. <1단계 비밀번호>는 단순히 문자 +특수기호 + 숫자를 조합하는 것이다.
4. <2단계 비밀번호>는 1단계 비밀번호를 랜덤하게 뒤섞어 비밀번호를 더 어렵게 만든다.
1단계 비밀번호 생성하기
1. input()함수, int()함수
먼저 input()함수를 사용하여 입력값을 얻는다.
input()함수의 출력값은 str타입이므로, int()함수를 적용하여 문자형을 숫자형으로 변경한다.
2-1. random.sample(seq, k) 함수
random.sample(seq, k) 함수를 이용하여
seq > 리스트나 튜플 같은 시퀀스(순서)가 있는 것에서 k만큼 원소를 랜덤하게 뽑는다.
이 경우에는 뽑히는 원소들은 중복되지 않는다.
예를 들어,
[1,2,3]에서 2개를 랜덤하게 뽑을 때,
1,2
2,3
1,3
이 뽑힐 수 있지만
1,1
2,2
3,3 등
같은 원소를 중복해서 뽑지는 않는다.
for 반복문, += 연산자
for문을 이용해서 리스트의 요소를 하나의 문자열로 합친다.
one+=b의 뜻은
one = one +b
와 같다.
문자열 + 문자열의
최종 출력값의 타입은 문자열이다.
2-2. random.choice(seq) 함수
만약
비밀번호에 중복된 문자, 특수기호, 숫자가 있기를 원한다면,
random.choice()함수와 for문을 이용하면 된다.
random.choice()함수는
순서 sequence가 있는 리스트나 튜플에서 하나의 원소를 뽑아준다.
3. f-string
f-string을 이용해서 문장을 출력한다.
2단계 비밀번호 생성하기
4. list()
1단계 비밀번호를 무작위로 섞기 위해
random.shuffle()함수를 쓸 것인데,
섞을 대상이 문자열이 아닌 리스트의 형태여야 한다.
따라서 문자열 타입인 1단계 비밀번호를
list()함수를 이용해
다시 리스트로 바꾸어준다.
split()함수는 여러개의 문자열을 어떤 기준으로 쪼개어 리스트를 만들어주고
list()함수는 문자열을 각각의 문자로 쪼개어 리스트를 만들어준다.
5. random.shuffle()
6. for문, f-string 출력하기