Как посчитать кол-во определённых букв в слове, сгенерированным циклом - Python

Всем привет. Несколько дней ломаю себе голову и никак не могу найти решение поставленной задачи. Может кто-то подскажет или даст нужное направление?

В общем, суть задачи такова: нужно найти кол-во слов, в которых встречаются три буквы "А".

Ещё у нас на руках имеются следующие данные:

1. 5 букв [A, B, C, D, E];

2. Цикл, который перебирает вышеуказанные символы и генерирует из них новые слова;

3. А так же знаем, что сами слова, должны состоять из 8 символов. Цикл я написал, там всё понятно, а вот как проверить сгенерированные циклом слова на наличие 3-х букв "А" - не понимаю (именно трёх, а не 4 и выше, т.к. первое сгенерированное слово имеет 8 букв "А", а по условию задачи, нужно найти слова, в которых их будет только 3 и не более). Мой код (да, он может и не идеальный, но рабочий, учусь, так сказать):

## Мой словарь символов
symbols = ["A", "B", "C", "D", "E"]
## Мои строковые переменные
one = str()
two = str()
three = str()
four = str()
five = str()
six = str()
seven = str()
eight = str()
all_num = str()
## Мои численные переменные
count = 0
## Ещё одини строковые перемнные, но статичные, т.е. неизменяемые
one_str = str("Номер комбинации символов:")
two_str = str("комбинация символов:")
## Перебираем символы из словаря и присваиваем переменной "one"
for one in symbols:
    ## Перебираем символы из словаря и присваиваем переменной "two"
    for two in symbols:
        ## Перебираем символы из словаря и присваиваем переменной "three"
        for three in symbols:
            ## Перебираем символы из словаря и присваиваем переменной "four"
            for four in symbols:
                ## Перебираем символы из словаря и присваиваем переменной "five"
                for five in symbols:
                    ## Перебираем символы из словаря и присваиваем переменной "six"
                    for six in symbols:
                        ## Перебираем символы из словаря и присваиваем переменной "seven"
                        for seven in symbols:
                            ## Перебираем символы из словаря и присваиваем переменной "eight"
                            for eight in symbols:
                                ## Наш счётчик
                                count += 1
                                ## Наша основаная переменная, в которую мы передаём и, условно говоря, складываем, перебранные циклами значения
                                all_num = one + two + three + four + five + six + seven + eight
                                ## Выводим результат(-ы)
                                print(one_str, count, two_str, all_num)

Заранее благодарю за ответ, наводку или доработанный код. И, пожалуйста, можно с объяснить что к чему, всё-таки эта задача меня извела хорошо.


Ответы (1 шт):

Автор решения: Zhihar

не понял, вам нужно это что-ли?

words = ['mama', 'papa', 'ararat', 'banana']

res = sum(word.count('a') == 3 for word in words)

print(res) # выведет 2 - 2 слова с 3 буками 'а'

Вообще если делать многосрочный код, то:

res = 0

for word in words: # перебираем все слова из списка
    if word.count('a') == 3: # с помощью метода 'count()' определяем сколько букв 'a' встречается в анализируемом слове
        res += 1 # увеличиваем счетчик слов у которых 3 буквы 'a' на 1

В короткой однострочной записи формируется список содержащий столько же элементов, сколько в списке со словами, где каждому слову ставится в соответствие True или False в зависимости от того, содержится ли в слове 3 буквы 'a' или нет. А затем вычисляется сумма всех элементов нового списка, поскольку True интерпретируется при сложении как 1, а False как 0, то в результате вычисления суммы получается кол-во слов у которых 3 буквы 'a'

Аналогично работает и код

res = sum(1 for word in words if word.count('a') == 3)

только тут формируется список содержащий 1 для каждого слова из списка words в котором было 3 буквы 'a'

→ Ссылка