我是编程新手,特别是python,我遇到了家庭作业问题。
问题在于:
Craps是一款基于骰子的游戏,可在赌场玩。像二十一点一样,玩家可以对抗房子。游戏开始时玩家投掷一对标准的六面骰子。如果玩家总共掷出7或11,则玩家获胜。如果玩家总共滚动2,3或12,则玩家输了。对于所有其他掷骰值,玩家将重复掷骰子,直到她再次滚动初始值(在这种情况下她赢了)或7(在这种情况下她输了)
实现函数testCraps(),它将正整数n作为输入,模拟掷骰子的n个游戏,并返回玩家赢得的游戏比例。
>>> testCraps(1000)
0.4844
>>> testCraps(1000)
0.492
这是我到目前为止所拥有的:
import random
def roll():
dice = (random.randrange(1,7) + random.randrange (1,7))
return dice
def testCraps(n):
dice = roll()
total = 0
count = 0
for i in range (n):
total = total + 1
if dice == 2 or dice == 3 or dice == 12:
count = count + 0
elif dice == 7 or dice == 11:
count += 1
else:
dice1 = roll()
while dice1 != 7 or dice1 != dice:
if dice1 == 7:
count = count + 0
elif dice1 == dice:
count += 1
else:
dice1 = roll()
return(float(count/total))
我错过了什么吗?任何提示都将不胜感激!
答案 0 :(得分:1)
我认为你在程序中遇到“挂起”,或者永远存在循环,这意味着它无法完成exectuing。
你循环dice1 != 7 or dice1 != dice
,这意味着循环不会停止,直到dice1等于7和dice
,这意味着如果dice
不是7,它将永远循环。
while dice1 != 7 or dice1 != dice:
现在是第二个问题,这是带注释的固定代码:
dice1 = roll()
while True: # Loop until either lost or won
if dice1 == 7:
break # Player lost, don't do anything
elif dice1 == dice:
count += 1 # Player won, increase count
break
else:
dice1 = roll()
答案 1 :(得分:0)
你的缩进搞砸了。
从第
行开始for i in range (n):
此代码不再是“testcraps()”函数的一部分。
这可能不是唯一的错误,但绝对可以从缩进开始。
缩进已修复,所以我会编辑我的答案。
我不会为你的作业编写代码,但我会给你这个建议。你现在的问题是“合乎逻辑的”。您需要将问题分解为更简单的步骤,您可以更容易理解和测试。首先编写一个模拟单个游戏的函数,然后返回0/1(如果您愿意,则返回True / False),具体取决于该游戏是赢还是输。让其工作的其余部分将是微不足道的。