【问题标题】:If-elif-else statement not working in simple Python 3.3 class?if-elif-else 语句在简单的 Python 3.3 类中不起作用?
【发布时间】:2013-09-04 21:56:40
【问题描述】:

我的代码是:

def nameAndConfirm():
    global name,confirm
    print("What is your name? ")
    name = input()
    str(name)
    print("Is",name,"correct? ")
    confirm = input()
    str(confirm) 
    print(confirm)

    if confirm.upper() == "Y" or "YES":
        classSelection()
    elif confirm.upper() == "N" or "NO":
        nameAndConfirm()
    else:
        print("Valid answers are Y/Yes or N/No!")
        nameAndConfirm()

nameAndConfirm()

对此代码的批评也很好。我知道它非常狡猾,我知道如何在某些方面缩短它,但我试图让我的 if-elif-else 工作。我不知道我还能做什么,因为我已经尝试了我所知道的一切。我还在上面的代码中缩进了 4 个空格。 **编辑:抱歉,错误是它总是运行“if”,无论您输入什么进行确认,它都不会超过第一个 if 行

【问题讨论】:

    标签: python if-statement python-3.x


    【解决方案1】:

    条件confirm.upper() == "Y" or "YES" 和另一个条件未按预期进行评估。你想要

    confirm.upper() in {"Y", "YES"}
    

    confirm.upper() == "Y" or confirm.upper() == "YES"
    

    你的条件相当于:

    (confirm.upper() == "Y") or "YES"
    

    这永远是真实的:

    In [1]: True or "Yes"
    Out[1]: True
    
    In [2]: False or "Yes"
    Out[2]: 'Yes'
    

    在单独的注释中,行

    str(name)
    

    str(confirm)
    

    什么都不做。函数返回的值不会保存在任何地方,nameconfirm 也不会改变。而且,它们一开始就已经是字符串,因为它们包含input() 的返回值。

    【讨论】:

    • 并不是说它真的对两个元素有什么区别,但是集合更适合成员测试,{"Y", "YES"}
    • @GP89 ​​同意,我也在这种情况下使用它们。已编辑
    • 啊,好的,谢谢!我已经有一年没有用 Python 编码了,这是我以前知道的,但忘记了。
    • 很高兴为您提供帮助 :) 请记住,您可以在适当的时候 accept answers
    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多