我将向大家展示一个功能完备的计算器程序,它具备基本的计算功能、历史记录查看以及错误处理机制,非常适合初学者进行学习和实践。
基础版计算器
def basic_calculator():
"""基础四则运算计算器"""
print("简单计算器(输入q退出)")
print("支持运算: +, -, *, /")
while True:
# 获取用户输入
获取用户输入的表达式,例如“2 + 3”,去除两侧空白字符。
若表达式转换成小写后等于字母“q”:
break
try:
# 分割输入
parts = expression.split()
if len(parts) != 3:
打印提示:“输入格式有误,请依照数字、运算符号、数字的顺序进行输入。”
continue
num1 = float(parts[0])
operator = parts[1]
num2 = float(parts[2])
# 执行计算
if operator == '+':
result = num1 + num2
elif operator == '-':
result = num1 - num2
elif operator == '*':
result = num1 * num2
elif operator == '/':
if num2 == 0:
print("错误: 除数不能为0!")
continue
result = num1 / num2
else:
print("不支持的运算符!")
continue
print(f"结果: {result}")
except ValueError:
print("输入错误! 请确保输入的是数字")
except Exception as e:
print(f"发生错误: {e}")
basic_calculator()
增强版计算器(使用eval)
def enhanced_calculator():
"""增强版计算器,支持更复杂的表达式"""
print("增强版计算器(输入q退出)")
输出信息显示:运算符号包括加号、减号、乘号、除号、乘方、取模以及括号。
while True:
获取用户输入的数学表达式,去除首尾空格,存储至变量expression。
if expression.lower() == 'q':
break
try:
# 安全检查 - 只允许数学表达式中的字符
允许使用的字符集合包括:数字0到9、加号、减号、乘号、除号、百分号、点号、括号以及星号。
若表达式中的字符并非全部都属于允许使用的字符集。
print("包含非法字符!")
continue
result = eval(expression)
print(f"结果: {result}")
except ZeroDivisionError:
print("错误: 除数不能为0!")
except Exception as e:
print(f"计算错误: {e}")
enhanced_calculator()
科学计算器版本
import math
def scientific_calculator():
"""科学计算器,支持更多数学函数"""
print("科学计算器(输入q退出)")
输出信息显示:包括正弦、余弦、正切、对数、平方根等在内的多种函数功能得到支持。
while True:
用户需输入表达式,输入后系统将自动去除两端空格,并将所有字符转换为小写。
if expression == 'q':
break
try:
# 替换常见数学函数
表达式经过处理,将开头的符号替换成了星号符号。
expression变量经过替换操作,将原有的"sin"字符串更改为"math.sin"。
表达式中的“cos”被替换成了“math.cos”。
expression变量经过处理,将原有的“tan”字符串替换成了“math.tan”。
expression变量被修改,将“sqrt”替换为“math.sqrt”。
expression变量被修改,将原字符串中的"log"替换为"math.log10"。
expression变量被替换,将"ln"替换成了"math.log"。
# 安全检查
允许使用的字符集合包括:数字0到9、加减乘除符号、点号、百分号、括号、空格以及小写英文字母a到z。
if not all(c in allowed_chars for c in expression):
print("包含非法字符!")
continue
执行结果等于对表达式进行评估,其中使用的数学模块为math。
print(f"结果: {result}")
except ZeroDivisionError:
print("错误: 除数不能为0!")
except ValueError as e:
print(f"值错误: {e}")
except Exception as e:
print(f"计算错误: {e}")
scientific_calculator()
带历史记录的计算器
class CalculatorWithHistory:
"""带历史记录的计算器"""
def __init__(self):
self.history = []
定义函数,执行计算操作,参数为表达式字符串。
try:
result = eval(expression)
self.history中新增了一条记录,内容为:表达式等于结果,具体表达为“{expression} = {result}”。
return result
except Exception as e:
引发异常,提示“计算出错:”,并附带错误信息{e}。
def show_history(self):
print("\n计算历史:")
在遍历自己的历史记录时,通过enumerate函数,从1开始计数,i代表索引,entry代表每个记录项。
print(f"{i}. {entry}")
定义一个具有历史记录功能的计算器函数。
"""使用带历史记录的计算器"""
创建了一个带有历史记录功能的计算器实例,并将其赋值给变量calc。
运行程序后,将显示提示信息:“具备历史记录功能的计算器,输入'q'键可退出,输入'h'键可查阅历史记录。”
while True:
用户需输入表达式,输入后系统将自动去除首尾空格,具体操作如下:expression = input("请输入表达式: ").strip()
if expression.lower() == 'q':
break
如果表达式的小写形式等于“h”:
calc.show_history()
continue
try:
执行计算后,calc对象对表达式进行了处理,并返回了结果。
print(f"结果: {result}")
except ValueError as e:
print(e)
calculator_with_history()
图形界面计算器(使用)
import tkinter as tk
导入tkinter模块中的messagebox组件。
class CalculatorApp:
"""图形界面计算器"""
def __init__(self, master):
self.master = master
master.title("Python计算器")
# 显示框
self.display = tk.Entry(master, 宽度为25,字体设置为Arial,字号为16,文本对齐方式为右对齐,)
self.display在界面上进行布局,位于第一行第一列,占据四列宽度,并且左右两边各留出10像素的边距,上下两边也各留出10像素的边距。
# 按钮布局
buttons = [
数字七、八、九以及斜杠符号,均不得更改。
四、五、六、星号符号,均不得用于修改。
此乃,一、二、三,以及连字符。
零、点、等号、加号。
'C'
]
# 创建按钮
在遍历按钮列表的过程中,我们通过enumerate函数获取每个按钮的索引和对应的文本内容,具体表现为:以i代表索引,text代表文本,逐一对应。
row = i // 4 + 1
col = i % 4
if text == '=':
创建了一个按钮对象btn,该按钮属于master窗口,显示文本为text,宽度设置为10个字符,并且当按钮被点击时,会触发self.calculate方法。
elif text == 'C':
btn = tk.Button(master, 标签设置为text,宽度设定为10,点击时执行self.clear函数)
else:
创建了一个按钮对象,该按钮隶属于主窗口,显示文本内容为text,宽度设置为10个字符。
设置命令为当文本t被传递时,执行将t添加到显示区域的操作。
按钮在网格中定位,行号为row,列号为col,左右边距各为5像素,上下边距各为5像素。
定义一个名为append_to_display的方法,用于向显示内容中添加文本。
"""向显示框添加内容"""
current = self.display.get()
self.display的内容从起始位置至末尾被清空。
self.display在最前方添加了当前内容与文本的组合。
def clear(self):
"""清空显示框"""
self.display.delete(0, tk.END)
def calculate(self):
"""执行计算"""
try:
表达式等于自身显示对象获取的值。
result = eval(expression)
self.display的内容从起始位置到末尾全部被清除。
self.display在首位添加了将结果转换成字符串的形式。
except Exception:
弹出一个错误提示框,内容为“无效的表达式”。
self.clear()
# 创建图形界面
root = tk.Tk()
app = CalculatorApp(root)
root.mainloop()
总结
通过这些计算器案例,我们学习了:
在实现基础数学运算时,我们采用eval函数来执行字符串形式的表达式,但需格外留意其安全性。同时,错误处理、输入验证以及历史记录功能的运用也是不可或缺的。此外,创建图形界面也是这一过程中的一部分。
计算器作为编程学习的典范,涉及了输入输出、条件判断、循环、函数以及类等众多基础知识点。
扫一扫在手机端查看
本文链接:https://by928.com/10224.html 转载请注明出处和本文链接!请遵守
《网站协议》
!
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1