繁体   English   中英

Python if语句在函数内部不起作用

[英]Python if statement not working inside function

我正在尝试猜测python中的数字游戏。 但是,在again()函数中,我似乎无法运行if语句。

当我不使用Again函数并将所有代码复制并粘贴到相应位置时,它可以正常工作。 但是,当我使用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循环并退出。

if / else语句可以完美运行,问题出在其他地方。 更具体地说,您的代码中有两处错误。

  1. 如果变量和函数again使用相同的名称,则应使用不同的名称。

  2. guessing变量也应该是全局变量,否则while循环将永远不会看到它的变化。

尝试这个:

def again():
    global guessing
    _again = input("Play again? ")
    if _again in ["y","yes"]:
        guessing = True
    else:
        guessing = False

还有一件事。 正如其他人已经指出的那样,使用全局变量通常不是一个好主意,最好是让您的函数返回某些内容。

避免在again调用的函数中again命名变量。 但是,对于您的无限循环问题,您可以在again函数内设置局部变量guessing ,而无需全局变量guessing ,因此检查while循环条件的变量完全不受影响。 我可能建议:

def again():
    global guessing
    play_again_input = input("Play again? ")
    if play_again_input in ["y","yes"]:
        guessing = True
    else:
        guessing = False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM