Форум » Кодирование и декодирование информации » 8(115) » Ответить

8(115)

altarist: помогите найти ошибку (считая руками получила 6), а программой 66 Петя составляет четырёхбуквенные слова перестановкой букв слова АБАК. При этом он избегает слов с двумя подряд одинаковыми буквами. Сколько всего различных слов может составить Петя? <code> k=0 from itertools import product for i in product('АБАК', repeat=4): i=''.join(i) if i.count('АА')==0 and i.count('ББ')==0 and i.count('КК')==0: k+=1 print(k) </code>

Ответов - 1

polyakovss: Здравствуйте, altarist! Вам нужно разобраться в том, чем отличаются итераторы product и permutations модуля itertools. Поскольку в условии задачи речь идет о перестановке букв слова, разумно использовать итератор "permutations": [pre2] from itertools import permutations p = set(permutations('АБАК')) s = map(lambda x: ''.join(x), p) k = 0 for x in s: if x.count('АА') == 0 and x.count('ББ') == 0 and x.count('КК') == 0: k += 1 print(k)[/pre2]Или коротко так:[pre2] from itertools import permutations s = map(lambda x: ''.join(x), set(permutations('АБАК'))) L = [x for x in s if x.count('АА') == 0 and x.count('ББ') == 0 and x.count('КК') == 0] print(len(L)) [/pre2] Ваш вариант кода можно поправить так: [pre2] from itertools import product k=0 for i in set(product('АБАК', repeat=4)): i=''.join(i) if i.count('А') == 2 and i.count('Б') == 1 and i.count('К') == 1 \ and i.count('АА')==0 and i.count('ББ')==0 and i.count('КК')==0: k+=1 print(k)[/pre2]



полная версия страницы