骰子游戏中的错误答案

时间:2015-11-15 17:11:48

标签: python

从长远来看,我必须计算你是赢还是赔钱。你掷4个骰子,如果眼睛小于9,你就赢了10欧元。对于每场比赛,买入价格为1欧元。所以当r为10时,答案应该是否定的。我的代码出了什么问题?

import sys
from numpy import *
r = int(sys.argv[1])  # Profit in the game
N = int(sys.argv[2])  # number of experiments
d = 4                 # number of dices thrown at once
M = 0                 # startcapital
for i in xrange(N):
    M -= 1            # buy in
    eyes = 0
    for j in range(d):
        eyes = random.randint(1,7, d)
    success = eyes < 9
    M = sum(success)

profit_in_long_run = (M) / float(N)
print 'profit in game', profit_in_long_run

3 个答案:

答案 0 :(得分:1)

您的代码存在许多问题,但最大的问题是您没有累积eyes,而只会获得最后一个始终为&lt; = 6。

你想:

eyes = 0
for i in xrange(N):
    euro -= q
    for i in range(n):
        eyes += random.randint(1,6)

或者可能是这样:

for i in xrange(N):
    euro -= q
    eyes = 0
    for i in range(n):
        eyes += random.randint(1,6)
    if eyes < 9:
        euro += r

(我不太熟悉这个游戏是如何玩的。)

在任何一种情况下,您都希望在n或n * N卷上累积“眼睛”(或“点数”)的数量。

顺便说一下,使用名称为nN的不同变量似乎有意混淆。

答案 1 :(得分:0)

eyes被定义为16之间的随机数,因此您的测试if eyes < 9将始终为真。

此外,通过使用无意义的变量名称,例如qpr,您很难理解您尝试做的事情。从现在开始的一个月,你可能不会记得:)

例如,您有三个变量(根据您的代码)所有意味着&#34;利润&#34; - prprofit。这没有多大意义......

答案 2 :(得分:0)

如果我使用该程序并更改r,答案肯定会改变。

你的错误可能是眼睛,你掷骰子N * n次,但只检查最后一个。最重要的是,你在1到6之间滚动,然后询问数字是否低于9,它将永远是。

如上所述,我建议更改变量名称。你也可以将两个循环用作变量,这通常是不好的做法。

重写这个你也可以说:p = -q + r - q / N