2

以下のコードでは、入力の最初の文字が何であれ、常に母音として決定されます。

original = raw_input("Please type in a word: ")
firstLetter = original[0]
print firstLetter

if firstLetter == "a" or "e" or "i" or "o" or "u":
    print "vowel"
else:
    print "consonant"

実際、ブール値が if ステートメントで何であるかは問題ではありません...それが == または != の場合、それは依然として return"vowel"です。なんで?

4

5 に答える 5

8

Python は英語ではありません。orそれらと一緒に、またはそれらの間に多数の式がある場合and、それぞれがそれ自体で意味をなす必要があります。単独で次の点に注意してください。

if "e":
    print("something")

と等しくなくsomethingても、常に を出力します。letter"e"

次のようにする必要があります。

if letter == "a" or letter == "e"  # (...)

または、より簡潔に:

if letter in "aeiouy":
于 2012-08-04T13:48:44.313 に答える
2
if firstLetter in ("a", "e", "i", "o", "u"):

テストが行​​うことは次のとおりです。

if (firstLetter == "a") or "e" or "i" or "o" or "u":

後者の 4 つのテストはそれぞれ true です。

于 2012-08-04T13:48:28.987 に答える
1

ブール式でこれを試してください:

firstLetter = 'a'
firstLetter in 'aeiou' 
True

firstLetter = 'x'
firstLetter in 'aeiou' 
False

これは、

      firstLetter in ['a', 'e', 'i', 'o', 'u']

つまり、これを次のように if ステートメントに入れたいとします。

if firstLetter  in 'aeiou':
   print 'vowel'
else:
   print 'consonant'

:

元のアプローチは正しい軌道に乗っていましたが、次のように各文字を個別に比較する必要がありました

if firstLetter == 'a' or firstLetter == 'e' or firstLetter == 'i' or ... 

上記を使用すると、はるかに簡潔になります。

于 2012-08-04T13:47:36.860 に答える
0

あなたのテストは、あなたが思っているようには機能しません。「変数が「a」と等しい場合」と尋ねている場合、残りのテストでは基本的に、文字 e、i、o、または u が False かどうかを尋ねます。空の文字列のみが False と評価されます (インタープリターで "e" == False を試して確認してください)。他の回答の「in」テストを使用してください。また、常に同じように比較するように、firstLetter は必ず小文字にしてください。

于 2012-08-04T13:52:16.303 に答える
0

最初に、どのようorに機能するかを理解する必要があります。これは、左右の式の両方を評価し、true と評価された最初の式を返します。それ以外の場合は、最後の式を返します。

このソースから、これらすべてが false と評価されることがわかります。

  • なし
  • 間違い
  • 0、0L、0.0、0j など、任意の数値型のゼロ。
  • ''、()、[] などの空のシーケンス。
  • {} などの空のマッピング。
  • ユーザー定義クラスのインスタンス、クラスがゼロ以外の() またはlen () メソッドを定義している場合、そのメソッドが整数ゼロまたはブール値 False.3.1 を返す場合

>>> False or True
True
>>> '' or False
False
>>> '' or 0
0

したがって、空でない文字列は true として評価され、返されます。

>>> 'abc' or False
'abc

 if firstLetter == "a" or "e" or "i" or "o" or "u":
     print "vowel"
 else:
     print "consonant"

文字列'foo'の場合、 'f'は最初の文字です。コードの最初の部分でfirstLetter == "a" or "e"、左の式は false と評価されますが'e'、空の文字列ではないため、true と評価されます。print "vowel"

あなたの質問に答える私の他の答えをここで見ることができます。

if c.upper() in "AEIOU"

文字が母音かどうかをチェックします。

于 2012-08-04T13:56:48.720 に答える