我正在尝试猜测python中的数字游戏。但是,在another()函数中,我似乎无法运行if语句。
当我不使用再次功能并将所有代码复制并粘贴到相应位置时,它可以正常工作。但是,当我使用Again函数时,“是否再次播放?”询问问题,但if语句被忽略,导致while循环不断地继续。我尝试使用全局函数,但是第二次输入一个猜测,它带有TypeError:'str'对象不可调用。
import random
def guess():
global num
num = random.randint(1,3)
guessat = input("Out of 1 to 3, which number do you guess? ")
return(guessat)
def again():
global again
again = input("Play again? ")
if again in ["y","yes"]:
guessing = True
else:
guessing = False
print("Welcome to Guess the Number!")
guessing = True
while guessing:
guessy = guess()
guessy = int(guessy)
if guessy == num:
print("You got it right!")
again()
elif guessy != num:
print("Wrong number!")
again()
quit()
当我为问题“再次播放?”输入“否”或其他任何内容时我希望程序退出while循环并退出。
答案 0 :(得分:3)
if / else语句运行完美,问题出在其他地方。更具体地说,您的代码中有两处错误。
对变量和变量使用相同的名称again
函数,则应使用其他名称。
guessing
变量也应该是全局变量,否则while循环将永远不会看到它的变化。
尝试一下:
def again():
global guessing
_again = input("Play again? ")
if _again in ["y","yes"]:
guessing = True
else:
guessing = False
还有一件事。正如其他人已经指出的那样,使用全局变量通常不是一个好主意,最好让您的函数返回某些内容。
答案 1 :(得分:0)
避免在名为again
的函数中命名变量again
。但是,对于无限循环问题,您可以在guessing
函数内设置 local 变量again
,而无需设置 global 变量guessing
,因此检查while循环条件的变量完全不受影响。我可能会建议:
def again():
global guessing
play_again_input = input("Play again? ")
if play_again_input in ["y","yes"]:
guessing = True
else:
guessing = False