如何导出Python圆周率计算程序的输出?代码修改咨询
如何将圆周率计算程序的输出导出到文本文件
方案一:手动控制输出到文件(保留控制台输出)
你需要修改代码中的输出逻辑部分,也就是main函数里的print语句,以及最后的耗时打印语句,让它们同时写入文件。具体修改如下:
修改后的完整代码
import time start_time = time.time() def calcPi(limit): q, r, t, k, n, l = 1, 0, 1, 1, 3, 3 decimal = limit counter = 0 while counter != decimal + 1: if 4 * q + r - t < n * t: yield n if counter == 0: yield '.' if decimal == counter: print('') break counter += 1 nr = 10 * (r - n * t) n = ((10 * (3 * q + r)) // t) - 10 * n q *= 10 r = nr else: nr = (2 * q + r) * l nn = (q * (7 * k) + 2 + (r * l)) // (t * l) q *= k t *= l l += 2 k += 1 n = nn r = nr def main(): # 打开文件,'w'表示覆盖写入,若要追加则用'a' with open('pi_result.txt', 'w', encoding='utf-8') as output_file: pi_digits = calcPi(int(input( "Enter the number of decimals to calculate to: "))) i = 0 for d in pi_digits: # 同时输出到控制台和写入文件 print(d, end='') output_file.write(str(d)) i += 1 if i == 200: print("") output_file.write('\n') i = 0 if __name__ == '__main__': main() elapsed_time = time.time() - start_time # 打印耗时到控制台 print(f"--- {elapsed_time} seconds ---") # 将耗时追加到结果文件 with open('pi_result.txt', 'a', encoding='utf-8') as output_file: output_file.write(f"\n--- {elapsed_time} seconds ---")
关键修改点
- 新增
with open(...)语句:用上下文管理器安全打开文件,无需手动关闭。 - 将原
print(d, end='')替换为同时执行控制台打印和文件写入,确保两种输出渠道都能获取结果。 - 换行操作对应修改为
print("")和output_file.write('\n'),保持格式一致。 - 单独处理耗时统计的写入,用追加模式(
a)避免覆盖圆周率内容。
方案二:重定向标准输出(无需修改原有print逻辑)
如果不想改动太多原有代码,可以通过重定向sys.stdout,让所有print输出自动写入文件,同时可选择保留控制台输出。
修改后的完整代码
import time import sys start_time = time.time() def calcPi(limit): q, r, t, k, n, l = 1, 0, 1, 1, 3, 3 decimal = limit counter = 0 while counter != decimal + 1: if 4 * q + r - t < n * t: yield n if counter == 0: yield '.' if decimal == counter: print('') break counter += 1 nr = 10 * (r - n * t) n = ((10 * (3 * q + r)) // t) - 10 * n q *= 10 r = nr else: nr = (2 * q + r) * l nn = (q * (7 * k) + 2 + (r * l)) // (t * l) q *= k t *= l l += 2 k += 1 n = nn r = nr def main(): # 保存原始标准输出(控制台) original_stdout = sys.stdout with open('pi_result.txt', 'w', encoding='utf-8') as output_file: # 将标准输出重定向到文件 sys.stdout = output_file pi_digits = calcPi(int(input( "Enter the number of decimals to calculate to: "))) i = 0 for d in pi_digits: print(d, end='') i += 1 if i == 200: print("") i = 0 # 计算并写入耗时 elapsed_time = time.time() - start_time print(f"--- {elapsed_time} seconds ---") # 恢复原始标准输出 sys.stdout = original_stdout # 可选:在控制台再次打印耗时 print(f"--- {elapsed_time} seconds ---") if __name__ == '__main__': main()
关键修改点
- 导入
sys模块,用于操作标准输出流。 - 保存原始
sys.stdout(控制台输出),修改完成后恢复,避免影响后续程序输出。 - 将
sys.stdout临时指向文件对象,所有print语句的输出会自动写入文件,无需修改原有打印逻辑。
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

