Python

파이썬 랜덤 숫자 뽑기 난수 발생(random) 예제 총정리 : randint(), randrange(), uniform(), shuffle(), choice(), choices(), simple()

파이썬에서 난수를 발생시키려면 random 모듈을 사용해야 합니다. random()메소드를 호출하게 되면 호출할때마다 다른 결과를 리턴합니다. 난수 발생 범위 지정이 필요한 경우 randrange()메소드를 사용합니다. 정수형인경우, randint()메소드를 사용하는 것을 추천합니다.

메소드(함수) 설명
random() 0 부터 1 사이의 부동소수점(float) 숫자를 리턴
randint(최소, 최대) 최소부터 최대까지 중 임의의 정수를 리턴
uniform(최소, 최대) 최소부터 최대까지 중 임의의 부동소수점(float) 숫자를 리턴
randrange(시작,끝, 간격) 시작부터 끝까지 숫자중에  지정된 간격의 숫자 중 리턴
간격 값은 선택사항
shuffle(컬렉션) 컬렉션의 값을 뒤섞어서 리턴
choice(컬렉션) 컬렉션의 값 중 하나의 값을 리턴
choices(컬렉션, 가중치, 샘플 수) 컬렉션 값에 가중치를 지정하고 임의의 값을 추출
sample(컬렉션, 샘플 수) 컬렉션타입의 값 중에 지정한 샘플 수 만큼 랜덤으로 추출

컬렉션이란 리스트(list), set, 튜플과 같은 데이터 타입을 의미합니다

■random 기본 사용방법

0부터 1사이의 임의의 float를 리턴합니다.

>>> import random
>>>
>>> random.random()
0.983361278849976
>>>
>>> random.random()
0.7546796153627895
>>>
>>> random.random()
0.6371495644741066
>>>
>>> random.random()
0.14307228307572706
>>>
import random

print(random.random.__doc__)

for i in range(10):
    a = random.random()
    print(f'{a}')


#실행결과
C:UsersilikeAppDataLocalProgramsPythonPython39python.exe C:/python/Workspace/main.py
random() -> x in the interval [0, 1).
0.05897188732159453
0.1060339035169654
0.034019252933518596
0.24913708736424067
0.47777998628975527
0.24211907360122376
0.7674417624764993
0.8853278248454853
0.3341873652933879
0.4877786963933164

■ random.randint(a, b)

randint()는 a와 b 사이의 정수를 리턴합니다.

import random

print(random.randint.__doc__)

for i in range(3):
    a = random.randint(0, 5)
    print(f'{a}')
    

#실행결과    
Return random integer in range [a, b], including both end points.
        
0
1
5

주사위 구현하기(1에서 6까지)

>>> import random
>>>
>>> random.randint(1,6)
6
>>> random.randint(1,6)
2
>>> random.randint(1,6)
4
>>>
>>> random.randint(1,6)
6

■ random.randrange(start, stop, step)

randrange()는 start와 stop 사이의 수를 반환합니다.  stop, step는 생략가능합니다.

import random

print(random.randrange.__doc__)

for i in range(3):
    a = random.randrange(20)
    print(f'{a}')
    
    
#실행결과
7
1
5
import random

for i in range(3):
    a = random.randrange(5, 20)
    print(f'{a}')

       
#실행결과
14
19
14
import random

print(random.randrange.__doc__)

for i in range(5):
    a = random.randrange(0, 20, 3)
    print(f'{a}')


#실행결과
18
12
9
18
15

■uniform(최소, 최대)

1.14부터 36.5 사이의 float 값을 리턴합니다.

>>> random.uniform(1.14, 36.5)
2.8734970157351425
>>> random.uniform(1.14, 36.5)
27.86339913180026
>>> random.uniform(1.14, 36.5)
3.223311464564321
>>>

■ random.shuffle(list)

리스트(list) 자료형의 데이터를 섞어줍니다.

>>> import random
>>>
>>> a = ['a', 'b', 'c', 'd', 'e']
>>> random.shuffle(a)
>>> a
['d', 'b', 'c', 'a', 'e']
>>>
>>> random.shuffle(a)
>>> a
['d', 'e', 'c', 'b', 'a']
>>>
>>> random.shuffle(a)
>>> a
['d', 'b', 'a', 'c', 'e']
>>>
import random

print(random.shuffle.__doc__)

#실행결과
Shuffle list x in place, and return None.

        Optional argument random is a 0-argument function returning a
        random float in [0.0, 1.0); if it is the default None, the
        standard random.random will be used.


b = random.shuffle(a)
print(f'{b}') 

#실행결과 
None

 
 
for i in range(5):
    random.shuffle(a)
    print(f'{a}')
    
    
