Python回文检测脚本问题求助:两种实现方案均失效
回文检测脚本的问题分析与修复
第一种方案的问题与修复
问题:reversed(phrase)返回的是列表反转迭代器,并非列表对象,直接和列表phrase做相等判断永远不会成立。
修复方式:将迭代器转换为列表,使用list(reversed(phrase))即可完成类型统一。
修正后的代码:
original_phrase = input() phrase = list(original_phrase) reversed_phrase = list(reversed(phrase)) # 把迭代器转为列表 if phrase == reversed_phrase: print(original_phrase, '是回文') else: print(original_phrase, '不是回文')
第二种方案的问题与修复
问题:reversed_phrase = phrase是引用赋值,两个变量指向同一个列表对象。调用reversed_phrase.reverse()会直接修改原列表phrase,导致循环对比时两个列表完全一致,判断逻辑失效。
修复方式:创建原列表的独立副本,比如用phrase.copy()或phrase[:],再对副本执行反转操作。
修正后的代码:
original_input= input() phrase = list(original_input) reversed_phrase = phrase.copy() # 创建原列表的副本 reversed_phrase.reverse() is_palindrome = False for i in range(len(phrase)): print(phrase[i], reversed_phrase[i]) if phrase[i] != reversed_phrase[i]: break elif i == len(phrase) - 1: is_palindrome = True if is_palindrome: print(original_input, '是回文') else: print(original_input, '不是回文')
额外简化方案
其实无需转列表,直接利用字符串切片反转即可实现更简洁的回文判断:
original = input() if original == original[::-1]: print(original, '是回文') else: print(original, '不是回文')
内容的提问来源于stack exchange,提问作者toxurn
相关产品推荐
相关产品推荐

