Самый большой процент буквы 'a' в списке слов
Постала задача: напечатать все слова в которых самый большой процент букв 'a'
star='value,stack,nextdoor,gachi,brutal,brave,amazing,anaconda,brawle.'
strg=star[:-1]
split=strg.split(',')
max=0
for i in split:
An = i.count('a')
long = len(i)
proc = An/long*100
if proc > max:
max = proc
print(i)
print(max)
выводит правильный процент но кроме этого почему-то выводит это:
value
amazing
anaconda#вот это и
37.5#это правильно
(вывело value(20%) и amazing(28%). Хотя у них не самый большой процент. Хоть value и не нужно выводить но аж стало интересно почему не вывело stack,gachi, brave(где тоже 20%))
Ответы (4 шт):
Автор решения: Эникейщик
→ Ссылка
Вы выводите значения, которые больше предыдущего максимума.
Исправить можно, например, так:
max=0
word = ""
for i in split:
An = i.count('a')
long = len(i)
proc = An/long*100
if proc > max:
max = proc
word = i
print(word, max)
Автор решения: Zhihar
→ Ссылка
вот такой алгоритм думаю подойдет:
- из каждого слова формируем массив только из букв
а - вычисляем длину массива а), т.е. по сути кол-во букв
a - делим на длину слова и получаем процент букв
ав слове - по этому показателю сортируем массив слов
код:
words.sort(key=lambda word: len([x for x in word if x == 'a']) / len(word))
ну или если вообще все в 1 строчку пихать:
text = 'value,stack,nextdoor,gachi,brutal,brave,amazing,anaconda,brawle.'
words = sorted(text[:-1].split(','), key=lambda w: len([c for c in w if c == 'a']) / len(w))
самый короткий код:
words = sorted(text[:-1].split(','), key=lambda w: w.count('a') / len(w))
Автор решения: Vlad
→ Ссылка
я сделал бы так:
star='value,stack,nextdoor,gachi,brutal,brave,amazing,anaconda,brawle.'
arr = star[:-1].split(",")
arr.sort(key = lambda x: -x.count("a") / len(x) * 100 if x.count("a") else 0)
for word in arr:
print(f"{word}: {word.count('a') / len(word) * 100}")
Автор решения: Vitalya
→ Ссылка
Спасибо ребят, я решил сделать вот так что-бы если было 2 слова или больше с одинаковыми процентами ,то вывести их все
max=0
for i in split:
An = i.count('a')
long = len(i)
proc = An/long*100
if proc >= max:
max = proc
for i in split:
An = i.count('a')
long = len(i)
proc1 = An / long * 100
if proc1 == max:
print(i, max)