3

我正在尝试实现一个craps()不带参数的函数,模拟一场掷骰子游戏,1如果玩家赢了,0如果玩家输了,则返回。

游戏规则:游戏从玩家掷出一对骰子开始。如果玩家总共掷出 7 或 11,则玩家获胜。如果玩家总共掷出 2,3 或 12,则玩家输了。对于所有其他掷骰值,游戏继续进行,直到玩家再次掷出初始值(在这种情况下玩家获胜)或 7(在这种情况下玩家失败)。

我想我越来越近了,但我还没有到那里,我认为我的 while 循环还没有正常工作。这是我到目前为止得到的代码:

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 = craps()
    while newRoll not in (7,dice):
        if newRoll == dice:
            return 1
        if newRoll == 7:
            return  0

如何修复while循环?我真的找不到它的问题,但我知道它是错误的或不完整的。

4

3 回答 3

5

由于这一行,您永远不会进入 while 循环:

newRoll = craps()   

这就是它所能得到的。所以它只会做 crap() 函数的顶部。您只需要使用与之前相同的滚动代码。我想你想要这样的东西:

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
if newRoll == 7:
    return  0
于 2013-05-22T19:26:58.223 回答
3

游戏规则:游戏从玩家掷出一对骰子开始。如果玩家总共掷出 7 或 11,则玩家获胜。如果玩家总共掷出 2,3 或 12,则玩家输了。对于所有其他掷骰值,游戏继续进行,直到玩家再次掷出初始值(在这种情况下玩家获胜)或 7(在这种情况下玩家失败)。

def rollDice(): # define a function to generate new roll
    return random.randrange(1,7) + random.randrange(1,7)

def craps():
    firstRoll= rollDice()
    if firstRoll in (7,11): 
        return 1 # initial winning condition
    if firstRoll in (2,3,12):
        return 0 #initial losing condition

    while True:
        newRoll = rollDice()
        if newRoll == firstRoll: 
            return 1 #secondary winning condition
        if newRoll == 7: 
            return 0 #secondary losing condition

然后你可以craps()在你想玩一些花旗骰的时候跟注,如果它赢了或输了,它的输出将为 1 或 0。

于 2013-05-22T20:31:36.280 回答
1

您正在递归调用craps,但这不起作用,因为函数返回 1 或 0。您需要将实际的骰子滚动添加到while循环中。

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
于 2013-05-22T19:28:24.627 回答