news 2026/4/18 8:22:22

DeepSeek辅助编写的计算数独可选数的python程序第3部分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek辅助编写的计算数独可选数的python程序第3部分

就是增加了批处理

在第2个程序的基础上,增加功能函数,读入换行分隔的文本文件,输出行号、原文本、迭代后文本、原已知数、现已知数的csv文件,只给出新增的代码,以及调用的命令行,例如 sudofill.py input.txt ouput.csv
新增代码如下

importcsvimportsysdefprocess_sudoku_line(board_str,line_num):"""处理单个数独字符串,返回结果信息"""iflen(board_str)!=81:return{'line_num':line_num,'original':board_str,'final':'ERROR: 长度不是81字符','initial_known':0,'final_known':0,'filled_count':0}ifnotset(board_str).issubset(set('0123456789')):return{'line_num':line_num,'original':board_str,'final':'ERROR: 包含非数字字符','initial_known':0,'final_known':0,'filled_count':0}# 计算初始已知数initial_known=81-board_str.count('0')# 迭代求解final_board,all_iterations=solve_iteratively_silent(board_str)# 计算最终已知数final_known=81-final_board.count('0')return{'line_num':line_num,'original':board_str,'final':final_board,'initial_known':initial_known,'final_known':final_known,'filled_count':final_known-initial_known}defsolve_iteratively_silent(initial_board):"""静默版本的迭代求解,不打印过程,只返回结果"""current_board=initial_boardwhileTrue:# 计算候选数candidates=find_candidates(current_board)# 检查是否有唯一候选数可以填充has_single_candidates=Falseforrinrange(9):forcinrange(9):pos=r*9+cifcurrent_board[pos]=='0'andlen(candidates[r][c])==1:has_single_candidates=Truebreakifhas_single_candidates:breakifnothas_single_candidates:break# 填充唯一候选数board_list=list(current_board)changed=Falseforrinrange(9):forcinrange(9):pos=r*9+cifboard_list[pos]=='0'andlen(candidates[r][c])==1:num=next(iter(candidates[r][c]))board_list[pos]=str(num)changed=Trueifnotchanged:breaknew_board="".join(board_list)# 检查是否已经解决ifnew_board.count('0')==0:current_board=new_boardbreak# 更新当前数独current_board=new_board# 安全检查:最多迭代100次# 这个值可以调整,但对于正常数独,100次足够了returncurrent_board,[]# 返回空迭代历史defbatch_process_file(input_file,output_file):"""批量处理文件中的所有数独"""print(f"处理文件:{input_file}")print(f"输出到:{output_file}")results=[]try:withopen(input_file,'r',encoding='utf-8')asf:lines=f.readlines()total_lines=len(lines)print(f"读取到{total_lines}行")fori,lineinenumerate(lines,1):# 清理行:去除空白字符board_str=line.strip()ifnotboard_str:# 跳过空行continueprint(f"处理第{i}行:{board_str[:20]}...")# 处理数独result=process_sudoku_line(board_str,i)results.append(result)# 显示进度print(f" 初始已知数:{result['initial_known']}, 最终已知数:{result['final_known']}, 填充数:{result['filled_count']}")exceptFileNotFoundError:print(f"错误: 找不到文件{input_file}")returnexceptExceptionase:print(f"读取文件时出错:{e}")return# 写入CSV文件try:withopen(output_file,'w',newline='',encoding='utf-8')ascsvfile:fieldnames=['line_num','original','final','initial_known','final_known','filled_count']writer=csv.DictWriter(csvfile,fieldnames=fieldnames)writer.writeheader()forresultinresults:writer.writerow(result)print(f"\n成功处理{len(results)}个数独")print(f"结果已保存到{output_file}")# 显示统计信息ifresults:total_filled=sum(r['filled_count']forrinresults)avg_filled=total_filled/len(results)iflen(results)>0else0print(f"\n统计信息:")print(f" 总填充数:{total_filled}")print(f" 平均每个数独填充数:{avg_filled:.2f}")# 按填充数分组统计fill_groups={0:0,1:0,2:0,3:0,4:0,5:0,'6+':0}forrinresults:filled=r['filled_count']iffilled<0:filled=0# 错误情况的处理iffilled<=5:fill_groups[filled]+=1else:fill_groups['6+']+=1print(f"\n填充数分布:")forkeyinsorted(fill_groups.keys()):count=fill_groups[key]ifcount>0:print(f" 填充{key}个数字:{count}个数独")exceptExceptionase:print(f"写入CSV文件时出错:{e}")defbatch_main():"""批量处理模式的主函数"""print("数独批量处理工具")print("="*50)iflen(sys.argv)!=3:print("用法: python sudofill.py input.txt output.csv")print("\n参数说明:")print(" input.txt - 包含数独字符串的文本文件(每行一个81字符的数独)")print(" output.csv - 输出CSV文件路径")print("\n示例: python sudofill.py puzzles.txt results.csv")sys.exit(1)input_file=sys.argv[1]output_file=sys.argv[2]batch_process_file(input_file,output_file)# 在main()函数中添加批量处理选项defenhanced_main():"""增强版主函数,支持命令行参数和交互模式"""iflen(sys.argv)==3:# 命令行参数模式batch_main()else:# 交互模式(原main函数的内容)print("数独唯一候选数迭代求解器")print("="*50)# ... 原main函数的其余代码保持不变 ...# 这里需要将原main函数的内容复制过来# 由于原main函数较长,这里只显示关键修改print("\n提示:要批量处理文件,请使用命令行:")print(" python sudofill.py input.txt output.csv")# 调用原main函数逻辑(这里需要整合)# 由于代码较长,建议将原main函数改名为interactive_main()# 然后在这里调用interactive_main()definteractive_main():"""交互模式主函数(原main函数重命名)"""main()# 修改if __name__ == "__main__": 部分if__name__=="__main__":# 检查命令行参数iflen(sys.argv)==3:# 批量处理模式batch_main()eliflen(sys.argv)==1:# 交互模式interactive_main()else:print("用法:")print(" 交互模式: python sudofill.py")print(" 批量处理: python sudofill.py input.txt output.csv")sys.exit(1)

