初学者福音:用Python写计算器,少代码也有大成就感

在本篇文章中,我们将学习如何使用Python编写一个简单的计算器,并创建一个图形用户界面(GUI)以实现计算器的基本功能。

👉 小编已经为大家准备好了完整的代码和完整的Python学习资料,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】

图片

我们将使用Python标准库中的tkinter模块来创建GUI,并使用基本的算术操作符(加、减、乘、除)来实现计算器的计算功能。

 简易版本

下面是一个简单的Python计算器代码,可以执行基本的加、减、乘、除运算:

def calculator():
    operation = input("请选择运算符(+, -, *, /): ")
    num1 = float(input("请输入第一个数字: "))
    num2 = float(input("请输入第二个数字: "))

    if operation == '+':
        print(num1 + num2)
    elif operation == '-':
        print(num1 - num2)
    elif operation == '*':
        print(num1 * num2)
    elif operation == '/':
        if num2 == 0:
            print("错误:除数不能为0")
        else:
            print(num1 / num2)
    else:
        print("错误:输入的运算符不正确")

# 调用计算器函数
calculator()

 在此代码中,我们首先使用input()函数获取用户选择的运算符和输入的数字。然后,使用if语句根据选择的运算符执行相应的计算,并打印结果。如果用户选择的是除法运算符,我们还需要检查除数是否为0,以避免除以0的错误。

注意,此代码没有考虑到输入非数字的情况。如果输入了非数字字符,代码会抛出异常。可以通过添加try-except语句来处理此类异常。

这个简易计算器涉及到以下技术要点:

• 函数定义和调用:使用def关键字定义了一个名为calculator的函数,可以通过调用该函数来执行计算器程序。

• 输入输出操作:使用input函数获取用户输入的运算符和数字,并使用print函数打印计算结果。

• 条件语句 :使用if-elif-else语句根据用户选择的运算符执行相应的计算。

• 异常处理:如果用户输入的数字不是有效的浮点数,代码会抛出异常。可以使用try-except语句来处理这种异常情况。

• 基本的算术运算:加减乘除运算,这里使用了基本的算术运算符+、-、*和/来执行计算。

创建计算器GUI

首先,我们需要导入tkinter模块,并创建一个名为CalculatorGUI的类。这个类将承载计算器的所有功能,并创建一个GUI来显示计算器的各个组件。

import tkinter as tk

class CalculatorGUI:
    def __init__(self, master):
        self.master = master
        master.title("简易计算器")

        # 创建计算器组件
        # ...

 在__init__方法中,我们初始化了主窗口(master)并设置了窗口的标题。接下来,我们将在这个方法中创建计算器的所有组件。

创建计算器组件

计算器的GUI组件包括一个显示计算结果的文本框和多个按钮,用于输入数字和执行算术操作。

