▶︎ 난수 만들기
난수를 만들기 위해서 string 모듈과 random 모듈을 실습해보자.
‣ random.choice
string의 digits
와 random의 choice()
함수를 사용하여 난수를 생성할 수 있다.
random.choice()
- 문자열에서 랜덤하게 하나의 문자를 선택해준다
random.chice()를 사용하면 '0123456789'라는 문자열에서 하나의 문자열만을 선택할 수 있다.
import random
exam_string: str = '0123456789'
num = random_choice(exam_string)
print(num)
‣ string
string.digits
- 숫자 0부터 9까지 문자열로 나타냄.
string 모듈을 사용하여 '0123456789'를 직접 타이핑 하지 않고 더 간단하게 할 수도 있다
import string
import random
exam_strng: str = string.digits
num = random.choice(exam_string)
‣ 난수 생성하기
위 예제를 활용하여 8자리의 임의의 난수를 발생하는 코드를 작성해보자
import string
import random
_LENGTH: int = random.randint(4,12)
exam_string: str = string.digits
result: str = ''.join(random.choices(exam_string,k=_LENGTH))
print(result)
{% include codeHeader.html name="output" %}
1175190215
▶︎ 랜덤한 문자열 만들기
- 랜덤한 문자열을 만드는 것도 랜덤한 난수를 만드는 법과 동일하다.
string.pool
만 바꿔주면 된다 - 소문자만 표현:
string.ascii_lowercase
- 대문자만 표현:
string.ascii_uppercase
- 대소문자 모두 표현:
string.ascii_letters
10자리의 랜덤한 문자열을 만드는 코드를 단계별로 작성해보자
‣ 소문자 랜덤 문자열
string.ascii_lowercase
- 소문자만을 포함하는 문자열 'abcdefghijklmnopqrstuvwxyz' 와 같음
소문자만을 이용한 랜덤한 문자열
import string
import random
_LENGTH: int = random.randint(4,12)
exam_string: str = string.ascii_lowercase
result: str = ''.join(random.choices(exam_string,k=_LENGTH))
print(result)
{% include codeHeader.html name="output" %}
nsjtzfz
‣ 대문자 랜덤 문자열
string.ascii_uppercase
- 대문자만을 포함하는 문자열 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 와 같음
대문자만을 이용한 랜덤한 문자열
import string
import random
_LENGTH: int = random.randint(4,12)
exam_string: str = string.ascii_uppercase
result: str = ''.join(random.choices(exam_string,k=_LENGTH))
print(result)
{% include codeHeader.html name="output" %}
HVYSBNUSP
‣ 대/소문자 랜덤 문자열
string.ascii_leters
- 대소문자만을 포함하는 문자열 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 와 같음
대소문자만을 이용한 랜덤한 문자열
import string
import random
_LENGTH: int = random.randint(4,12)
exam_string: str = string.ascii_letters
result: str = ''.join(random.choices(exam_string,k=_LENGTH))
print(result)
{% include codeHeader.html name="output" %}
crRYWgtdEmjx
▶︎ 랜덤한 숫자, 문자 생성
숫자가 포함된 랜덤한 숫자문자열 조합을 생성하고 싶을 때에는 아래와 같은 방법으로 코드를 작성하면 된다.
import string
import random
_LENGTH: int = random.randint(4,12)
exam_string: str = string.ascii_letters + string.digits
result: str = ''.join(random.choices(exam_string,k=_LENGTH))
print(result)
{% include codeHeader.html name="output" %}
lWAKU2sm77FB
▶︎ 랜덤한 비밀번호 생성
string.punctuation
- 특수문자를 표현함. '!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'와 같음
특수기호까지 넣고 싶다면 string.punctuation
를 사용하면 된다
문자열 + 숫자 + 특수기호를 포함한 랜덤 문자열을 만들어보자
import string
import random
_LENGTH: int = random.randint(4,12)
exam_string: str = string.ascii_letters + string.digits + string.punctuation
result: str = ''.join(random.choices(exam_string,k=_LENGTH))
print(result)
{% include codeHeader.html name="output" %}
S!qz5&Q7h#T
▶︎ 프로그램 만들기
지금까지 실습한 내용들을 기반으로 랜덤 패스워드를 생성하는 프로그램을 만들어보자.
랜덤 패스워드 생성 규칙은 다음과 같다.
- 8자리 이상
- 대/소문자
- 숫자, 특수문자 혼용
‣ 사용 모듈
random
sys
string
argparse
‣ 코드 작성
{% include codeHeader.html name="create_random_password.py" %}
import sys
import string
import argparse
from random import choice
def get_random_password(length: int=16) -> str:
punctuation = r"$^+_-^&"
return ''.join(
choice(string.ascii_letters + string.digits + punctuation)
for _ in range(length))
if __name__ == '__main__':
parser = argparse.ArgumentParser(prog='랜덤 비밀번호', description='랜덤 비밀번호 생성기')
try:
parser.add_argument(
'-c', '--count', type=int, nargs='?', const=16,
help='Random password digits (16 by default)')
args = parser.parse_args()
if args.count:
random_password: str = get_random_password(length=args.count)
print(f"랜덤 비밀번호가 생성되었습니다\n{random_password}")
else:
random_password: str = get_random_password()
print(f"랜덤 비밀번호가 생성되었습니다\n{random_password}")
except Exception as e:
print(e)
sys.exit()
Help 옵션을 이용하여 실행 방법을 확인할 수 있다.
python random_password.py --help
usage: 랜덤 비밀번호 [-h] [-c [COUNT]]
랜덤 비밀번호 생성기
options:
-h, --help show this help message and exit
-c [COUNT], --count [COUNT]
Random password digits (16 by default)
아무 옵션도 주지 않고 실행하게 되면 기본 16자리의 랜덤 비밀번호가 생성된다.
python random_password.py
랜덤 비밀번호가 생성되었습니다
R5fi^H2oMxm$8CS8
5자리의 랜덤 비밀번호를 생성하도록 -c
, 또는 --count
옵션을 줘보자.
python random_password.py -c 9
랜덤 비밀번호가 생성되었습니다
TTfAWLn12
9자리의 랜덤 비밀번호가 생성되었다.