특정 문자 a개, 특수 문자 b개, 숫자 c개를 입력받아서 해당 개수만큼의 스트링을 출력하자.
해당 문자들이 잘 섞이게 할 것.
- 인강을 들으면서 테스트로 해보려던 부분인데 생각보다 쉬울 듯 했는데 고민을 했던 부분 중 해결했던 방향에 대해서 글을 적어본다
- 일단 letters, numbers, symbols는 기본적으로 주어짐
random의 shuffle 기능이 있어서 활용해보고자 하였음
생각했던 방향은 일단 해당 개수별로 random.choice로 문자를 선택하고 문자열에 집어넣는다. 그렇게 하면 개수별로 만들어지나 잘 섞이지 않고 letter + number + symbol의 순서대로 지정이 되어서 패스워드라 여기기 어려움.
그래서 다양한 방법으로 이들을 잘 섞어줄 수 있겠지만 기본적으로 shuffle을 해야 한다.
신기하게도 python에서는 이러한 shuffle 기능이 편의 함수로 만들어져 있더라.. 정말 숫자 관련 처리에 대해서는 편의 기능들이 기본적으로 잘 만들어져 있는 듯 하다.
그래서 생각했던 것은 위에서 저장해둔 순서대로 지정된 패스워드를 인자로 넣고 random.shuffle(password)하면 끝이겠네?라고 생각했으나 str에서는 동작하지 않는다는 type error를 마주치게 된다.. (실행 전에 ide에서 밑줄을 긋지 않고 있어서 되는 걸로 생각했으나 list라 실행시에 오류를 뱉는 것으로 확인)
-> 생각해보니 password은 str이어서 str list로 바꾸고 shuffle을 돌리기로 함
-> 파이썬의 편의 기능이 정말 많다는 것을 다른 언어랑 비교해서도 그렇지만 매번 느끼게 되는 부분.. 사실 게임 개발자가 썼을 때 반복적으로 큰 작업을 돌리는 것들이 아니고 가볍게 돌린다면 크게 최적화 등을 고려하지 않기 때문에 이러한 편의기능이 얼마라 최적화가 되어있는지는 모르지만 일단 해당 기능은 빈번히 불릴 일이 아닐 것이라 판단되고 letters, numbers, symbols 자체의 개수도 한정적이기에 큰 문제가 없지 않을까 마음대로 판단을 내려본다
import random
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 = ['!', '#', '$', '%', '&', '(', ')', '*', '+']
print("Welcome to the PyPassword Generator!")
nr_letters = int(input("How many letters would you like in your password?\n"))
nr_symbols = int(input(f"How many symbols would you like?\n"))
nr_numbers = int(input(f"How many numbers would you like?\n"))
password_str_list = []
for temp_l in range(0, nr_letters):
password_str_list.append(random.choice(letters))
for temp_s in range(0, nr_symbols):
password_str_list.append(random.choice(symbols))
for temp_n in range(0, nr_numbers):
password_str_list.append(random.choice(numbers))
random.shuffle(password_str_list)
shuffle_pw = ""
for pick_char in password_str_list:
shuffle_pw += pick_char
print(shuffle_pw)
'Devs > Python' 카테고리의 다른 글
[Python] List, Tuple Slicing 사용법 (0) | 2025.03.31 |
---|---|
[Python] class 초기화와 상속 (0) | 2025.03.26 |
[Python] Docstrings 알아보기 (0) | 2025.03.20 |
[Python] 여러 줄 주석 방법 (0) | 2025.03.17 |
[Python] C, C++, C#와 Python의 차이 정리용 (0) | 2025.03.13 |