Подсчет числа гласных в строке
Необходимо написать программу, которая считает количество гласных букв в слове. Главное требование - использование while
Я вроде все написал правильно, однако не понимаю, почему мой код не работает, может у вас есть идеи или другие способы реализации?
x = list('привет')
slovo = []
for i in range(len(x)):
y = x[i].lower()
slovo.append(y)
b = set('уеыаоэяию')
g = 0
i = 0
while i < len(slovo):
for letter in slovo:
if letter in b:
g += 1
s = len(x) - g
print('Количетсво гласных:', g)
print('Количество согласных:', s)
Ответы (3 шт):
для слова конечно кол-во гласных + кол-во согласных равно длине слова, для предложения уже не так (поскольку есть пробелы и прочие знаки)
такой код устроит?
text = 'Текст с гласными (и скобками)!'
vowels = 'аеёиоуэюя'
consonants = 'бвгджзйклмнпрстфхцчшщьъ'
vowels_count = 0
consonants_count = 0
pos = 0
while pos < len(text):
if text[pos] in vowels:
vowels_count += 1
if text[pos] in consonants:
consonants_count += 1
pos += 1
print(f'Количетсво гласных: {vowels_count}')
print(f'Количество согласных: {consonants_count}')
хотя через for код чуть покороче:
vowels_count = 0
consonants_count = 0
for letter in text:
if letter in vowels:
vowels_count += 1
if letter in consonants:
consonants_count += 1
а если использовать тернарные операторы, то можно вообще короткий сделать (для while это тоже подходит)
vowels_count = 0
consonants_count = 0
for letter in text:
vowels_count += letter in vowels
consonants_count += letter in consonants
А если хочется совсем коротенького, тогда:
vowels_count = sum(letter in vowels for letter in text)
consonants_count = sum(letter in consonants for letter in text)
P.S.
не делал перевод в нижний регистр, но если хочется, то
text = text.lower()
const = 'уеыаоэяёию'
while True:
print(sum(map(lambda x: 1 if x in const else 0, list(input().lower()))))
break
Не, ну а что? While же есть...
Вот можно так можно, но идея для юникода не очень в общем-то. Хотя думаю, что должна быть библиотека для юникода, которая нормально определяет является ли буква гласной. Вот если такое есть, то просто применить filter с такой функцией и потом подсчитать размер получившегося в результате списка.
letters=[False]*256
vowels=('уеыаоэяиюё')
init_pos=ord('а')
for i in range(len(vowels)-1):
letters[ord(vowels[i])-init_pos]=True
def is_vowel(letter):
return letters[ord(letter)-init_pos]
word=str(input()).lower()
vowel_word=list(filter(is_vowel,word))
print(len(vowel_word))