新手Python,创建掷骰子游戏,给定n局游戏
我刚开始学习编程,特别是Python,现在在做作业时遇到了一些问题。
问题是这样的:
Craps是一种在很多赌场玩的骰子游戏。就像二十一点一样,玩家是和赌场对抗。游戏开始时,玩家会掷一对标准的六面骰子。如果玩家掷出的点数总和是7或11,玩家就赢了。如果总和是2、3或12,玩家就输了。对于其他的点数,玩家会继续掷骰子,直到再次掷出最开始的点数(那样就赢了)或者掷出7(那样就输了)。
请实现一个叫做testCraps()的函数,它接收一个正整数n作为输入,模拟n局Craps游戏,并返回玩家赢的局数占总局数的比例。
>>> 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))
我是不是漏掉了什么?任何提示都非常感谢!
2 个回答
1
你的代码缩进有问题。
从这一行开始:
for i in range (n):
这段代码已经不再属于函数“testcraps()”了。
这可能不是唯一的问题,但首先要确保缩进正确。
缩进问题已经解决,所以我会更新我的回答。
我不会为你的作业写代码,但我可以给你这个建议。你现在遇到的问题是“逻辑”上的问题。你需要把问题拆分成更简单的步骤,这样你才能更容易理解和测试。可以先写一个只模拟单局游戏的函数,根据这局游戏是赢还是输返回0/1(或者如果你喜欢,也可以返回True/False)。把这个搞定后,剩下的就简单多了。
1
我觉得你的程序出现了“卡住”的情况,或者说是陷入了一个永远循环的状态,这意味着它无法完成执行。你在循环的条件是 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()