Найти положение гласных в строке в Python

Я пытаюсь работать над некоторым кодом Python, где человеку предлагается ввести строку текста. Затем мне нужно найти положение всех гласных в строке. У меня есть это, но оно не работает...

userInput = (input("Enter a line of text: ")
vowels = ("aeiouAEIOU")
position = 0
for char in userInput :
    if char in vowels :
        position = userInput.find(vowels)
        print(char, position)

Он возвращает гласные, но дает каждой позиции значение -1. Что я делаю неправильно? Я читал, что индексную функцию можно использовать, но мы не дойдем до этого еще несколько недель. Любые предложения по простым исправлениям, которые я мог бы внести в этот код? Спасибо!!

Ваш код нуждается в переосмыслении. вы проверяете каждый символ во входной строке, чтобы увидеть, содержит ли он «aeiouAEIOU». Я думаю, что у вас что-то не так

JeffUK 25.02.2019 00:40
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
3 295
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы можете сделать это с пониманием списка и перечислить:

positions = [i for i, char in enumerate(userInput) if char in vowels]

Это даст вам список индексов гласных — он перечисляет вашу пользовательскую строку ввода как список символов с индексом и применяет предикат — в данном случае, является ли символ гласным или нет.

В вашем коде есть ошибка: когда вы делаете userInput.find(vowels), помните, что строка vowels — это "aeiouAEIOU", поэтому он не найдет ее, если только какая-либо строка "aeiouAEIOU" не находится в userInput. Вместо этого лучше всего enumerate вернуть эти индексы.

userInput = input("Enter a line of text: ")
vowels = "aeiouAEIOU"
for i, char in enumerate(userInput):
    if char in vowels:
        print(char, i)
Ответ принят как подходящий

После того, как тест char in vowels проверен, вы сейчас читаете письмо char, которое гласная, и в этот момент вы можете вывести его напрямую. С другой стороны, вам нужно запомнить позицию, увеличивая ее каждый раз, когда вы переходите к следующей char:

userInput = "This is some input from the user"
vowels = "aeiouAEIOU"
position = 0
for char in userInput:
    if char in vowels:
        print(char, position)
    position += 1

Этот код можно улучшить, чтобы он был немного более питоническим, использование enumerate может избавить вас от отслеживания позиции вручную:

serInput = "This is some input from the user"
vowels = "aeiouAEIOU"
for position, char in enumerate(userInput):
    if char in vowels :
        print(char, position)

Можно сделать еще одно улучшение, на этот раз мы можем улучшить производительность. Стоимость проверки char in vowels пропорциональна размеру строки vowels. С другой стороны, вы можете изменить тип vowels с string на set, проверка того, является ли элемент частью набора, выполняется за постоянное время:

userInput = "This is some input from the user"
vowels = set("aeiouAEIOU")
for pos, char in enumerate(userInput):
    if char in vowels:
        print(char, pos)
string find(str,str, beg=0, end=len(string)) 

Метод определяет, встречается ли строка str в строке или в подстроке строки, если заданы начальный индекс beg и конечный индекс end. В вашем коде,userInput.find(vowels) он проверит пользовательский ввод, если он содержит целую кучу гласных, которая является «aeiouAEIOU». поэтому код можно улучшить следующим образом:

userInput = (input("Enter a line of text: ")
vowels = ("aeiouAEIOU")
position = 0
for char in userInput :
    if char in vowels :
        position = userInput.find(char)
        print(char, position)

Надеюсь, вы не возражаете, но я подчистил ваш ответ. Лучший способ отформатировать код — вставить его и нажать кнопку {}, чтобы отформатировать. Отредактируйте его еще раз, если хотите избавиться от моего имени как редактора.

Paul Rooney 25.02.2019 00:59

Попробуйте приведенный ниже код, он похож на ваш:

 userInput = input("Enter a line of text: ")
 vowels = "aeiouAEIOU"

 for count in userInput:
     x = 9 #there are 10 vowels, from 0 to 9
     while x >= 0:
         if count == vowels[x]:
             print("\n",count)
         x -= 1

 print("\n Done")

Другие вопросы по теме