我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

我将向大家展示一个功能完备的计算器程序,它具备基本的计算功能、历史记录查看以及错误处理机制,非常适合初学者进行学习和实践。

基础版计算器

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,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线