Невозможно определить гласные из согласных

С приведенным ниже кодом, независимо от того, что является первой буквой ввода, оно всегда определяется как гласный:

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 … если оно == или! =, Оно все равно возвращает "vowel" . Зачем?

5 Solutions collect form web for “Невозможно определить гласные из согласных”

Python – это не английский язык. Если у вас есть куча выражений с or или между ними, каждый из них должен иметь смысл сам по себе. Обратите внимание, что самостоятельно:

 if "e": print("something") 

всегда будет печатать something , даже если letter не равна "e" .

Вам нужно сделать это так:

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

Или, более кратко:

 if letter in "aeiouy": 
 if firstLetter in ("a", "e", "i", "o", "u"): 

что ваш тест делает следующее:

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

и каждый из последних 4 тестов является истинным.

Попробуйте это для вашего логического выражения:

 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 ... 

Использование вышеизложенного гораздо более кратким.

Ваш тест не работает, как вы думаете. Вы спрашиваете: «Если переменная равна« a », тогда остальная часть вашего теста в основном спросит, являются ли буквы e, i, o или u False. Только пустая строка оценивает значение False (попробуйте «e» == False в интерпретаторе, чтобы видеть). Используйте «in» test из других ответов. Кроме того, убедитесь, что firstLetter с нижним регистром, поэтому вы всегда сравниваете, как нравится.

Сначала вы должны знать, как or работает, он оценивает как левое, так и правое выражение и возвращает первое выражение, которое оценивает true, иначе оно возвращает последнее выражение:

Из этого источника вы можете видеть, что все они оценивают false:

  • Никто
  • Ложь
  • ноль любого числового типа, например, 0, 0L, 0.0, 0j.
  • любая пустая последовательность, например, '', (), [].
  • любое пустое отображение, например {}.
  • экземпляры пользовательских классов, если класс определяет ненулевой () или len () метод, когда этот метод возвращает целое число 0 или значение bool False.3.1

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

Таким образом, непустая строка будет оцениваться как истина, и она будет возвращена:

 >>> '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' не является пустой строкой, поэтому оно оценивается как истина и print "vowel"

Вы можете увидеть мой другой ответ здесь, который отвечает на ваш вопрос, примерно так:

 if c.upper() in "AEIOU" 

будет проверять, является ли письмо гласным.

Python - лучший язык программирования в мире.