我想编写一个函数,它将正整数n作为输入,模拟n掷骰子游戏,并返回玩家赢得的游戏比例。
模拟我编写的代码的底层craps如下:import random
def craps():
dice = random.randrange(1,7) + random.randrange(1,7)
if dice in (7,11):
return 1
if dice in (2,3,12):
return 0
newRoll = random.randrange(1,7) + random.randrange(1,7)
while newRoll not in (7,dice):
newRoll = random.randrange(1,7) + random.randrange(1,7)
if newRoll == dice:
return 1
else:
return 0
import random
def testCraps(n):
count = 0
fract = count/n
games = n*craps()
for i in range(games):
if i == 1:
count +=1
else:
pass
return fract
usage:
>>> fracCraps(10000)
0.4844
>>> fracCraps(10000)
0.492
我执行时得到的是:
>>> testCraps(10000)
0.0
我无法让计数器工作。???
答案 0 :(得分:1)
您每次都会收到0
,因为您在fract = countW/n
为countW
时设置了0
。 countW
总是 0
,因为每次循环都会重置它。您只想在循环外的函数开头设置一次。同样适用于fract
;你想要在最后完成(或者更好,最后只是return countW/n
并完全消除fract
。
import random
def testCraps(n):
countW = 0
for i in range(n):
# The rest of your code
return countW/n
# Example output
print(testCraps(10000)) # 0.6972
print(testCraps(10000)) # 0.698
修改@new内容
您似乎已经编辑了您的问题以提出另一个问题,只有一半实现了此处给出的答案。你需要确保你正在返回正确的东西(count/n
),并确保你在循环中调用内容。 n*craps()
是n
或0
,因为craps()
只返回1
或0
。您想要的是,n
次,致电craps()
并评估结果。
def testCraps(n):
count = 0
for _ in range(n):
if craps() == 1: # "play" a craps game and check the result
count +=1
return count/n
# Example output
print(testCraps(10000)) # 0.4971
print(testCraps(10000)) # 0.4929
答案 1 :(得分:0)
在for循环的每次迭代开始时,您正在将countW
重置为0
。在for循环外部将其设置为零以保持运行计数。
您还想在for循环之外移动fract
的计算。完成所有循环后计算frac
。