使用说明:
将新增代码添加到原程序的末尾

确保原程序中的函数(如find_candidates、solve_iteratively、print_summary等)仍然可用

运行批量处理时,程序会显示处理进度和统计信息

CSV文件可以用Excel或其他电子表格软件打开查看
输出如下

C:\d\1230>python candnum3.py input10sudo.txt output10sudo.txt 数独批量处理工具 ================================================== 处理文件: input10sudo.txt 输出到: output10sudo.txt 读取到 10 行 处理第 1 行: 10200506768479015075... 初始已知数: 50, 最终已知数: 81, 填充数: 31 处理第 2 行: 06540809209000178028... 初始已知数: 43, 最终已知数: 81, 填充数: 38 ... 初始已知数: 44, 最终已知数: 81, 填充数: 37 处理第 10 行: 00013527007894035015... 初始已知数: 42, 最终已知数: 81, 填充数: 39 成功处理 10 个数独 结果已保存到 output10sudo.txt 统计信息: 总填充数: 348 平均每个数独填充数: 34.80 填充数分布: 写入CSV文件时出错: '<' not supported between instances of 'str' and 'int'
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 5:30:19

从淘汰到进化:Claude Code Skills 定义AI时代程序员的核心竞争力

在AI时代&#xff0c;程序员角色正从“写代码”转向“智能体编排”&#xff08;Agent Orchestration&#xff09;。通过Claude Code Skills和MCP&#xff08;Model Context Protocol&#xff09;&#xff0c;AI不仅能思考&#xff0c;还能操作数据库、服务器、浏览器等现实系统…

作者头像 李华
网站建设 2026/4/18 5:39:47

【MVCD 6】

CS 41 课程八&#xff1a;标准库&#xff08;5月23日&#xff09; 一、课程基本信息 日期&#xff1a;2023年5月23日 主题&#xff1a;Standard Libraries&#xff08;标准库&#xff09; 期末项目提醒 截止日期&#xff1a;14天后建议&#xff1a;接下来几周随时可以与我们会面…

作者头像 李华
网站建设 2026/4/18 8:04:47

探索AI智能体VertGrow的独特功能与核心优势

引言与背景在今天这个快速发展的数字时代&#xff0c;企业在销售和市场营销上面临着各种挑战与机遇。随着技术的进步&#xff0c;AI智能销售机器人逐渐成为提升销量和管理客户的重要助手。我们正在研究&#xff0c;像VertGrow AI销冠这样的一站式营销获客平台&#xff0c;是如何…

作者头像 李华
网站建设 2026/4/18 8:42:34

2026年最佳替代数据提供商(顶级平台对比)

TLDR: 另类数据市场由向合规性、人工智能驱动的分析和数据粒度的转变所定义。在2026年&#xff0c;最好的另类数据提供商是那些提供透明数据来源和专业领域专业知识的公司。我们的顶级平台——YipitData、FactSet和Eagle Alpha——根据其卓越的数据质量、实时交付和稳健的合规框…

作者头像 李华
网站建设 2026/4/18 7:59:14

学长亲荐!9款一键生成论文工具测评:本科生毕业论文全攻略

学长亲荐&#xff01;9款一键生成论文工具测评&#xff1a;本科生毕业论文全攻略 2026年学术写作工具测评&#xff1a;为何值得一看&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的本科生开始依赖AI工具来辅助毕业论文的撰写。然而&#xff0c;面对市场上琳琅满…

作者头像 李华