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
相关产品推荐
相关产品推荐

