Python的新手,在给出n个游戏时创建一个掷骰子游戏

时间:2013-03-01 18:38:25

标签: python

我是编程新手,特别是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))

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

2 个答案:

答案 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),具体取决于该游戏是赢还是输。让其工作的其余部分将是微不足道的。