문제

연습으로서 나는 5 개의 롤링 확률을 계산하는 프로그램을 작성합니다. 아이디어는 간단한 수학과 달리 시뮬레이션을 통해 결과를 얻는 것입니다. 내 프로그램은 이것입니다.

# rollFive.py

from random import *

def main():
    n = input("Please enter the number of sims to run: ")
    hits = simNRolls(n)
    hits = float(hits)
    n = float(n)
    prob = hits/n
    print "The odds of rolling 5 of the same number are", prob

def simNRolls(n):
    hits = 0
    for i in range(n):
        hits = hits + diceRoll()
    return hits


def diceRoll():
    firstDie = randrange(1,7,1)
    for i in range(4):
        nextDie = randrange(1,7,1)
        if nextDie!=firstDie:
            success = 0
            break
        else:
            success = 1
    return success

문제는 N 000 000의 값 으로이 프로그램을 실행하는 것이 일반적으로 0.0006에서 0.0008 사이의 확률을 줄 수 있다는 것입니다. 수학은 0.0001286 (일명 (1/6)^5)에 가까운 답변을 받아야한다고 믿습니다. .

내 프로그램에 문제가 있습니까? 아니면 여기서 수학으로 기본적인 실수를하고 있습니까? 아니면 더 큰 반복을 통해 프로그램을 실행할 수 있다면 내 결과가 정답에 더 가깝게 되돌아 갈 수 있습니까?

도움이 되었습니까?

해결책

특정 숫자를 5 번받을 확률은 (1/6)^5이지만, 5 개의 숫자를 얻을 확률은 (1/6)^4입니다.

이것을 볼 수있는 두 가지 방법이 있습니다.

첫째, 예를 들어, 1을 모두 얻을 확률은 (1/6)^5입니다. . 그러나 동일하게 얻을 수있는 6 가지 가능한 숫자가 있기 때문에 6 (1/6)^5) 또는 (1/6)^4 인 6 가지 방법이 있습니다.

다른 방법을 살펴보면 첫 번째 롤이 무엇을 제공하는지는 중요하지 않으므로 우리는 그것을 배제합니다. 그런 다음 우리는 그 숫자를 나머지 4 개의 롤과 일치시켜야합니다. 그 확률은 (1/6)^4입니다.

다른 팁

수학이 잘못되었습니다. 같은 숫자로 5 개의 주사위를 얻을 확률은 6*(1/6)^5 = 0.0007716.

아주 간단하게, 있습니다 6 ** 5 5 개의 주사위를 굴리는 결과는 6 개만 성공적이므로 답은 답은 다음과 같습니다. 6.0 / 6 ** 5

문제를 언급 한 것처럼 예상되는 확률이 잘못되었다고 생각합니다. (1/6)^5는 일부 롤링 확률입니다. 특정한 연속 5 번; (1/6)^4는 롤링 확률입니다. 어느 연속으로 5 번 (첫 번째 롤은 항상 성공하기 때문에, 즉 첫 번째 롤은 항상 일부 숫자를 초래합니다).

>>> (1.0/6.0)**4
0.00077160493827160479

백만 반복으로 프로그램 실행과 비교하십시오.

[me@host:~] python roll5.py 
Please enter the number of sims to run: 1000000
The odds of rolling 5 of the same number are 0.000755
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top