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






Вы можете сделать это с пониманием списка и перечислить:
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)
Надеюсь, вы не возражаете, но я подчистил ваш ответ. Лучший способ отформатировать код — вставить его и нажать кнопку {}, чтобы отформатировать. Отредактируйте его еще раз, если хотите избавиться от моего имени как редактора.
Попробуйте приведенный ниже код, он похож на ваш:
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")
Ваш код нуждается в переосмыслении. вы проверяете каждый символ во входной строке, чтобы увидеть, содержит ли он «aeiouAEIOU». Я думаю, что у вас что-то не так