Top.Mail.Ru
Ответы

Ошибка в программе, питон

from random import shuffle
from math import factorial

def permutations(s):
․ if_was = [] # Слова, которые уже генирировались, сохраняю чтобы потом не повторялись
res = []
fact = 1 # число факториал которого нужно будет найти
if len(s) == 1:
res = [s]
return res
elif len(s) == 2:
if s != s[::-1]:
res = [s, s[::-1]]
return res
else:
res = [s]
return res
elif len(s) > 2:
fact = factorial(len(s)) # Факториал длины строки
while len(if_was) < fact: # Вариаций строки столько, сколько факториал длины строки․
# Цикл будет повторяться, пока результат не достигнет нужного числа
s = list(s)
is_there = False
shuffle(s) # Рандомно перемешивает строку, находя разные вариации
s = "".join(map(str, s)) # Превращая список в строку
for i in range(len(if_was)):
if if_was[i] == s: # Если сгенерированная комбинация уже была, переходит к новой
is_there = True
break
if not is_there: # Если не была, добавляет в результат
if_was.append(s)
res.append(s)

return res

print(permutations("abba"))


С заданной строкой "abba" программа не может дать ответ.

P.S. в ответах мэйл оказывается пробелы не ставятся в начале строки

По дате
По рейтингу
Аватар пользователя
Ученик

Проблема в вашем коде может быть связана с логикой проверки на уникальность созданных перестановок. Ваш алгоритм проверки на уникальность комбинаций может работать некорректно. Давайте упростим вашу функцию для создания перестановок и проверки на уникальность. Вот исправленная версия:

from itertools import permutations

def unique_permutations(s):
unique_perms = set() # Для хранения уникальных перестановок
for perm in permutations(s):
if perm not in unique_perms:
unique_perms.add(perm)
return [''.join(perm) for perm in unique_perms]

print(unique_permutations("abba"))
Этот код использует библиотечную функцию permutations из модуля itertools, чтобы найти все перестановки заданной строки. Затем он проверяет уникальность каждой перестановки, используя множество unique_perms, и возвращает список уникальных перестановок.

Вы можете протестировать этот код с вашими строками для создания уникальных перестановок.


Я проверил, у меня всё работает