定义一个函数来查找给定字符串中的唯一回文
Defining a function to find the unique palindromes in a given string
我对 python.I 有点陌生,我正在尝试定义一个函数,当被问到时,它只会输出唯一的单词,这些单词是字符串中的回文。
我使用 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。如果每边的数量不相等,那么你必须处理奇数个字母。这意味着您应该能够从中间向下和从中间向上遍历回文,比较这些字母并将中间点用作 "jump off" 点。希望这有帮助
你的逻辑是合理的,你的功能主要是做你想做的。部分问题在于您如何 返回 东西 - 您所做的只是打印每个单词的集合。例如,当我使用您现有的代码并执行此操作时:
>>> 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)
现在 returns 大致符合您的预期 - 单个 包含多个单词的集合,而不是打印多个包含一个单词的集合。然后,我们可以打印那个集合。
>>> 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'}
我对 python.I 有点陌生,我正在尝试定义一个函数,当被问到时,它只会输出唯一的单词,这些单词是字符串中的回文。
我使用 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。如果每边的数量不相等,那么你必须处理奇数个字母。这意味着您应该能够从中间向下和从中间向上遍历回文,比较这些字母并将中间点用作 "jump off" 点。希望这有帮助
你的逻辑是合理的,你的功能主要是做你想做的。部分问题在于您如何 返回 东西 - 您所做的只是打印每个单词的集合。例如,当我使用您现有的代码并执行此操作时:
>>> 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)
现在 returns 大致符合您的预期 - 单个 包含多个单词的集合,而不是打印多个包含一个单词的集合。然后,我们可以打印那个集合。
>>> 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'}