class CalculatorGUI:
    def __init__(self, master):
        self.master = master
        master.title("简易计算器")

        # 显示计算结果的文本框
        self.result_var = tk.StringVar()
        self.result_var.set("")
        self.result_label = tk.Label(master, textvariable=self.result_var, font=('Arial', 20))
        self.result_label.grid(row=0, column=0, columnspan=4, pady=5)

        # 创建数字按钮
        for i in range(10):
            # ...

        # 创建运算符按钮
        self.add_btn = tk.Button(master, text="+", width=4, height=2, command=lambda: self.add_operator("+"))
        self.add_btn.grid(row=1, column=3, padx=5, pady=5)

        self.subtract_btn = tk.Button(master, text="-", width=4, height=2, command=lambda: self.add_operator("-"))
        self.subtract_btn.grid(row=2, column=3, padx=5, pady=5)

        self.multiply_btn = tk.Button(master, text="*", width=4, height=2, command=lambda: self.add_operator("*"))
        self.multiply_btn.grid(row=3, column=3, padx=5, pady=5)

        self.divide_btn = tk.Button(master, text="/", width=4, height=2, command=lambda: self.add_operator("/"))
        self.divide_btn.grid(row=4, column=3, padx=5, pady=5)

        self.equal_btn = tk.Button(master, text="=", width=4, height=2, command=self.calculate)
        self.equal_btn.grid(row=5, column=3, padx=5, pady=5)

        self.clear_btn = tk.Button(master, text="C", width=4, height=2, command=self.clear)
        self.clear_btn.grid(row=5, column=2, padx=5, pady=5)

        self.decimal_btn = tk.Button(master, text=".", width=4, height=2, command=lambda: self.add_decimal("."))
        self.decimal_btn.grid(row=4, column=0, padx=5

 在上面的代码中,我们创建了一个CalculatorGUI类,并在__init__方法中初始化了主窗口并设置了窗口标题。接下来,我们创建了一个result_var变量来存储计算结果,并创建了一个result_label标签来显示计算结果。我们还创建了多个数字按钮和运算符按钮,并在网格布局中将它们放置在合适的位置。

实现计算器功能

接下来,我们需要实现计算器的计算功能。在计算器GUI中,我们需要实现以下几个方法来实现计算器的功能:

• add_digit:将数字添加到计算器显示屏上。

• add_decimal:将小数点添加到计算器显示屏上。

• add_operator:将算术操作符添加到计算器显示屏上。

• calculate:执行计算操作。

• calculate_result:计算结果。

• clear:清空计算器状态。

class CalculatorGUI:
    def __init__(self, master):
        # ...

    # 将数字添加到计算器显示屏上
    def add_digit(self, digit):
        current_result = self.result_var.get()
        self.result_var.set(current_result + str(digit))

    # 将小数点添加到计算器显示屏上
    def add_decimal(self, decimal):
        current_result = self.result_var.get()
        if "." not in current_result:
            self.result_var.set(current_result + decimal)

    # 将算术操作符添加到计算器显示屏上
    def add_operator(self, operator):
        current_result = self.result_var.get()
        if self.num1 is None:
            self.num1 = float(current_result)
            self.operator = operator
            self.result_var.set("")
        else:
            self.num2 = float(current_result)
            self.result = self.calculate_result()
            self.num1 = self.result
            self.num2 = None
            self.operator = operator
            self.result_var.set(str(self.result))

    # 执行计算
    def calculate(self):
        if self.num1 is None or self.operator is None:
            return
        current_result = self.result_var.get()
        if current_result == "":
            self.num2 = self.num1
        else:
            self.num2 = float(current_result)
        self.result = self.calculate_result()
        self.result_var.set(str(self.result))
        self.num1 = None
        self.num2 = None
        self.operator = None

    # 计算结果
    def calculate_result(self):
        if self.operator == "+":
            return self.num1 + self.num2
        elif self.operator == "-":
            return self.num1 - self.num2
        elif self.operator == "*":
            return self.num1 * self.num2
        elif self.operator == "/":
            if self.num2 == 0:
                self.result_var.set("错误:除数不能为0")
                return None
            else:
                return self.num1 / self.num2

    # 清空计算器状态
    def clear(self):
        self.num1 = None
        self.num2 = None
        self.operator = None
        self.result = None
        self.result_var.set("")

方法用于将数字添加到计算器的显示屏上。它通过获取当前显示结果,将其与传递的数字拼接起来,并将拼接结果设置为显示结果来实现。

add_decimal方法用于将小数点添加到计算器的显示屏上。它通过检查当前显示结果中是否包含小数点来判断是否应该添加小数点。

add_operator方法用于将算术操作符添加到计算器的显示屏上。它通过检查当前显示结果中是否有第一个操作数来确定应该保存哪个数字,并将显示结果设置为一个空字符串以准备输入第二个操作数。如果已经存在第一个操作数,则该方法调用calculate_result方法来计算结果,保存结果并将其显示在计算器的显示屏上。

calculate方法用于执行计算操作。它检查是否存在第一个操作数和运算符,如果存在则检查是否输入了第二个操作数。如果未输入第二个操作数,则将第一个操作数作为第二个操作数并继续计算。否则,该方法调用calculate_result方法来计算结果并将其显示在计算器的显示屏上。

calculate_result方法用于计算结果。它根据当前保存的操作数和运算符来执行算术操作,并返回结果。如果除数为0,则该方法将显示错误消息。

clear方法用于清空计算器的状态。它将所有操作数、运算符和结果设置为None,并将显示结果设置为一个空字符串。

运行计算器GUI

最后,我们需要创建一个主函数来运行计算器GUI。在这个函数中,我们创建一个tkinter窗口并实例化CalculatorGUI类来显示计算器GUI。

def main():
    root = tk.Tk()
    CalculatorGUI(root)
    root.mainloop()

if __name__ == "__main__":
    main()

在这个函数中,我们创建一个Tk对象,并实例化CalculatorGUI类,将Tk对象传递给它。然后,我们调用mainloop方法来显示GUI并等待用户操作。

图片

完整代码

import tkinter as tk

# 创建计算器界面
class CalculatorGUI:
    def __init__(self, master):
        self.master = master
        master.title("简易计算器")

        # 显示计算结果的文本框
        self.result_var = tk.StringVar()
        self.result_var.set("")
        self.result_label = tk.Label(master, textvariable=self.result_var, font=('Arial', 20))
        self.result_label.grid(row=0, column=0, columnspan=4, pady=5)

        # 创建数字按钮
        for i in range(10):
            if i == 0:
                btn = tk.Button(master, text=str(i), width=4, height=2, command=lambda num=i: self.add_digit(num))
                btn.grid(row=4, column=1, padx=5, pady=5)
            else:
                btn = tk.Button(master, text=str(i), width=4, height=2, command=lambda num=i: self.add_digit(num))
                btn.grid(row=(i-1)//3+1, column=(i-1)%3, padx=5, pady=5)

        # 创建运算符按钮
        self.add_btn = tk.Button(master, text="+", width=4, height=2, command=lambda: self.add_operator("+"))
        self.add_btn.grid(row=1, column=3, padx=5, pady=5)

        self.subtract_btn = tk.Button(master, text="-", width=4, height=2, command=lambda: self.add_operator("-"))
        self.subtract_btn.grid(row=2, column=3, padx=5, pady=5)

        self.multiply_btn = tk.Button(master, text="*", width=4, height=2, command=lambda: self.add_operator("*"))
        self.multiply_btn.grid(row=3, column=3, padx=5, pady=5)

        self.divide_btn = tk.Button(master, text="/", width=4, height=2, command=lambda: self.add_operator("/"))
        self.divide_btn.grid(row=4, column=3, padx=5, pady=5)

        self.equal_btn = tk.Button(master, text="=", width=25, height=2, bg="#f71",command=self.calculate)        
        self.equal_btn.grid(row=5, column=0, padx=0, pady=0,columnspan=5)

        self.clear_btn = tk.Button(master, text="C", width=4, height=2, command=self.clear)
        self.clear_btn.grid(row=4, column=2, padx=5, pady=5)

        self.decimal_btn = tk.Button(master, text=".", width=4, height=2, command=lambda: self.add_decimal("."))
        self.decimal_btn.grid(row=4, column=0, padx=0, pady=5)

        # 初始化计算器状态
        self.num1 = None
        self.num2 = None
        self.operator = None
        self.result = None
        self.reset_flag = False

    # 将数字添加到计算器显示屏上
    def add_digit(self, digit):
        if self.reset_flag:
            self.result_var.set("")
            self.reset_flag = False
        current_result = self.result_var.get()
        self.result_var.set(current_result + str(digit))

    def add_decimal(self, decimal):
        if self.reset_flag:
            self.result_var.set("")
            self.reset_flag = False
        current_result = self.result_var.get()
        if "." not in current_result:
            self.result_var.set(current_result + decimal)

    # 添加运算符
    def add_operator(self, operator):
        current_result = self.result_var.get()
        if self.num1 is None:
            self.num1 = float(current_result)
            self.operator = operator
            self.result_var.set("")
        else:
            self.num2 = float(current_result)
            self.result = self.calculate_result()
            self.num1 = self.result
            self.num2 = None
            self.operator = operator
            self.result_var.set(str(self.result))
        self.reset_flag = False

    # 计算结果
    def calculate(self):
        if self.num1 is None or self.operator is None:
            return
        current_result = self.result_var.get()
        if current_result == "":
            self.num2 = self.num1
        else:
            self.num2 = float(current_result)
        self.result = self.calculate_result()
        self.result_var.set(str(self.result))
        self.num1 = None
        self.num2 = None
        self.operator = None
        self.reset_flag = True

    # 执行计算
    def calculate_result(self):
        if self.operator == "+":
            return self.num1 + self.num2
        elif self.operator == "-":
            return self.num1 - self.num2
        elif self.operator == "*":
            return self.num1 * self.num2
        elif self.operator == "/":
            if self.num2 == 0:
                self.result_var.set("错误:除数不能为0")
                return None
            else:
                return self.num1 / self.num2

    # 清空计算器状态
    def clear(self):
        self.num1 = None
        self.num2 = None
        self.operator = None
        self.result = None
        self.result_var.set("")
        self.reset_flag = False

# 创建主窗口并运行计算器
root = tk.Tk()
calculator_gui = CalculatorGUI(root)
root.mainloop()

总结

在本篇文章中,我们学习了如何使用Python和tkinter模块来创建一个简单的计算器GUI。我们实现了基本的算术操作符和一些常用的功能,例如清除和小数点。我们还学习了如何在网格布局中放置组件,以及如何使用tkinter变量来更新GUI中的显示结果。希望这篇文章能帮助您了解如何编写一个简单的计算器GUI,以及如何使用Python和tkinter模块来实现它。

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值