从长远来看,我必须计算你是赢还是赔钱。你掷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
答案 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卷上累积“眼睛”(或“点数”)的数量。
顺便说一下,使用名称为n
和N
的不同变量似乎有意混淆。
答案 1 :(得分:0)
eyes
被定义为1
和6
之间的随机数,因此您的测试if eyes < 9
将始终为真。
此外,通过使用无意义的变量名称,例如q
,p
和r
,您很难理解您尝试做的事情。从现在开始的一个月,你可能不会记得:)
例如,您有三个变量(根据您的代码)所有意味着&#34;利润&#34; - p
,r
和profit
。这没有多大意义......
答案 2 :(得分:0)
如果我使用该程序并更改r,答案肯定会改变。
你的错误可能是眼睛,你掷骰子N * n次,但只检查最后一个。最重要的是,你在1到6之间滚动,然后询问数字是否低于9,它将永远是。
如上所述,我建议更改变量名称。你也可以将两个循环用作变量,这通常是不好的做法。
重写这个你也可以说:p = -q + r - q / N