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

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

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" . Зачем?

  • проверять повторяющиеся символы / букву в строке
  • Как читать один символ за раз из файла в Python?
  • Пиктограммы python pexpect sendcontrol
  • В Python, как проверить, содержит ли строка только определенные символы?
  • Как удалить все после определенного символа в строке?
  • диапазон над символом в python
  • 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" 

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

    Interesting Posts

    Как я могу перечислить все связанные с внешним ключом объекты в панели администратора Django?

    Разрешения на уровне объектов Django 1.2 – сторонние решения?

    ./xx.py: строка 1: import: команда не найдена

    Удалить столбец в пандах, если это все нули

    Эффективный алгоритм для создания допустимых выражений с определенной целью

    Ортогональная регрессионная подгонка в методе скудных наименьших квадратов

    Библиотека Python для воспроизведения звука с фиксированной частотой

    Как сгенерировать комбинации списков?

    Тип Hinting для объектов типа, который определяется

    Могу ли я сделать (x_i-x_j) ^ T (x_i-x_j) для x_i, x_j – это строки в матрице X с нативной функцией numpy вместо цикла

    Предотвращение импорта кода Python из определенных модулей?

    Требуется ли украшатель слотов PySide?

    Пользовательский порядок сортировки списка

    Как распечатать нумерованный список в Python 3

    шаблон исключения glob

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