더북(TheBook)

프로그램 1.3.8 도박꾼의 파산 시뮬레이션 (gambler.py)

import random
import sys
import stdio
 
stake  = int(sys.argv[1])
goal   = int(sys.argv[2])
trials = int(sys.argv[3])
 
bets = 0
wins = 0
for t in range(trials):
    # 도박 한 판을 진행한다.
    cash = stake
    while (cash > 0) and (cash < goal):
    # 한 번의 베팅을 시뮬레이션한다.
        bets += 1
        if random.randrange(0, 2) == 0:
            cash += 1
        else:
            cash -= 1
    if cash == goal:
        wins += 1 
 
stdio.writeln(str(100 * wins // trials) + '% 이김')
stdio.writeln('평균 베팅 수: ' + str(bets // trials))
stake
goal
trials
bets
wins
cash
초기 판돈
목표액
시뮬레이션 횟수
베팅 횟수
우승 횟수
현재 수중에 있는 돈

 

% python3 gambler.py 10 20 1000
50% 이김
평균 베팅 수: 100
% python3 gambler.py 50 250 100
19% 이김
평균 베팅 수: 11050
% python3 gambler.py 500 2500 100
21% 이김
평균 베팅 수: 998071

이 프로그램은 명령 줄 인수로 초기 판돈(stake), 목표액(goal), 시도 횟수(trials)를 입력받는다. 도박판을 시도 횟수만큼 진행하며, 각 도박판은 초기 판돈으로 시작해 파산하거나 목표액에 도달할 때까지 계속 베팅하면서 진행한다. 그러고 나서 이길 확률과 도박 한 판에서 수행한 평균 베팅 수를 출력한다. 내부 while 루프에서는 도박꾼이 stake로 시작해 목표액에 도달하거나 파산할 때까지 $1 베팅하는 것을 시뮬레이션한다. 이 프로그램의 실행 시간은 전체 베팅 수(시도 횟수 * 평균 베팅 수)에 비례한다. 예를 들어 마지막 실험에서는 거의 난수를 1억 번 생성해야 했다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.