鱼C论坛

 找回密码
 立即注册
查看: 32|回复: 2

[作品展示] 自制计算器

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[python_code]import pickle

if input("是否初始化?(是)") == "是":
    with open("history.txt","wb") as f:
        pickle.dump([],f)
        print("好了")
lst = []
while True:
    expr = input(">>>")
    if expr == "":
        print("Bye!")
        break
    elif expr == "history":
        with open("history.txt","rb") as f:
            print('\n'.join(pickle.load(f)))
    elif expr == "clear":
        with open("history.txt","wb") as f:
            pickle.dump([],f)
            lst = []
            print("已清空")
    else:
        try:
            with open("history.txt","rb") as f:
                lst = pickle.load(f)
            print(eval(expr))
            with open("history.txt","wb") as f:
                lst.append(str(expr)+"="+str(eval(expr)))
                pickle.dump(lst,f)
        except ZeroDivisionError:
            print("NaN")
        except:
            print("Error")[/code]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 3 小时前 | 显示全部楼层
我看你的计算器程序有几个地方需要完善:

1. pickle.dump() 函数的第一个参数应该是要保存的数据,不能为空
2. lst 变量需要先定义
3. 还需要考虑文件不存在的情况

修改后的完整代码:


  1. import pickle
  2. import os

  3. # 检查文件是否存在,如果不存在或用户选择初始化,则创建空列表
  4. if not os.path.exists("history.txt") or input("是否初始化?(是)") == "是":
  5.     with open("history.txt","wb") as f:
  6.         pickle.dump([], f)
  7.         print("好了")

  8. # 加载历史记录
  9. with open("history.txt","rb") as f:
  10.     lst = pickle.load(f)

  11. while True:
  12.     expr = input(">>>")
  13.     if expr == "":
  14.         print("Bye!")
  15.         break
  16.     elif expr == "history":
  17.         if lst:  # 如果历史记录不为空
  18.             print('\n'.join(lst))
  19.         else:
  20.             print("历史记录为空")
  21.     elif expr == "clear":
  22.         lst = []  # 清空内存中的列表
  23.         with open("history.txt","wb") as f:
  24.             pickle.dump([], f)  # 清空文件
  25.         print("已清空")
  26.     else:
  27.         try:
  28.             result = eval(expr)
  29.             print(result)
  30.             
  31.             # 记录计算历史
  32.             lst.append(str(expr)+"="+str(result))
  33.             
  34.             # 保存到文件
  35.             with open("history.txt","wb") as f:
  36.                 pickle.dump(lst, f)
  37.         except ZeroDivisionError:
  38.             print("NaN")
  39.         except:
  40.             print("Error")
复制代码


主要修改说明:

1. 添加了 import os 来检查文件是否存在
2. pickle.dump() 的第一个参数填入了空列表 []/backcolor]
3. 在循环前先加载历史记录到 lst 变量
4. 修改了异常处理,使用临时变量保存计算结果
5. 添加了对空历史记录的判断

这个计算器可以:
- 输入数学表达式进行计算
- 输入 history 查看计算历史
- 输入 clear 清空历史记录
- 直接按回车退出程序

注意:使用 eval() 函数有一定安全风险,在实际应用中应该对输入进行验证或使用其他更安全的方法。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层
学习了,快能看明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-18 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表