Python. Поднять регистр слов в строке
Сижу над кодом. Вроде сделал правильно, но где-то есть ошибка и программа не делает то, что должна. Задание: Задано текст, сделать программу которая определяет и поднимает регистр тех слов, в которых согласных меньше, чем гласных Мой код:
text="ііі ввв ііі"
lst=text.split()
print(lst)
vowels = 0
consonants = 0
for i in lst:
letter = i.lower()
if letter == "а" or letter == "е" or\
letter == "и" or letter == "і" or\
letter == "о" or letter == "у":
vowels += 1
else:
consonants += 1
if vowels > consonants:
i.upper()
print(lst)
Ответы (2 шт):
Автор решения: Danis
→ Ссылка
text = "ііі ввв ііі"
lst = text.split()
print(lst)
for i in range(len(lst)):
a, b = 0, 0
for letter in lst[i].lower():
if letter in ["а", "е", "и", "і", "о", "у"]:
a += 1
else:
b += 1
if a > b:
lst[i] = lst[i].upper()
print(lst)
Автор решения: Zhihar
→ Ссылка
можно так попробовать:
считаем кол-во гласных букв и сравниваем их с размером слова (должно быть больше половины)
result = [w.upper() if len([l for l in w.lower() if l in 'аеиіоу']) > len(w) // 2 else w for w in text.split()]
вариант 2:
result = [(w, w.upper())[len([l for l in w.lower() if l in 'аеиіоу']) > len(w) // 2] for w in text.split()]
вариант 3 (спасибо @Danis):
result = [(w, w.upper())[sum(l in "aеиіоу" for l in w.lower()) > len(w) // 2] for w in text.split()]