2

私のコードは次のとおりです。

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 行を通過することはありません。

4

1 に答える 1

10

条件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()

于 2013-09-04T21:58:32.673 に答える