MultiplePalyndrome函数无法正确识别多词回文问题求助
问题分析与解决
你的代码问题出在标点和空格的过滤逻辑上:
原代码里的message_revis = ''.join(x for x in message if x not in punct or x not in gap)用了or,这会导致空格(不在标点集合)、标点(不在空格集合)都被保留下来——等于根本没过滤掉这些干扰字符,所以带空格/标点的回文会因为残留的特殊字符对比失败。
修复后的代码
import string def MultiplePalyndrome(): isPalyndrome = True message = input('Your message\n').lower() # 合并标点和空格集合,一次性过滤 unwanted_chars = set(string.punctuation + string.whitespace) message_revis = ''.join(x for x in message if x not in unwanted_chars) i = 0 while i < len(message_revis) / 2 and isPalyndrome: if message_revis[i] != message_revis[len(message_revis) - i - 1]: isPalyndrome = False i = i + 1 if isPalyndrome: print("It's palyndrome! Yeah.") else: print("Nope. It's NOT palyndrome!") MultiplePalyndrome()
说明
- 把标点和空格合并成一个
unwanted_chars集合,简化过滤逻辑 - 过滤条件改为
x not in unwanted_chars,确保所有干扰字符都被移除 - 处理后的字符串只保留有效字符,对比回文时就不会出错了
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

