weixin_46843112 2020-04-06 03:17 采纳率: 0%
浏览 4194

TypeError: unsupported operand type(s) for //: 'NoneType' and 'int'

我在用python写一个解数独问题的程序,在迭代的过程中第二步总是会出现这样一个错误,改了很多次都绕不开这一条。

初学者,拜托了。。

代码如下:

def row(i, sudoku):
    # 返回一行
    row_list = []
    for q in range((i-1)*9, (i-1)*9+9):
        row_list.append(sudoku[q])

    return row_list


def col(j, sudoku):
    # 返回一列
    col_list = []
    for w in range((j-1) % 9, 80, 9):
        col_list.append(sudoku[w])

    return col_list


def sub(i, j, sudoku):
    # 返回一宫
    sub_list = []
    """多个条件得到宫数,待优化"""
    if i <= 3:
        if j <= 3:
            e = 1
            r = 1
        elif j <= 6:
            e = 2
            r = 4
        else:
            e = 3
            r = 7
    elif i <= 6:
        if j <= 3:
            e = 4
            r = 28
        elif j <= 6:
            e = 5
            r = 31
        else:
            e = 6
            r = 34
    else:
        if j <= 3:
            e = 7
            r = 55
        elif j <= 6:
            e = 8
            r = 58
        else:
            e = 9
            r = 61

    """e为宫数,r为该宫的第一个数字,手动计算得到的"""

    for t in range(r - 1, r + 2):
        sub_list.append(sudoku[t])
    for t in range(r + 8, r + 11):
        sub_list.append(sudoku[t])
    for t in range(r + 17, r + 20):
        sub_list.append(sudoku[t])

    return sub_list


def problem(sudoku):
    # 找到空点
    problem_list = []
    for z in range(0, 80):
        if sudoku[z] == 0:
            problem_list.append(z)

    return problem_list


def start_problem(sudoku):
    """第一个空点"""
    problem_list = problem(sudoku)
    x = problem_list[0]
    return x


def next_problem(i, j, sudoku):
    # 下一个空格
    x = turn(i, j)
    if sudoku[x] == 0:
        for y in range(x, 80):
            if sudoku[y] == 0:
                return y + 1


def turn(i, j):
    """行列位置转列表位置"""
    z = (i - 1) * 9 + j - 1
    return z


def get_i(x):
    """列表位置得行数"""
    i = 0
    i = x // 9 + 1
    return i


def get_j(x):
    """列表位置得列数"""
    j = 0
    j = x % 9 + 1
    return j


def check(number, x, sudoku):
    """数独规则"""
    i = get_i(x)
    j = get_j(x)
    row_list = row(i, sudoku)
    col_list = col(j, sudoku)
    sub_list = sub(i, j, sudoku)
    if number not in row_list and number not in col_list and number not in sub_list:
        return True
    else:
        return False


def available(i, j, sudoku):
    """一个位置的备选数字"""
    available_list = []
    row_list = row(i, sudoku)
    col_list = col(j, sudoku)
    sub_list = sub(i, j, sudoku)
    for number in range(1, 10):
        if number not in row_list and number not in col_list and number not in sub_list:
            available_list.append(number)

    return available_list


def try_fill(i, j, sudoku):
    """一格尝试"""
    a = turn(i, j)

    for value in available(i, j, sudoku):
        if sudoku[a] == 0:
            sudoku[a] = value
            b = 0
            b = next_problem(i, j, sudoku)
            w = get_i(b)
            e = get_j(b)
            try_fill(w, e, sudoku)



def fill(sudoku):
    """填空"""
    x = start_problem(sudoku)
    i = get_i(x)
    j = get_j(x)
    try_fill(i, j, sudoku)

    return sudoku


def answer(sudoku):
    """最终答案"""
    fill(sudoku)
    print(sudoku)

错误如下:

Traceback (most recent call last):
File "C:/Users/yl/PycharmProjects/shudu/sudo.py", line 215, in
fill(sudoku2)
File "C:/Users/yl/PycharmProjects/shudu/sudo.py", line 171, in fill
try_fill(i, j, sudoku)
File "C:/Users/yl/PycharmProjects/shudu/sudo.py", line 160, in try_fill
w = get_i(b)
File "C:/Users/yl/PycharmProjects/shudu/sudo.py", line 114, in get_i
i = x // 9 + 1
TypeError: unsupported operand type(s) for //: 'NoneType' and 'int'

  • 写回答

1条回答 默认 最新

  • mollpppp 2020-04-06 10:48
    关注

    None//2
    Traceback (most recent call last):
    File "", line 1, in
    TypeError: unsupported operand type(s) for //: 'NoneType' and 'int'
    如上提示:你需要检查一下你传入的x是否为预期值
    使用print(x)或者print(type(x))来验证x是否为None

    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题