自制计算器
import pickleif 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") 我看你的计算器程序有几个地方需要完善:
1. pickle.dump() 函数的第一个参数应该是要保存的数据,不能为空
2. lst 变量需要先定义
3. 还需要考虑文件不存在的情况
修改后的完整代码:
import pickle
import os
# 检查文件是否存在,如果不存在或用户选择初始化,则创建空列表
if not os.path.exists("history.txt") or input("是否初始化?(是)") == "是":
with open("history.txt","wb") as f:
pickle.dump([], f)
print("好了")
# 加载历史记录
with open("history.txt","rb") as f:
lst = pickle.load(f)
while True:
expr = input(">>>")
if expr == "":
print("Bye!")
break
elif expr == "history":
if lst:# 如果历史记录不为空
print('\n'.join(lst))
else:
print("历史记录为空")
elif expr == "clear":
lst = []# 清空内存中的列表
with open("history.txt","wb") as f:
pickle.dump([], f)# 清空文件
print("已清空")
else:
try:
result = eval(expr)
print(result)
# 记录计算历史
lst.append(str(expr)+"="+str(result))
# 保存到文件
with open("history.txt","wb") as f:
pickle.dump(lst, f)
except ZeroDivisionError:
print("NaN")
except:
print("Error")
主要修改说明:
1. 添加了 import os 来检查文件是否存在
2. pickle.dump() 的第一个参数填入了空列表 []/backcolor]
3. 在循环前先加载历史记录到 lst 变量
4. 修改了异常处理,使用临时变量保存计算结果
5. 添加了对空历史记录的判断
这个计算器可以:
- 输入数学表达式进行计算
- 输入 history 查看计算历史
- 输入 clear 清空历史记录
- 直接按回车退出程序
注意:使用 eval() 函数有一定安全风险,在实际应用中应该对输入进行验证或使用其他更安全的方法。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 学习了,快能看明白了
页:
[1]