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

如何导出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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:50:20