You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:15:08