이전 내용
랜덤 모듈
랜덤 모듈은 파이썬을 설치할 때 기본적으로 깔리는 모듈 (내장함수)로, 무작위의 값을 추출할 때 유용하게 사용가능하다.
파이썬 내에서 랜덤 모듈을 호출하기 위해서는
import random
의 명령문으로 해당 모듈을 호출한다.
★ 내장함수란(Built-in Functions)?
랜덤 모듈 종류(많이 사용되는)
★모든 함수는 사용 시 앞에 "random." 을 붙인다.
◆ random: 0부터 1미만의 실수를 임의로 생성
num = random.random()
print(num)
◆ randrange(시작, 끝): 시작부터 끝-1 사이의 정수를 임의로 생성
print(random.randrange(1, 7)) # 1부터 6사이 임의의 정수
◆ randint(시작, 끝): 시작부터 끝 포함 사이의 정수를 임의로 생성
print(random.randint(1, 7)) #1부터 7사이 임의의 정수
◆ choice: 원소 중 아무거나 하나를 뽑아준다.
menu = ["김밥", "떡볶이", "순대"]
print("오늘의 메뉴는?", random.choice(menu))
list_a = list(range(1, 51)) # 1부터 50까지 리스트로 생성
print(random.choice(list_a))
◆ shuffle: 원소를 섞는다.
result = list(range(1, 11))
print("섞기 전: ", result)
random.shuffle(result)
print("섞은 후: ", result)
랜덤 모듈을 이용하면 아래와 같이 로또 프로그램을 생성할 수 있다.
랜덤 모듈 예제(feat. 반복문)
어떤 사람이 50달러를 가지고 라스베가스에서 게임을 한다고 하자. 한 번의 게임에 1달러를 거는데, 돈을 딸 확률은 0.5이다. 한 번 라스베가스에 가면, 가진 돈을 다 잃거나 목표 금액인 250달러에 도달할 때까지 게임을 계속한다. 어떤 사람이 라스베가스에 100번을 갔다면 몇 번이나 250달러를 따서 돌아올 수 있을까?
출력 예
초기 금액 $50
목표 금액 $250
100번 중에서 21번 성공
▶ 수업 시간에 해당 문제를 풀이하는데 문제 조차도 이해가 되질 않아 오랜 시간이 지나도 못 풀었다.
내가 제대로 풀지 못했던 이유는
- 문제 이해를 제대로 못함
- 코드의 대략적인 구조를 알려주셨는데, 안 보고 해보겠다고 설침
처음의 코드는 (수정하면서 최초 코드가 없다.) 대략 아래와 같았는데, (아래의 코드는 에러가 발생한다.)
# 잘못된 코드
import random
money = 50 # 시작
goal = 250 # 목표
wins = 0 # 승리
game = 0 # 게임 횟수
total_game = 100 # 100회 게임
result_list = ["승리", "패배"]
print(f"초기금액은 {money}달러 입니다.")
print(f"목표금액은 {goal}달러 입니다.")
for game in range(total_game):
total_game += game
while True:
result = random.choice(result_list)
if result == "승리":
money += 1
wins += 1
elif result == "패배":
money -= 1
elif money == 0:
print("금액을 모두 소진하였습니다. 게임을 종료합니다.")
break
elif money == goal:
print("목표 금액을 모두 획득 하였습니다. 게임을 종료합니다.")
break
print(f"{total_game}번의 경기 중 {wins}번 승리하였습니다.")
print(f"승률은 {wins/total_game*100:.2f}% 입니다.")
승률이 40~50% 대로 계속 나왔다. 다른 학우들은 10~30% 이내로 나오는 상황이었고,
나는 코드 구조 자체가 잘못됐다는 것을 인지하지 못하고, 왜 승률이 이렇게 높을까에만 초점이 맞춰져 있었다.
- 매회 방문 시 50달러를 가져가고
- 달러를 모두 소진하거나, 250달러를 땄을 때 회차 방문이 종료된다
는 중요한 점을 간과하였다.
우선, 선생님의 답
import random
money = 50 # 시작
goal = 250 # 목표
wins = 0 # 승리
total_game = 100
# 100번 방문 시 50달러를 가지고 간다.
for i in range(total_game):
cash = money # 초기 금액 복사
# 돈이 0이거나 250을 따면 종료
while cash > 0 and cash < goal:
# 돈이 0보다 크거나 목표보다 작으면 게임(승패 출력)
result = random.choice([True, False])
# 승리한 경우 1달러를 더해주고, 패할 경우 1달러를 뺀다.
if result:
cash += 1
else:
cash -= 1
if cash == goal:
wins += 1
print(f"초기금액은 {money}달러 입니다.")
print(f"목표금액은 {goal}달러 입니다.")
print(f"{total_game}번의 경기 중 {wins}번 승리하였습니다.")
print(f"승률은 {(wins/total_game) * 100:.1f} % 입니다.")
- for문을 만들고 100회 반복 하도록 range(total_game)
- for문 내에 cash 라는 변수를 만들고 money의 초깃값 저장: 1번 방문 시 50달러를 가지고 간다.
- while cash 0 > and cash < goal: cash가 0보다 크고 목표값인 250보다 작을 동안
- result = random.choice([True, False]) : True 또는 False를 랜덤으로 선택하여 result 변수에 저장한다.
- if result: : 만약 result가 True 일 경우 현금에 1을 더해주고,
- else: False 일 경우 현금을 1 뺀다.
- if cahse == goal:: 만약 현금이 목표치가 됐을 경우, 승리에 1을 더해준다. (100번 간 중에 몇 번 250 달러를 따고 돌아왔는지를 계산하기 위해)
내 코드1
import random
money = 50 # 시작
goal = 250 # 목표
wins = 0 # 승리
total_game = 100
# 라스베가스에 100번 방문
for game in range(total_game):
cash = money
while cash > 0 and cash < goal:
result = round(random.random(),1)
if result > 0.5: # 승리
cash += 1
elif result < 0.5 : # 패배
cash -= 1
if cash == goal:
wins += 1
print(f"초기금액은 {money}달러 입니다.")
print(f"목표금액은 {goal}달러 입니다.")
print(f"100번의 경기 중 {wins}번 승리하였습니다.")
print(f"승률은 {(wins / game) * 100:.1f}%입니다.")
▶ random.random() 으로 0과 1미만 사이의 실수를 반환 받은 뒤, 소수점 한 자리 미만으로 자리수를 맞춘 후 result라는 변수에 저장.
result가 0.5보다 많으면 승리로, 적으면 패배로 인식하는 방식으로 했다.
내 코드2
import random
money = 50 # 시작
goal = 250 # 목표
wins = 0 # 승리
game = 0 # 게임 횟수
total_game = 100 # 100회 게임
result_list = ["승리", "패배"]
for game in range(total_game):
cash = money
while cash > 0 and cash < 250:
result = random.choice(result_list)
if result == "승리":
cash += 1
elif result == "패배":
cash -= 1
if cash == goal:
wins += 1
print(f"초기금액은 {money}달러 입니다.")
print(f"목표금액은 {goal}달러 입니다.")
print(f"{total_game}번의 경기 중 {wins}번 승리하였습니다.")
print(f"승률은 {wins/total_game*100:.2f}% 입니다.")
▶ result_list 라는 변수에 ["승리", "패배"] 라는 리스트를 할당하고
random.choice를 하여 승리 또는 패배를 골라 result 변수에 대입하도록 하였다.
그리고 result가 승리 또는 패배인 경우에 따라 다른 결과가 실행되도록 하였다. (이전 코드들과 동일)
[출처]
왕초보를 위한 Python: 쉽게 풀어 쓴 기초 문법과 실습
'[파이썬 Projects] > <파이썬 기초>' 카테고리의 다른 글
[파이썬] 파이썬 기초: 파일 읽고 쓰기 (보완) (0) | 2025.01.16 |
---|---|
[파이썬] 파이썬 기초: 다양한 출력 포맷 (0) | 2025.01.15 |
[파이썬] 파이썬 기초 - 동전 개수 구하기 (0) | 2025.01.14 |
[Visual Studio Code] VS CODE 다운로드 (0) | 2025.01.13 |
[파이썬] 파이썬 기초: 함수 (보완) (0) | 2025.01.10 |