我正在尝试实现一个不带参数的函数craps()
,模拟一个掷骰子游戏,如果玩家赢了则返回1
,如果玩家输了则返回0
。< / p>
游戏规则: 游戏开始时玩家投掷一对骰子。如果玩家总共掷出7或11,则玩家获胜。如果玩家总共掷出2,3或12,则玩家输了。对于所有其他掷骰价值,游戏继续进行,直到玩家滚动初始值agaian(在这种情况下玩家获胜)或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循环?我真的找不到它的问题,但我知道这是错误的或不完整的。
答案 0 :(得分:5)
由于这一行,你永远不会进入while循环:
newRoll = craps()
就这一点而言。因此它只会执行craps()函数的顶部。您需要使用之前的相同滚动码。我想你想要的东西:
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
答案 1 :(得分:3)
游戏规则:游戏开始时玩家投掷一对骰子。如果玩家总共掷出7或11,则玩家获胜。如果玩家总共掷出2,3或12,则玩家输了。对于所有其他掷骰价值,游戏继续进行,直到玩家滚动初始值agaian(在这种情况下玩家获胜)或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。
答案 2 :(得分: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