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

Python扫雷游戏添加难度选择后出现NameError: name 'n' is not defined问题求助

解决Python扫雷游戏的NameError问题

问题根源是变量作用域:你在Game()函数内部定义的n和mines_no是局部变量,只能在函数内部访问,主程序的代码不在这个函数的作用域里,自然识别不到这两个变量。

修复方案:让函数返回难度参数

把Game()改成返回n和mines_no的函数,主程序调用时接收这两个值,就能正常使用了。修改后的代码如下:

def Game():
    difficulty = input("Select your difficulty (b, i, h):")
    if difficulty.lower() == 'b':
        n = 5
        mines_no = 5
    elif difficulty.lower() == 'i':
        n = 6
        mines_no = 10
    else:
        n = 8
        mines_no = 20 
    return n, mines_no  # 返回选择后的难度参数

if __name__ == "__main__":
    n, mines_no = Game()  # 接收函数返回的变量

    # 网格实际值
    numbers = [[0 for y in range(n)] for x in range(n)] 
    # 网格显示值
    mine_values = [[' ' for y in range(n)] for x in range(n)]

原代码能运行的原因

原来的代码里n和mines_no直接定义在主程序(全局作用域)中,后续创建网格的代码和它们处于同一作用域,因此可以正常访问。

内容的提问来源于stack exchange,提问作者liam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:13:19