0

重複の可能性:
`letter==“A” または “a”` が常に True と評価されるのはなぜですか?

私のプログラムでこれを実行すると、質問は通りますが、答えに関係なく、「いいえ」オプションが常に実行されます。オプションの順序を切り替えると、「Y」オプションのみが実行され、常にまっすぐに開始されます。私は単純なものが欠けていると確信しています。何がわからないのですか。

infoconf = raw_input("Is this information correct? Y/N: ")

    if infoconf == "N" or "No":
        print "Please try again."
    elif infoconf == "Y" or "Yes":
        start()
    else:
        print "That is not a yes or no answer, please try again."
4

4 に答える 4

3

察するに

infoconf = raw_input("Is this information correct? Y/N: ")

#you wrote:  infoconf == "N" or "No" but should be:
if infoconf == "N" or infoconf == "No": 
  print "Please try again."
#you wrote: infoconf == "Y" or "Yes" but should be
elif infoconf == "Y" or infoconf == "Yes": 
  start()
else:
  print "That is not a yes or no answer, please try again."

簡単な説明:

when value of x = 'N'
x == 'N' or 'No' will return True
when value of x = 'Y'
x == 'N' or 'No' will return 'No' i believe this is not what you want

反対側で

when value of x = 'N'
x == 'N' or x == 'No' will return True
when value of x = 'Y'
x == 'N' or x == 'No' will return False i believe this is what you want
于 2013-01-16T02:18:27.933 に答える
2

Python はinfoconf == "N" or "No"、あなたが思っていたよりも異なる解釈をします。これは、条件が として解析される「演算子の優先順位」のケースです(infoconf == "N") or ("No")

現在、infoconf == "N"真である場合とそうでない場合がありますが、"No"「何か」であり、論理として扱われると真と評価されます。実際には、条件infoconf == "N" or trueは常に true になります。

他の多くの人が示唆したように、2 番目の論理用語と比較infoconfする"No"とうまくいきます。

于 2013-01-16T02:38:07.603 に答える
1

個人的には、次のようにします。

infoconf = raw_input("Is this information correct? Y/N: ")

if infoconf.lower().startswith('n'):
   # No
elif infoconf.lower().startswith('y'):
   # Yes
else:
   # Invalid

これは、ユーザーが「Y/y/yes/yeah」で「はい」、「N/n/no/nah」で「いいえ」と応答できることを意味します。

于 2013-01-16T02:41:26.927 に答える
1

Python では、次のようにする方が少し簡単です。

infoconf = raw_input("Is this information correct? Y/N: ")

if infoconf in ["N", "No"]:
    print "Please try again."
elif infoconf in ["Y", "Yes"]:
    start()
else:
    print "That is not a yes or no answer, please try again."

他の人が言ったように、if infoconf == "N" or "No"は と同等if (infoconf == "N") or "No"であり、"No"(空でない文字列として) は True と評価されるため、ステートメントは常に true になります。

また、入力を少しうるさくするためにinfoconf = infoconf.strip().lower()、テストを実行する前に実行することをお勧めします (その後、小文字のバージョンと比較します)。

于 2013-01-16T02:53:08.603 に答える