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'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ToDesk超强更新来了!V4.8.4版本全面进化,远程体验再突破!

在远程控制领域&#xff0c;究竟什么才是真正好用的远程控制&#xff1f;是连接速度更快&#xff1f;是画面更清晰&#xff1f;还是操作更流畅&#xff1f;答案并非唯一&#xff1b;真正的“好用、实用”&#xff0c;是让每一次连接都自然、高效且安心。这一次&#xff0c;ToDe…

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

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

Unity 一个简单的红点模块

红点模块主要通过树结构完成&#xff0c;先使用一个普通的树结构实现主要特性树形结构管理&#xff1a;支持父子节点的层级关系自动传播&#xff1a;子节点变化自动更新父节点状态事件通知&#xff1a;红点变化时触发事件&#xff0c;便于UI更新多种操作&#xff1a;设置、增加…

2024提示工程架构师认证指南:Agentic AI方向的3大权威证书与备考攻略

2024提示工程架构师认证指南&#xff1a;Agentic AI方向的3大权威证书与备考攻略关键词&#xff1a;提示工程、Agentic AI、智能代理、大语言模型、工具调用、认证攻略、LLM应用 摘要&#xff1a;当大语言模型&#xff08;LLM&#xff09;从“对话助手”进化为“自主行动体”&a…

虾皮店如何做爆款商品呢

在竞争激烈的虾皮电商平台上&#xff0c;如何让自己的商品脱颖而出成为爆款&#xff1f;这是每个卖家都在思考的问题。打造爆款不仅是销量和利润的保证&#xff0c;更是店铺流量和品牌认知度的关键驱动力。本文将为您解析虾皮爆款商品的打造流程&#xff0c;从选品策略到推广技…

SOLID原则在Python中的实践:写出可维护的优雅代码

目录 摘要 1 引言&#xff1a;为什么Python开发者更需要SOLID原则 1.1 Python的动态特性是一把双刃剑 1.2 SOLID原则的Python化解读 2 单一职责原则&#xff08;SRP&#xff09;&#xff1a;专注的力量 2.1 SRP核心理解&#xff1a;变更的理由是关键 2.2 实战&#xff1…

学霸同款9个AI论文工具,专科生搞定毕业论文!

学霸同款9个AI论文工具&#xff0c;专科生搞定毕业论文&#xff01; AI 工具如何助力论文写作&#xff1f; 在当前的学术环境中&#xff0c;越来越多的学生开始借助 AI 工具来辅助论文写作。这些工具不仅能够帮助学生高效完成论文初稿&#xff0c;还能在降低 AIGC 率、保持语义…

深度好文:自动化与智能化融合在AI应用架构中的ROI分析,架构师必看!

自动化与智能化融合&#xff1a;AI应用架构中的ROI分析与架构设计指南 元数据框架 标题&#xff1a;自动化与智能化融合&#xff1a;AI应用架构中的ROI分析与架构设计指南关键词&#xff1a;AI应用架构&#xff1b;自动化&#xff1b;智能化&#xff1b;ROI分析&#xff1b;系统…

揭秘提示工程架构师:Agentic AI在环境监测的成功应用

从“问问题”到“解决问题”&#xff1a;提示工程架构师如何用Agentic AI重构环境监测&#xff1f; 关键词 提示工程架构师、Agentic AI、环境监测、智能代理、多模态感知、自动决策、持续学习 摘要 当我们还在讨论“如何让AI答对问题”时&#xff0c;一群“提示工程架构师”已…

2026.1南昌经开区发展规划

重磅!刚刚!南昌北部核心区域规划发展定调! 南昌楼市情报 2026年1月6日 18:04 江西 听全文

Java Agent 技术全解析:从基础框架到落地实践

Java Agent 技术全解析&#xff1a;从基础框架到落地实践 在 Java 开发领域&#xff0c;“无侵入式增强”是很多场景&#xff08;监控、排查、适配&#xff09;的核心需求。而 Java Agent 作为 JVM 层面的字节码增强技术&#xff0c;恰好能满足这一需求——无需修改业务代码&am…

