Я пытаюсь написать программу, которая найдет в одном слове все palindromes. Например, слово «радар» имеет 2 палиндрома radar
и ada
. Мы пропускаем отдельные буквы, поэтому r, a, d
и т. Д. Не являются палиндромами.Непонятное назначение списка
import copy
def ILEP(word):
lista = list(word)
counter = 0
pali = []
def isPalindrome(listaWord):
backup = copy.deepcopy(listaWord)
backup.reverse()
a = ''.join(backup)
b = ''.join(listaWord)
if(a == b):
return True
else:
return False
for i in range(len(lista)):
current = [lista[i]]
for j in range(i+1, len(lista)):
current.append(lista[j])
if(isPalindrome(current)):
print(current)
pali.append(current)
counter+=1
print(pali)
return counter
print(ILEP("radar"))
Программа находит все палиндромов правильно, но assings их неправильно в список pali
. Консоль:
['r', 'a', 'd', 'a', 'r']
['a', 'd', 'a']
[['r', 'a', 'd', 'a', 'r'], ['a', 'd', 'a', 'r']]
2
Как вы можете видеть, что печатает палиндромов ['r', 'a', 'd', 'a', 'r']
и ['a', 'd', 'a']
, но список pali
получил неверное значение [['r', 'a', 'd', 'a', 'r'], ['a', 'd', 'a', 'r']]
можно объяснить мне функцию 'is_palindrome'? – RouNdeL
'word [:: - 1]' дает копию слова в обратном порядке. – Daniel
hahaha, U немного сократил мою функцию – RouNdeL