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

如何修改Python加法程序,支持用户选择文件保存目录并满足需求?

解决方案

针对你的需求,我们对现有代码做针对性调整,实现可持续输入、追加保存结果、3次无效输入限制以及灵活的保存位置选择功能,修改后的完整代码如下:

import os
import tkinter as tk
from tkinter import filedialog, messagebox

def ensure_directory_exists(directory):
    # 确保目标目录存在,不存在则自动创建
    if not os.path.exists(directory):
        os.makedirs(directory)

def save_result(equation, save_path):
    # 以追加模式写入运算结果
    with open(save_path, 'a', encoding='utf-8') as file:
        file.write(equation + '\n')

def add_numbers():
    # 初始化tkinter窗口并隐藏
    root = tk.Tk()
    root.withdraw()
    
    # 让用户选择保存路径模式
    choice = messagebox.askyesno("保存位置选择", "是否自定义保存位置?\n选择'否'将默认保存到当前目录下的data/results.txt")
    
    if choice:
        save_filename = "results.txt"
        folder = filedialog.askdirectory(title="选择保存文件夹")
        if not folder:  # 用户取消选择
            print("未选择保存位置,程序退出")
            return
        save_path = os.path.join(folder, save_filename)
    else:
        data_dir = "data"
        ensure_directory_exists(data_dir)
        save_path = os.path.join(data_dir, "results.txt")
    
    invalid_attempts = 0
    max_invalid_attempts = 3  # 最多3次无效输入限制

    while True:
        try:
            # 询问用户是否继续运算
            continue_input = input("\n是否继续进行加法运算?(y/n): ").strip().lower()
            if continue_input != 'y':
                print(f"程序已退出,所有结果已保存到 {save_path}")
                break
            
            num1 = float(input("请输入第一个数字: "))
            num2 = float(input("请输入第二个数字: "))
            
            result = num1 + num2
            equation = f"{num1} + {num2} = {result}"
            
            print(equation)
            save_result(equation, save_path)
            invalid_attempts = 0  # 有效输入后重置无效尝试次数

        except ValueError:
            invalid_attempts += 1
            remaining = max_invalid_attempts - invalid_attempts
            print(f"无效输入,请输入有效的数字。剩余无效尝试次数: {remaining}")
            if invalid_attempts >= max_invalid_attempts:
                print(f"已达到{max_invalid_attempts}次无效输入,程序退出")
                print(f"所有结果已保存到 {save_path}")
                break

if __name__ == "__main__":
    add_numbers()

关键修改说明

  • 可持续输入控制:通过while True循环配合用户输入的y/n,实现用户自主选择退出时机的需求
  • 追加保存机制:将文件打开模式从覆盖('w')改为追加('a'),确保每次运算结果都能保留在文件中
  • 自动目录创建:新增ensure_directory_exists函数,当选择默认保存路径时,自动创建data目录避免路径错误
  • 双模式保存选择:通过弹窗让用户自主选择自定义保存位置或默认路径,兼顾你的初始需求和新功能要求
  • 无效输入限制:设置最多3次无效输入的阈值,达到后自动退出,满足“支持测试3次输入”的要求

内容的提问来源于stack exchange,提问作者user12860710

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:57:06