6

私はcodecademyでpythonを学んでおり、現在のタスクは次のとおりです。

パラメータを 1 つ取る関数、shut_down を作成します (任意のパラメータを使用できます。この場合、文字列には s を使用します)。shut_down 関数は、引数として"Yes""yes"、または"YES"を取得した場合に"Shutting down..."を返し、 "Shutdown aborted!"を返す必要があります。"No""no"、または"NO"になったとき。

これらの入力以外のものを取得した場合、関数は「申し訳ありませんが、理解できませんでした」を返す必要があります。

私には簡単に思えましたが、どういうわけか私はまだそれを行うことができません。

関数をテストするために作成したコード:

def shut_down(s):
    if s == "Yes" or s == "yes" or s == "YES":
        return "Shutting down..."
    elif s == "No" or "no" or "NO":
        return "Shutdown aborted!"
    else:
        return "Sorry, I didn't understand you."

i = input("Do you want to shutdown?")
print(i) #was to test the input
print(shut_down(i)) #never returns "Sorry, I didn't understand you"

「いいえ」と「はい」の場合は正常に機能しますが、「はい」の前にスペースを入れるか、単に「a」と入力しても、「シャットダウンが中止されました!」と出力されます。「申し訳ありませんが、理解できませんでした」と表示されるはずですが。

私は何を間違っていますか?

4

3 に答える 3

12

s == "no"最初に書き忘れたelif:

def shut_down(s):
    if s == "Yes" or s == "yes" or s == "YES":
        return "Shutting down..."
    elif s == "No" or "no" or "NO":             # you forgot the s== in this line
        return "Shutdown aborted!" 
    else:
        return "Sorry, I didn't understand you."

これを行う:

def shut_down(s):
    if s == "Yes" or s == "yes" or s == "YES":
        return "Shutting down..."
    elif s == "No" or s == "no" or s == "NO":       # fixed it 
        return "Shutdown aborted!"
    else:
        return "Sorry, I didn't understand you."

それの訳は:

elif s == "No" or "no" or "NO":  #<---this
elif s == "No" or True or True:  #<---is the same as this

これは受け入れられた答えなので、標準的な慣行を含めるために詳しく説明します。大文字と小文字に関係なく文字列を比較するための規則 (equalsIgnoreCase) は、次の.lower()ように使用します

elif s.lower() == "no":
于 2013-07-27T21:11:13.280 に答える
6

大文字と小文字のさまざまな組み合わせをチェックする代わりに、lower関数を使用して小文字のコピーを返し、sそれと比較することができます。

def shut_down(s):
    if s.lower() == "yes":
        return "Shutting down..."
    elif s.lower() == "no":       
        return "Shutdown aborted!"
    else:
        return "Sorry, I didn't understand you."

これは、はるかにクリーンでデバッグが容易です。または、 also を使用してandupperと比較することもできます。"YES""NO"


一致するケースが原因でこれが役に立たない場合はnO、次のinステートメントを使用します。

def shut_down(s):
    if s in ("yes","Yes","YES"):
        return "Shutting down..."
    elif s in ("no","No","NO"):       
        return "Shutdown aborted!"
    else:
        return "Sorry, I didn't understand you."
于 2013-07-27T21:14:47.983 に答える
4

Python は空でない文字列を と評価するTrueため、elif条件は常に と評価されTrueます。

>>> bool('No')
True

>>> bool('NO')
True

値でブール値orを実行Trueすると常に が返さTrueれるため、条件に到達することはなく、else条件に固執しelifます。

を使用して条件をテストする必要があります。

elif choice == 'no' or choice == 'NO' or choice == 'No':

EDIT - glglgl がコメントで指摘したように、==バインドは よりも難しいorため、条件はでは(s == 'No') or 'no' or 'NO'なくとして評価されますs == ('No' or 'no' or 'NO')。この場合else、ユーザーが'NO'.

于 2013-07-27T21:12:43.090 に答える