运行Python回文判断函数报错UnboundLocalError:变量n赋值前被引用
报错原因分析
报错的直接诱因是你在for循环的range参数里直接使用了还未定义的变量n:
- 执行
range(0, n+1, 1)时,循环还未启动迭代,n还没有被赋值,函数内部也没有提前给n定义初始值,因此触发了变量未定义的报错。 - 你提到注释掉函数定义和调用后代码可以正常运行,是因为你此前的运行环境的全局作用域里已经存在被赋值过的变量
n,代码脱离函数作用域后会调用全局的n值,所以不会触发该报错,但代码本身的判断逻辑依然存在缺陷。
原有代码的逻辑缺陷
就算解决了变量定义问题,你现有的判断逻辑也不符合回文的判断规则:
- 你当前只比较了字符串的第一个字符
a[0]和对应位置的字符,只要第一位匹配就直接判定为回文,会出现大量误判,比如输入abca时,第一位a和最后一位a匹配,就会被误判为回文,实际该字符串不是回文。 - 回文的判断规则是整个字符串正序和倒序完全一致,不需要复杂的逐位循环也可以实现。
修正后的代码
给你两个实现版本参考:
简化版(利用Python字符串切片特性)
def PalorNot(): a = input("Enter your word here: ") if a == a[::-1]: print("Your word is a Palindrome") else: print("Your word is not a Palindrome") PalorNot()
逐位对比版(符合你原本想写循环的思路)
def PalorNot(): a = input("Enter your word here: ") length = len(a) is_pal = True # 只需要对比前半段和后半段的对应位置即可 for n in range(length // 2): if a[n] != a[-(n+1)]: is_pal = False break print("Your word is a Palindrome" if is_pal else "Your word is not a Palindrome") PalorNot()
内容的提问来源于stack exchange,提问作者Ashish Gupta
相关产品推荐
相关产品推荐