#실행결과
['apple', 'pitch', 'banana', 'orange']
['apple', 'orange', 'banana', 'pitch']
['banana', 'pitch', 'orange', 'apple']
['orange', 'apple', 'banana', 'pitch']
['pitch', 'banana', 'orange', 'apple']

■ random.choice(seq)

비어 있지 않은 시퀀스에서 임의의 요소를 선택합니다.

>>> import random
>>>
>>> a = ['a', 'b', 'c', 'd', 'e']
>>>
>>> random.choice(a)
'c'
>>>
>>> random.choice(a)
'e'
>>>
>>>
>>> random.choice(a)
'c'
>>>
import random

a = ("apple", "orange", "pitch", "banana")
for i in range(5):
    b = random.choice(a)
    print(f'{b}')

■ 컬렉션 값에 가중치를 주어서 샘플링 하는 방법

아래 샘플코드에서 처럼 1,2,3,4,5의 값 가각에 대한 가중치로 10,10,20,20,5를 주었습니다. 그럼으로 가중치에 따라 랜덤으로 값을 추출할 수 있습니다. 아무래도 가중치가 높은 경우값이 추출이될 확률이 높습니다.

>>> random.choices([1,2,3,4,5], [10,10,20,20,5])
[4]
>>> random.choices([1,2,3,4,5], [10,10,20,20,5])
[3]
>>> random.choices([1,2,3,4,5], [10,10,20,20,5])
[2]
>>>
>>> random.choices([1,2,3,4,5], [10,10,20,20,5],k=2)
[1, 4]
>>> random.choices([1,2,3,4,5], [10,10,20,20,5],k=2)
[5, 3]
>>>

■ 샘플링(sample) 하는 방법

sample()메소드를 사용하면 리스트, set, 튜플 등과 같은 컬렉션 타입의 자료형으로 부터 지정한 갯수 만큼의 샘플링을 랜덤하게 추출할 수 있습니다.

>>> a = [1,2,3,4,5,6,7,8,9,10]
>>> b = random.sample(a, 3)
>>> print(b)
[9, 7, 5]
>>> print(b)
[9, 7, 5]
>>>
>>> b = random.sample(a, 3)
>>> print(b)
[7, 6, 1]
>>>
import random

print(random.shuffle.__doc__)

a = ["apple", "orange", "pitch", "banana"]
for i in range(5):
    b = random.sample(a, 3)
    print(f'{b}')
    
#실행결과
Shuffle list x in place, and return None.

        Optional argument random is a 0-argument function returning a
        random float in [0.0, 1.0); if it is the default None, the
        standard random.random will be used.

        
['pitch', 'orange', 'banana']
['pitch', 'apple', 'orange']
['apple', 'orange', 'banana']
['apple', 'orange', 'pitch']
['banana', 'orange', 'pitch']
import random 
a = ["apple", "orange", "pitch", "banana"]
 
for i in range(5):
    b = random.sample(a, random.randint(1, 3))
    print(f'{b}')


#실행결과
['orange', 'pitch']
['pitch', 'banana']
['apple', 'pitch']
['pitch']
['pitch', 'apple', 'banana']

■ 숫자 맞추기 게임 만들기

>>> from random import randint
>>> nTargt = randint(1, 50)
>>> while True:
...     answer = input("숫자를 입력하세요(Q: 그만하기) : ")
...     if answer.upper() =="Q":
...             break
...     else:
...             if nTargt==int(answer):
...                     print("정답입니다.")
...                     break
...             elif nTargt > int(answer):
...                     print("높은 숫자를 입력하세요.")
...             else:
...                     print("낮은 숫자를 입력하세요.")
...
숫자를 입력하세요(Q: 그만하기) : 1

[REFERENCE]

docs.python.org/3/library/random.html

wikidocs.net/79

[파이썬 더 알아보기]

[프로그래밍/Kotlin] - [Python] 파이썬에서 웹브라우저(url) 호출하는 방법 : webbrower, selenium

[프로그래밍/Python] - [Python] 파이썬 기본 프롬프트(>>>) 변경하기 : 명령 프롬프트에서 파이썬 실행하는 방법(.py)

[프로그래밍/Python] - [Python] 파이썬 클래스(class) 와 생성자(__init__) 사용방법 및 예제 총정리

[프로그래밍/Python] - [Python] 파이썬 list, tuple, dictionary,set 예제 및 총정리

[프로그래밍/Python] - [Python] 파이썬 문자열 함수 사용 예제 및 총정리 : split,join,replace,rstrip,lstrip,lower,upper,index,count,len

[프로그래밍/Python] - [Python] 파이썬 기본(기초) 문법 : 예제 및 총정리

Leave a Reply

error: Content is protected !!