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

开发pygame数独项目触发NameError: name 'valid' is not defined如何解决?

报错产生原因
  • 核心原因是Python在当前可访问的作用域内找不到名为valid的函数定义,触发了命名错误
  • 常见场景有两种:
    • 你完全没有实现用来校验数独填入值合法性的valid函数
    • 你把valid定义为所属类的成员方法,但调用时没有加self.前缀,Python只会在全局作用域查找对应函数,最终查找失败
修复方案

方案1:补充实现valid全局函数

如果原本就没写该函数,直接在调用代码的同级作用域添加如下实现即可:

def valid(model, num, pos):
    # 校验同一行无重复值
    for col in range(len(model[0])):
        if model[pos[0]][col] == num and pos[1] != col:
            return False
    # 校验同一列无重复值
    for row in range(len(model)):
        if model[row][pos[1]] == num and pos[0] != row:
            return False
    # 校验同3*3宫格无重复值
    box_x = pos[1] // 3
    box_y = pos[0] // 3
    for row in range(box_y * 3, box_y * 3 + 3):
        for col in range(box_x * 3, box_x * 3 + 3):
            if model[row][col] == num and (row, col) != pos:
                return False
    return True

方案2:修正类成员方法的调用方式

如果valid已经是当前类的成员方法,只需要修改调用语句,添加self.前缀即可,修改后的代码片段如下:

if self.valid(self.model, val, (row,col)) and solve(self.model):
    return True
else:
    self.cubes[row][col].set(0)
    self.cubes[row][col].set_temp(0)
    self.update_model()
    return False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:03