双喜临门!埃文科技荣获“河南省高成长性科技型领军企业”

12月30日下午&#xff0c;河南省高成长性科技型领军企业&#xff08;企业家&#xff09;颁奖大会在郑州黄河迎宾馆举办。本次大会以“豫见新质 科创未来”为主题&#xff0c;旨在发掘表彰科技型标杆企业与领军人才&#xff0c;凝聚创新发展共识&#xff0c;助力河南打造国家创新…

强烈安利8个AI论文网站,本科生毕业论文轻松搞定!

强烈安利8个AI论文网站&#xff0c;本科生毕业论文轻松搞定&#xff01; 论文写作的“救星”来了&#xff0c;AI 工具如何帮你轻松应对毕业难题&#xff1f; 对于很多本科生来说&#xff0c;毕业论文是大学阶段最头疼的任务之一。从选题到开题&#xff0c;从撰写到降重&#x…

标准落地!AI 大模型知识库建设迈入规范化新阶段

人工智能作为战略性核心技术&#xff0c;正加速重塑产业格局&#xff0c;工信部明确提出以标准体系建设破解技术与应用脱节难题&#xff0c;引领大模型产业高质量发展。2025年12月31日&#xff0c;由国家工业信息安全发展研究中心&#xff08;工信部电子一所&#xff09;牵头&a…

【收藏必备】EAG-RAG架构详解:打造闭环自优化的企业级知识问答系统,彻底解决大模型幻觉问题

EAG-RAG是智能体增强检索增强生成技术&#xff0c;通过构建闭环自优化端到端工作流程&#xff0c;解决了传统RAG的知识时效性、幻觉问题和数据访问限制。该技术采用深度知识工程处理数据&#xff0c;通过双重LLM智能体优化查询&#xff0c;结合BM25和向量搜索进行混合检索&…

AI编程:程序员的职业新选择

AI编程:程序员的职业新选择 关键词:AI编程、程序员职业、人工智能、编程技术、职业发展 摘要:本文深入探讨了AI编程作为程序员职业新选择的相关内容。从背景介绍入手,阐述了目的、预期读者、文档结构和术语等。详细解析了AI编程的核心概念与联系,包括原理和架构的示意图及…

校平机:金属板材的“整形医生“

什么是校平机&#xff1f;校平机&#xff08;Leveling Machine&#xff09;是金属加工行业中用于消除板材内部应力、矫正弯曲和波浪形缺陷的专用设备。它通过一系列交错排列的辊轮对金属板材进行反复弯曲&#xff0c;使材料内部纤维组织均匀延伸&#xff0c;最终获得平整、无内…

吾爱原创出品,牛哇~

啰嗦几句 说到文件粉碎&#xff0c;我一直用的是火绒的文件粉碎功能&#xff0c;其集成在右键里&#xff0c;右键选择即可粉碎文件。 而如果不想装火绒的小伙伴&#xff0c;可以用今天推荐的这款非常小巧的文件粉碎软件&#xff0c;非常好用&#xff01; 软件介绍 今天介绍两…

【干货收藏】2026年AI智能体工程:10大维度详解,决定Agent能否规模化落地的生死线

智能体工程是将不确定的LLM系统转化为可靠生产级应用的工程化过程。面对Agent从Demo到产品的五道鸿沟&#xff08;不确定性、上下文管理、环境变化、可观测性不足、安全治理缺失&#xff09;&#xff0c;智能体工程通过四大能力架构层和十大工程维度&#xff0c;实现对Agent的工…

修改adb shell下$前的提示名称

基于android12 修改文件位置&#xff1a;system/core/adb/daemon/shell_service.cpp static std::string GetHostName() {char buf[HOST_NAME_MAX];if (gethostname(buf, sizeof(buf)) ! -1 && strcmp(buf, "localhost") ! 0) return buf;// 在此处return你想…