if-elif-else语句不能用于简单的Python 3.3类?

use*_*297 2 python if-statement python-3.x

我的代码是:

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()
Run Code Online (Sandbox Code Playgroud)

对这段代码的批评也会很好.我知道它非常狡猾,我知道如何在某些方面缩短它,但我试图让我的if-elif-else工作.我不知道我能做什么,因为我已经尝试了所有我知道的事情.我也在上面的代码中缩进了4个空格.**编辑:抱歉,错误是它始终运行"if"它永远不会超过第一个if行,无论你输入什么来确认

Lev*_*sky 10

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

confirm.upper() in {"Y", "YES"}
Run Code Online (Sandbox Code Playgroud)

要么

confirm.upper() == "Y" or confirm.upper() == "YES"
Run Code Online (Sandbox Code Playgroud)

你的病情相当于:

(confirm.upper() == "Y") or "YES"
Run Code Online (Sandbox Code Playgroud)

总是真的:

In [1]: True or "Yes"
Out[1]: True

In [2]: False or "Yes"
Out[2]: 'Yes'
Run Code Online (Sandbox Code Playgroud)

在单独的注释,行

str(name)
Run Code Online (Sandbox Code Playgroud)

str(confirm)
Run Code Online (Sandbox Code Playgroud)

什么都不做 由函数返回的值不保存任何地方,并nameconfirm不被改变.而且,它们已经是字符串开头,因为它们具有的返回值input().

  • 并不是说它对两个元素有任何不同,但是集合更适合于成员资格测试,`{"Y","YES"}` (3认同)