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

为何代码无法从CSV文件读取数独数值并重构数独棋盘

问题描述

print_board函数用于格式化打印数独棋盘,直接使用代码内硬编码的数独二维数组时功能正常,但读取sudoku.csv文件作为数据源时运行异常。
sudoku.csv文件内容如下,值之间用分号分隔:

7;8;0;4;0;0;1;2;0
6;0;0;0;7;5;0;0;9
0;0;0;6;0;1;0;7;8
0;0;7;0;4;0;2;6;0
0;0;1;0;5;0;9;3;0
9;0;4;0;6;0;0;0;5
0;7;0;3;0;0;0;1;2
1;2;0;0;0;7;4;0;0
0;4;9;2;0;6;0;0;7

原问题代码:

import csv
with open('sudoko.csv') as f:
    #next(f) 
    board = csv.reader(f,delimiter=';')
    for row in board:
        print(row)

def print_board(bo):
    for i in range(len(bo)):
        if i % 3 == 0 and i != 0:
            print("- - - - - - - - - - - - - ")

        for j in range(len(bo[0])):
            if j % 3 == 0 and j != 0:
                print(" | ", end="")

            if j == 8:
                print(bo[i][j])
            else:
                print(str(bo[i][j]) + " ", end="")              
print(print_board(row))
问题定位

代码一共存在4处明显错误:

  • 文件名拼写错误:打开文件时写的是sudoko.csv,和实际文件名sudoku.csv的字母顺序错了,直接运行会报文件不存在的错误。
  • 棋盘数据没有正确组装:csv.reader返回的是迭代器,原代码只在循环里逐行打印了内容,没有把所有行收集成完整的二维列表,循环结束后row变量只保留了csv最后一行的一维数据,传给需要9*9二维列表的print_board后,遍历逻辑完全不符合预期。
  • 多余的打印包裹:print_board本身是直接打印内容的函数,没有返回值,外层套print()会在棋盘内容输出完之后多打印一行None。
  • 数据类型问题:csv读取到的所有值都是字符串类型,虽然打印不受影响,但后续如果要做数独求解逻辑会触发类型错误,读取时最好转成整数。
修正后代码
import csv

board = []
# 修正文件名,指定编码适配不同系统
with open('sudoku.csv', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        # 每行内容转整数,过滤空值跳过空行
        processed_row = [int(num.strip()) for num in row if num.strip()]
        if len(processed_row) == 9:
            board.append(processed_row)

def print_board(bo):
    for i in range(len(bo)):
        if i % 3 == 0 and i != 0:
            print("- - - - - - - - - - - - - ")

        for j in range(len(bo[0])):
            if j % 3 == 0 and j != 0:
                print(" | ", end="")

            if j == 8:
                print(bo[i][j])
            else:
                print(str(bo[i][j]) + " ", end="")

# 直接传入完整的二维棋盘数据
print_board(board)

运行后会输出格式正确的数独棋盘:

7 8 0  | 4 0 0  | 1 2 0
6 0 0  | 0 7 5  | 0 0 9
0 0 0  | 6 0 1  | 0 7 8
- - - - - - - - - - - - - 
0 0 7  | 0 4 0  | 2 6 0
0 0 1  | 0 5 0  | 9 3 0
9 0 4  | 0 6 0  | 0 0 5
- - - - - - - - - - - - - 
0 7 0  | 3 0 0  | 0 1 2
1 2 0  | 0 0 7  | 4 0 0
0 4 9  | 2 0 6  | 0 0 7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:39:19