Определение функции для поиска уникальных палиндромов в заданной строке - PullRequest
0 голосов
/ 22 февраля 2020

Я в некотором роде новичок в python. Я пытаюсь определить функцию, когда меня спросят, что она выдаст только уникальные слова, которые являются палиндромами в строке.

Я использовал casefold() для сделайте его без учета регистра и set() для печати только уникальных.

Вот мой код:

def uniquePalindromes(string):
    x=string.split()
    for i in x:
        k=[]
        rev= ''.join(reversed(i))
        if i.casefold() == rev.casefold():
            k.append(i.casefold())
            print(set(k))
        else:
            return

Я пытался запустить эту строку

print( uniquePalindromes('Hanah asked Sarah but Sarah refused') )

Ожидаемый результат должен быть ['hanah','sarah'], но он возвращает только {'hanah'} как выход Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020

Ваш лог 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'}
0 голосов
/ 22 февраля 2020

они мне здесь не понравятся, если я дам вам несколько советов. Но попробуйте разделить количество символов (не являющихся пробелами) на 2. Если количество на каждой стороне не эквивалентно, то вы должны иметь дело с нечетным количеством букв. Это означает, что вы должны пройти через палиндром, идущий вниз от середины и вверх от середины, сравнивая эти буквы вместе и используя среднюю точку в качестве точки «спрыгивания». Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...