Können nicht bestimmen, Vokale von Konsonanten
Mit dem code unten, egal, was der erste Buchstabe der Eingabe ist, Sie ist immer bestimmt als ein Vokal:
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"
In der Tat, es spielt keine Rolle, was der Boolesche Wert im if-Anweisung... wenn es == oder != es ist noch zurück "vowel"
. Warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Python ist nicht die englische Sprache. Wenn Sie eine Reihe von Ausdrücken, die mit
or
oderand
zwischen Ihnen, jeder muss den Sinn auf seine eigenen. Beachten Sie, dass auf Ihrer eigenen:immer drucken
something
, auch wennletter
nicht gleich"e"
.Müssen Sie tun es so:
Oder, prägnanter:
in
ist ziemlich viel, was Sie erwarten würde.thing in seq
ist wahr, wennseq
hat ein element gleichthing
.was dein test macht, ist der folgende:
und jeder der letzteren 4 tests ist wahr.
Versuchen, diese für Ihre booleschen Ausdruck:
Dies ist äquivalent zu
D. H., möchten Sie dies in die if-Anweisung wie folgt aus:
Hinweis:
Ihrem ursprünglichen Ansatz auf dem richtigen Weg war, aber Sie hätte zu vergleichen, jeder Brief separat wie
Mithilfe der oben genannten ist sehr viel präziser.
Ihre test funktioniert nicht wie Sie denken, es tut. Sie Fragen, "Wenn die variable gleich 'a'", dann der rest Ihrer Prüfung grundsätzlich die Frage, ob die Buchstaben e, i, o oder u sind Falsch. Nur ein leerer string als False ausgewertet wird (versuchen Sie "e" == False " in der interpreter zu finden). Verwenden Sie die "in" - test von anderen Antworten. Auch, stellen Sie sicher, dass Kleinbuchstaben firstLetter, sodass Sie immer vergleichen gerne.
Zuerst sollten Sie wissen, wie
or
funktioniert, es wertet sowohl den linken und rechten Ausdruck, und es gibt den ersten Ausdruck, der den Wert true, ansonsten gibt es den letzten Ausdruck:Aus diesem Quelle können Sie sehen, dass diese Bewertung falsch:
Also eine nicht-leere Zeichenfolge wird als true ausgewertet werden, und es wird zurückgegeben:
Für einen string
'foo'
,'f'
ist der erste Brief.Im ersten Teil des Codes
firstLetter == "a" or "e"
, der linke Ausdruck als false ausgewertet werden, aber'e'
keine leere Zeichenkette ist, so wird es als true ausgewertet, und es wirdprint "vowel"
Sehen Sie meine andere Antwort hier, Antworten auf Ihre Frage, so etwas wie dieses:
wird überprüfen, ob ein Buchstabe ist ein Vokal.