Ваш лог c - это звук, и ваша функция в основном выполняет то, что вы хотите. Частично проблема заключается в том, как вы возвращаете вещи - все, что вы делаете, это печатаете набор каждого отдельного слова. Например, когда я беру ваш существующий код и делаю это:
>>> print(uniquePalindromes('Hannah Hannah Alomomola Girafarig Yes Nah, Chansey Goldeen Need log'))
{'hannah'}
{'alomomola'}
{'girafarig'}
None
hannah
, alomomola
и girafarig
- это палиндромы, которые я ожидаю увидеть, но они не приведены в формат я ожидаю. Во-первых, они печатаются , вместо возвращаются , а во-вторых, это происходит один за другим.
И функция возвращает None
и вы пытаетесь это распечатать. Это не то, что мы хотим.
Вот исправленная версия вашей функции:
def uniquePalindromes(string):
x=string.split()
k = [] # note how we put it *outside* the loop, so it persists across each iteration without being reset
for i in x:
rev= ''.join(reversed(i))
if i.casefold() == rev.casefold():
k.append(i.casefold())
# the print statement isn't what we want
# no need for an else statement - the loop will continue anyway
# now, once all elements have been visited, return the set of unique elements from k
return set(k)
теперь она возвращает примерно то, что вы ожидаете - сингл набор с несколькими словами, вместо печати нескольких наборов с одним словом каждый. Затем мы можем напечатать этот набор.
>>> print(uniquePalindromes("Hannah asked Sarah but Sarah refused"))
{'hannah'}
>>> print(uniquePalindromes("Hannah and her friend Anna caught a Girafarig and named it hannaH"))
{'anna', 'hannah', 'girafarig', 'a'}