Python编写Collatz猜想测试代码时无法写入结果到文件求助
问题根因
代码无法得到预期的文件写入结果,由4个问题共同导致:
- 测试范围不合理:
range(2**100,9**100)区间跨度达到10^95量级,程序永远不可能执行完整个循环,也就永远走不到with代码块正常退出的位置。如果手动强制终止运行,内存中暂存的写入缓冲区不会自动刷到磁盘,最终文件里看不到内容。 - 写入内容无分隔:绝大多数
file1.write()调用都没有加换行符或空格,哪怕有少量内容写入磁盘,所有数字、分隔线会全部挤在同一行,很容易被误判为写入失败。 - 数值类型错误:Python3中
/是浮点除法,大整数运算后转浮点数会出现精度丢失,后续的奇偶判断、终止条件判断(x==1)都会失效,递归逻辑异常会直接中断写入流程。 - 冗余代码:
with语句本身会在代码块执行结束后自动关闭文件,末尾手动写的file1.close()属于多余逻辑,虽然不会直接触发报错,但属于不规范写法。
修复方式
- 将测试范围调整到可正常跑完的合理区间,先验证逻辑正确性再按需扩大范围
- 所有写入文件的内容末尾按需添加换行符,保证内容格式可读
- 偶数分支的除法替换为整数除法
//,全程保持整数运算,避免浮点数精度问题 - 每写完一组测试结果主动调用
flush()强制将缓冲区内容刷入磁盘,避免程序异常终止时内容丢失 - 删除多余的手动关闭文件代码
修复后可正常运行的代码
with open("MyFile.txt", "w", encoding="utf-8") as file1: def test(x): if x == 1: print(x) file1.write(f"{x}\n") split_line = "=" * 80 print(split_line) file1.write(f"{split_line}\n") file1.flush() return elif x % 2 == 0: print(x) file1.write(f"{x}\n") test(x // 2) else: print(x) file1.write(f"{x}\n") test(3 * x + 1) # 示例测试范围为1-1000,可按需调整 for x in range(1, 1001): print(f"testing for {x}") file1.write(f"testing for {x}\n") test(x)
内容的提问来源于stack exchange,提问作者YagizTankut
相关产品推荐
相关产品推荐

