0

我是编程新手,特别是 python,我在做作业时遇到了问题。

这是问题所在:

掷骰子是在五月赌场玩的基于骰子的游戏。像二十一点一样,玩家与庄家对战。游戏从玩家投掷一对标准的六面骰子开始。如果玩家总共掷出 7 或 11,则玩家获胜。如果玩家总共掷出 2、3 或 12,则玩家输。对于所有其他掷骰值,玩家将重复掷这对骰子,直到她再次掷出初始值(在这种情况下她赢)或 7(在这种情况下她输了)

实现以正整数 n 作为输入的函数 testCraps(),模拟 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))

我错过了什么吗?任何提示将不胜感激!

4

2 回答 2

1

你的缩进搞砸了。

从线路开始

for i in range (n):

此代码不再是函数“testcraps()”的一部分。

这可能不是唯一的错误,但绝对要从正确的缩进开始。

缩进已修复,因此我将编辑我的答案。

我不会为你的作业编写代码,但我会给你这个建议。您现在的问题是“合乎逻辑的”问题。您需要将问题分解为更容易理解和测试的更简单的步骤。首先编写一个函数,它只模拟一个游戏并根据该游戏的输赢返回 0/1(或 True/False,如果您愿意)。让它工作,其余的将是微不足道的。

于 2013-03-01T19:02:16.267 回答
1

我认为您在程序中遇到“挂起”,或者永远循环的情况,这意味着它无法完成执行。你循环 whiledice1 != 7 or dice1 != dice这意味着循环不会停止,直到 dice1 等于 7 和,这意味着如果不是 7 dice,它将永远循环。dice

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()
于 2013-03-01T19:29:18.133 回答