使用 while 循环和定义的函数来玩 bunco



我目前正在为bunco编写代码,并定义和调用一个函数take_turn(playernum(。这应该做的是检查当前玩家的分数掷骰子并将新值返回给玩家。我也在一段时间循环中使用它。问题是每当我执行程序时,shell 上都会显示一个无限循环,我将如何解决这个问题?这是我目前的进展。

from random import randint
roundnum=1
player1=0
player2=0
dice1=randint(1,6)
dice2=randint(1,6)
dice3=randint(1,6)
def take_turn(playernumber):
print (dice1,dice2,dice3)
while dice1!=6 or dice2!=6 or dice3!=6:
if dice1==6 or dice2==6 or dice3==6:
playernumber+=1
elif dice1==6 and dice2==6:
playernumber+=5
elif dice1==6 and dice3==6:
playernumber+=5
elif dice2==6 and dice3==6:
playernumber+=5
elif dice1==6 and dice2==6 and dice3==6:
playernumber+=21
if roundnum==dice1 or roundnum==dice2 or roundnum==dice3:
playernumber+= roundnum
if dice1==dice2==dice3:
continue
else:
print (playernumber)
return 
while player1<=20 and player2<=20:
take_turn(player1)
take_turn(player2)
roundnum+=1
print ("It is now round", roundnum)
if player1>=21:
print("Player1 wins")
if player2>=21:
print("Player2 wins")

当您更改take_turn函数中的playernumber值时,这只是函数作用域中定义的变量名称。您必须将新分数返回到调用范围。

在调用作用域中,您必须将返回值分配给变量名称。

def take_turn(playernumber):
...
return playernumber
player1 = take_turn(player1)
player2 = take_turn(player2)

take_turn函数中,

else:
print (playernumber)
return playernumber    # return the value back to the caller

在下面的while循环中,

while player1<=20 and player2<=20:
player1 = take_turn(player1)    # update the value at each turn
player2 = take_turn(player2)

在您的情况下,player1player2的值永远不会改变,因此 while 循环永远不会结束。

编辑

我猜到了你的逻辑并修改了函数:

def take_turn(playernumber):
dice1=randint(1,6)
dice2=randint(1,6)
dice3=randint(1,6)
print (dice1,dice2,dice3)
while dice1==dice2==dice3:
if dice1==6:
playernumber += 21
dice1=randint(1,6)
dice2=randint(1,6)
dice3=randint(1,6)
if dice1==6 and dice2==6:
playernumber+=5
elif dice1==6 and dice3==6:
playernumber+=5
elif dice2==6 and dice3==6:
playernumber+=5
elif dice1==6 or dice2==6 or dice3==6:
playernumber+=1
if roundnum==dice1 or roundnum==dice2 or roundnum==dice3:
playernumber+= roundnum
print (playernumber)
return playernumber

最新更新