난수 생성

배병일 ㅣ 2023. 5. 17. 22:07

랜덤한 숫자 생성 (
import string
import random
_LENGTH = 8 # 몇자리?
string_pool = string.digits # "0123456789"
result = "" # 결과 값 for i in range(_LENGTH) : # 랜덤한 하나의 숫자를 뽑아서, 문자열 결합을 한다.
result += random.choice(string_pool)
print(result)

 

난수를 만들기 위해, string 모듈과 random 모듈을 이용합니다. string의 digits와 random의 choice()를 사용합니다.

 

random.choice()

문자열에서 랜덤하게 하나의 문자를 선택해줍니다.

 

import random

string_pool = "0123456789"
num = random.choice(string_pool)
print(num)​

random.choice()를 사용하면, "0123456789"라는 문자열에서 하나의 문자열만을 선택합니다. 위에서는 0123456789를 직접 타이핑해서 사용했지만, string 모듈을 이용하면 간단하게 할 수 있습니다.

 

import string

string_pool = string.digits
print(string_pool)​

 

 

 

string.digits

숫자 0부터 9까지 문자열로 나타내줍니다. '0123456789'와 같습니다.

 

위의 digits와 .choice() 메소드를 이용해서 8자리의 임의의 난수를 발생시켜 보도록 하겠습니다. for문을 이용하는 방법입니다.

import string
import random

_LENGTH = 8 # 몇자리?
string_pool = string.digits # "0123456789"
result = "" # 결과 값
for i in range(_LENGTH) :
    # 랜덤한 하나의 숫자를 뽑아서, 문자열 결합을 한다.
    result += random.choice(string_pool)
print(result)​

계속 실행을 해보면 값이 바뀌는 것을 확인 할 수 있습니다.

 

 

랜덤한 문자열 만들기

위에서는 랜덤한 난수를 만들었습니다. 랜덤한 문자열을 만드는 것도 위와 똑같습니다. string pool만 바꿔주면 됩니다. 소문자만을 표현해주는 string.ascii_lowercase, 대문자만을 표현해주는 string.ascii_uppercase, 대소문자 모두 표현해주는 string.ascii_letters가 있습니다.

 

import string
print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.ascii_letters)​

 

 

string.ascii_lowercase

소문자만을 포함하고 있는 문자열입니다. 'abcdefghijklmnopqrstuvwxyz'와 같습니다.

 

string.ascii_uppercase

대문자만을 포함하고 있는 문자열입니다. 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'와 같습니다.

 

string.ascii_letters

대소문자 모두를 포함하고 있는 문자열입니다. 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'와 같습니다.

 

10자리의 랜덤한 문자열을 만드는 예제!

1. 소문자만을 이용한 랜덤한 문자열

import string
import random

_LENGTH = 10 # 10자리
string_pool = string.ascii_lowercase # 소문자
result = "" # 결과 값
for i in range(_LENGTH) :
    result += random.choice(string_pool) # 랜덤한 문자열 하나 선택
print(result)​

 

 

2. 대문자만을 이용한 랜덤한 문자열

import string
import random

_LENGTH = 10 # 10자리
#string_pool = string.ascii_lowercase # 소문자
string_pool = string.ascii_uppercase # 대문자
result = "" # 결과 값
for i in range(_LENGTH) :
    result += random.choice(string_pool) # 랜덤한 문자열 하나 선택
print(result)​

 

 

 

3. 대소문자 모두 이용한 랜덤한 문자열

import string
import random

_LENGTH = 10 # 10자리
#string_pool = string.ascii_lowercase # 소문자
#string_pool = string.ascii_uppercase # 대문자
string_pool = string.ascii_letters # 대소문자
result = "" # 결과 값
for i in range(_LENGTH) :
    result += random.choice(string_pool) # 랜덤한 문자열 하나 선택
print(result)​

 

 

 

랜덤한 숫자, 문자열 만들기

대소문자를 구분하고 숫자가 포함된 랜덤한 숫자문자열 조합을 만들고 싶을때는, 위와 같은 방법으로 string_pool만 바꿔주면 됩니다.

 

import string
import random

_LENGTH = 12 # 12자리

# 숫자 + 대소문자
string_pool = string.ascii_letters + string.digits

# 랜덤한 문자열 생성
result = "" 
for i in range(_LENGTH) :
    result += random.choice(string_pool) # 랜덤한 문자열 하나 선택
print(result)​

 

문자열 + 연산을 통해 string.ascii_letters와 string.ascii_digits를 결합해준 값을 string_pool로 사용하면 됩니다.

 

랜덤한 비밀번호 만들기

만약 특수기호까지 넣고 싶다면? string 모듈에는 특수기호를 모아둔 문자열이 있습니다. string.punctuation를 사용하면 됩니다.

 

import string
print(string.punctuation)​

 

string.punctuation

특수문자를 표현해줍니다. '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'와 같습니다.

 

문자열 + 숫자 + 특수기호를 포함한 랜덤한 문자열을 만들어보도록 하겠습니다. 방법은 위와 같습니다.

 

import string
import random

_LENGTH = 20 # 20자리

# 숫자 + 대소문자 + 특수문자
string_pool = string.ascii_letters + string.digits + string.punctuation

# 랜덤한 문자열 생성
result = "" 
for i in range(_LENGTH) :
    result += random.choice(string_pool) # 랜덤한 문자열 하나 선택
print(result)
​

 

 

 

 

참고 사이트 : https://hongku.tistory.com/297