Python实现电子计算器

一、实验目的

学习使用Python的Tkinter库进行图形界面编程,实现一个具有弹窗界面的电子计算器,完成基本的加、减、乘、除运算。

二、实验原理

Tkinter是Python的标准GUI(图形用户界面)库,用于创建窗口、标签、按钮等图形界面元素。通过编写Python代码,使用Tkinter库创建计算器的图形界面,并定义各个按钮的功能。使用事件处理机制,响应用户的输入和按钮点击事件,完成相应的数学运算。

三、实验条件(设备与软件

Python环境:Python3.11.2版本

开发工具:PyCharm

四、实验步骤

1.导入Tkinter库,创建主窗口。

2.定义计算器的各种按钮,并设置其位置和字体。

3.使用事件处理函数,定义每个按钮的功能。

4.运行主循环,显示计算器的图形界面,等待用户操作。

五、实验结果

成功实现了一个具有图形界面的电子计算器,能够完成基本的加、减、乘、除运算。计算器界面美观,按钮布局合理,操作简便。计算结果准确,程序运行稳定。

六、实验分析

通过本实验,掌握了Tkinter库的基本使用方法,学会了如何创建图形界面程序。学会了使用事件处理机制,实现用户与程序之间的交互。培养了分析和解决问题的能力,提高了编程实践能力。

七、思考与总结

通过本次实验,学会了使用Python的Tkinter库实现一个具有图形界面的电子计算器,掌握了基本的图形界面编程技巧,提高了编程实践能力。在今后的学习中,将继续深入学习Python编程,探索更多实际应用。

八、代码

from tkinter import *
# from tkinter.ttk import *


def frame(master):
    """将共同的属性作为默认值, 以简化Frame创建过程"""
    w = Frame(master)
    w.pack(side=TOP, expand=YES, fill=BOTH)
    return w


def btn(master, text, command):
    """提取共同的属性作为默认值, 使Button创建过程简化"""
    w = Button(master, text=text, command=command, width=6)
    w.pack(side=LEFT, expand=YES, fill=BOTH, padx=2, pady=2)
    return w


def calc(text_data):
    """用eval方法计算表达式字符串"""
    try:
        if (separator_flag.get() == 0):
            return eval(del_separator(text_data))
        else:
            return add_separator(str(eval(del_separator(text_data))))
    except (SyntaxError, ZeroDivisionError, NameError):
        return 'Error'


def back(text_data):
    """将text_data最末的字符删除并返回"""
    if len(text_data) > 0:
        return text_data[:-1]
    else:
        return text_data


def add_separator(text_data):
    """向参数传入的数字串中添加千位分隔符

    这里考虑了三种情况: 无整数部份, 无小数部份, 同时有整数和小数部份
    由于字符串是不可改变的, 这里由字符串生成列表以便执行insert操作和
    extend操作, 操作完成后最由列表生成字符串返回
    """
    dot_index = text_data.find('.')
    if dot_index > 0:
        text_head = text[:dot_index]
        text_tail = text[dot_index:]
    elif dot_index < 0:
        text_head = text_data
        text_tail = ''
    else:
        text_head = ''
        text_tail = text_data

    list_ = [char for char in text_head]
    length = len(list_)
    tmp_index = 3
    while length - tmp_index > 0:
        list_.insert(length - tmp_index, ',')
        tmp_index += 3
    list_.extend(text_tail)
    new_text = ''
    for char in list_:
        new_text += char

    return new_text


def del_separator(text_data):
    """删除数字串中所有的千位分隔符"""
    return text_data.replace(',', '')


# 开始界面的实现
init_root = Tk()
init_root.resizable(width=False, height=False)

init_root.title("计算器")  # 添加标题

main_menus = Menu()  # 创建最上层主菜单

# 创建计算器菜单, 并加入到主菜单
calc_menu = Menu(main_menus, tearoff=0)
calc_menu.add_command(label='退出', command=lambda: exit())
main_menus.add_cascade(label='菜单', menu=calc_menu)

text = StringVar()
separator_flag = IntVar()
separator_flag.set(0)
view_menu = Menu(main_menus, tearoff=0)

init_root['menu'] = main_menus  # 将主菜单与root绑定

# 创建文本框
Entry(init_root, textvariable=text).pack(expand=YES, fill=BOTH, padx=2, pady=4)

# style = Style()
# style.configure('TButton', padding=3)

# 创建第一行三个按钮
first_line = frame(init_root)
btn(first_line, '回退', lambda t=text: t.set(back(t.get())))
btn(first_line, '清空', lambda t=text: t.set(''))

# 每行四个, 创建其余四行按钮
for key in ('789/', '456*', '123-', '0.=+'):
    others = frame(init_root)
    for char in key:
        if char == '=':
            btn(others, char,
                lambda data=text: data.set(calc(data.get())))
        else:
            btn(others, char,
                lambda data=text, c=char: data.set(data.get() + c))
if __name__ == '__main__':

    init_root.mainloop()

九、预期结果

好的,下面是一个简单的多功能计算器程序,可以进行加减乘除和平方、开方等操作: ```python import math def add(x, y): return x + y def sub(x, y): return x - y def mul(x, y): return x * y def div(x, y): if y == 0: return "除数不能为0!" return x / y def sqr(x): return x ** 2 def sqrt(x): if x < 0: return "不能对负数进行开方!" return math.sqrt(x) print("欢迎使用多功能计算器:") while True: print("请选择要进行的操作:") print("1.加法 2.减法 3.乘法 4.除法 5.平方 6.开方 7.退出") choice = input("请输入数字:") if choice == "7": print("谢谢使用,再见!") break elif choice in ["1", "2", "3", "4"]: x = float(input("请输入第一个数字:")) y = float(input("请输入第二个数字:")) if choice == "1": print("结果:", add(x, y)) elif choice == "2": print("结果:", sub(x, y)) elif choice == "3": print("结果:", mul(x, y)) elif choice == "4": print("结果:", div(x, y)) elif choice in ["5", "6"]: x = float(input("请输入数字:")) if choice == "5": print("结果:", sqr(x)) elif choice == "6": print("结果:", sqrt(x)) else: print("输入错误,请重新输入!") ``` 这个程序使用了多个函数来实现不同的操作,其中 `add`、`sub`、`mul`、`div` 分别表示加法、减法、乘法和除法,`sqr` 和 `sqrt` 分别表示平方和开方。在主程序中,用一个循环来不断询问用户要进行的操作,然后根据用户的选择调用相应的函数来计算结果并输出。在除法和开方操作中,需要判断除数是否为0或被开方数是否为负数,如果是则给出相应的错误提示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值