树的运用-计算器

这篇具有很好参考价值的文章主要介绍了树的运用-计算器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验要求

树的应用:计算器

要求:计算器需要实现所有单击版计算器所具有的功能,并要用到树结构。

代码实现

import re
from tkinter import *

from lark import Lark

grammar = """
    ?start: sum
    ?sum: product
        | sum "+" product   -> add
        | sum "-" product   -> sub
    ?product: atom
        | product "*" atom  -> mul
        | product "÷" atom  -> div
    ?atom: NUMBER           -> number
        | "-" atom         -> neg
        | "(" sum ")"
        | atom "%"          -> percentage
    %import common.CNAME
    %import common.NUMBER
    %import common.WS
    %ignore WS
"""


class Calculator:
    def __init__(self, master):
        self.master = master
        master.title("Calculator")

        self.parser = Lark(grammar, start='start')

        self.display = Entry(master, width=25, font=('Arial', 16))
        self.display.grid(row=0, column=0, columnspan=4, padx=5, pady=5)

        self.display_result = Entry(master, width=25, font=('Arial', 16))
        self.display_result.grid(row=1, column=0, columnspan=4, padx=5, pady=5)

        buttons = [['C', '↼', '^', '÷'],
                   ['7', '8', '9', '*'],
                   ['4', '5', '6', '-'],
                   ['1', '2', '3', '+'],
                   ['%', '0', '.', '='], ]

        for i in range(len(buttons)):
            for j in range(len(buttons[i])):
                self.create_button(buttons[i][j], i + 2, j)

    def create_button(self, text, row, column):
        button = Button(self.master, text=text, width=5, height=2, font=('Arial', 16),
                        command=lambda: self.click(text))
        button.grid(row=row, column=column, padx=5, pady=5)

    def click(self, key):
        if key == '=':
            try:
                expression = self.display.get()
                if re.search(r'\^', expression):
                    result = eval(expression)
                else:
                    tree = self.parser.parse(expression)
                    result = self.evaluate(tree)
                self.display_result.delete(0, END)
                self.display_result.insert(END, result)
            except:
                self.display_result.delete(0, END)
                self.display_result.insert(END, 'Error')
        elif key == 'C':
            self.display.delete(0, END)
            self.display_result.delete(0, END)
        elif key == '↼':
            last_index = self.display.index(END) - 1
            self.display.delete(last_index)
        else:
            self.display.insert(END, key)

    def evaluate(self, tree):
        if tree.data == 'number':
            return float(tree.children[0])
        elif tree.data == 'add':
            return self.evaluate(tree.children[0]) + self.evaluate(tree.children[1])
        elif tree.data == 'sub':
            return self.evaluate(tree.children[0]) - self.evaluate(tree.children[1])
        elif tree.data == 'mul':
            return self.evaluate(tree.children[0]) * self.evaluate(tree.children[1])
        elif tree.data == 'div':
            return self.evaluate(tree.children[0]) / self.evaluate(tree.children[1])
        elif tree.data == 'neg':
            return -self.evaluate(tree.children[0])
        elif tree.data == 'percentage':
            return self.evaluate(tree.children[0]) / 100.0


root = Tk()
calculator = Calculator(root)
root.mainloop()

说明

上述代码是一个简单的计算器应用程序。它使用了Python的Tkinter库来创建一个图形用户界面(GUI),并实现了基本的计算功能。

代码定义了一个Calculator类,它包含了一个窗口(由Tkinter的Tk类创建),一个文本框用于显示输入和输出,以及一组按钮用于输入操作符和数字。

计算器支持基本的四则运算(加法、减法、乘法和除法),同时还支持百分比计算。计算器通过解析用户输入的表达式,使用Lark库构建语法树,并通过递归地评估语法树来计算结果。

用户可以通过点击按钮来输入表达式和操作符,并通过点击"=“按钮来获取计算结果。如果输入的表达式不符合语法规则或者计算过程中出现错误,计算器会显示"Error”。

用户还可以通过点击"C"按钮清除输入和输出,以及通过点击"↼"按钮删除最后一个字符。

总之,这段代码实现了一个简单的图形界面计算器,可以执行基本的四则运算和百分比计算。文章来源地址https://www.toymoban.com/news/detail-795333.html

到了这里,关于树的运用-计算器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java算法题 给一个字符串表达式,实现一个基本计算器,返回计算结果

    题目: 考点:栈 解题思路: 使用 2 个栈,一个 stack_nums 用来保存计算过程的操作数,一个 stack_symbol 用来保存运算符。 在HashMap中,指定加减优先级为1,乘除优先级为2 循环遍历字符串s, 操作符入栈: 若当前字符为\\\'+\\\', \\\'-\\\', \\\'*\\\', \\\'/\\\', \\\'(\\\' 时,压入运算符栈 stack_symbol, 操作数入

    2024年02月07日
    浏览(50)
  • Python自制简易版计算器小程序

    今天来给你们分享一个自制的桌面小程序【简易版计算器】 文章内有效果展示,你们可以自行看看哦 不想看文章,想直接领取源码的话,可以直接点击文章末尾的名片哈 Python 3.6 Pycharm 界面设置 导入模块 所有 源码 点击 此处 领取 即可 实例化一个窗体对象 标题 大小以及出

    2024年02月09日
    浏览(50)
  • Python - 简易版计算器(附完整代码)

    对输入的两个数进行一次加减乘除 对输入的运算符进行判断 做出计算机图形界面

    2024年02月08日
    浏览(48)
  • python界面开发案例:制作一个计算器软件

    前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 在我们手机上大家都有一个计算器,对吧 那它这功能是怎么实现的呢? 今天我们在电脑上来实现一个电脑端计算器界面~ 开发环境: Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 本文所有模块环境源码教程皆可点击文章下方

    2023年04月16日
    浏览(62)
  • Python制作简易计算器(GUI)---Tkinter

    tkinter模块是Python标准的TK GUI工具包接口,可以实现一些较为简单GUI的创建。 麻雀虽小,五脏俱全 TK工具集使用TCL(Tool Command Language)语言开发 运行相同的程序时,运行速度快于pyqt5 组件能满足基本使用 程序界面较简陋 开发时,使用的语句更短更易懂 Python内置的标准库 Qt框

    2024年02月08日
    浏览(63)
  • 【Servlet学习三】实现一个内存版本的简易计算器~

    目录 一、方式1:使用form表单的形式(不推荐) 🌈1、前端代码:HTML文件 🌈2、后端代码:Calculator_form.java文件 🌈3、最终效果 二、方式2:使用ajax形式(最常用重点!!!) 🌈1、前端代码:HTML文件 🌈2、后端代码:Calculator_ajax.java文件 🌈3、最终效果  注意: (1)前端

    2024年02月12日
    浏览(43)
  • python tkinter 最简洁的计算器按钮排列

      代码如下,只要再加上按键绑定事件函数,计算器既可使用了。  代码最关键的就是只用一个双重循环就把24个按键一次搞定: 除了主角Button控件外,还有三个配角控件:Label、Separator以及Frame Separator隔开控件用,Frame摆放显示结果的Label标签,Label的原版帮助如下: Help o

    2024年01月23日
    浏览(37)
  • Python四则运算“计算器”——整数口算练习“小程序”

    设定练习题目数量、最大取值整数数,即时判定,答对鼓励答错打印正确结果。 【学习的细节是欢悦的历程】 Python 官网 :https://www.python.org/ Free :大咖免费“ 圣经 ”教程《 python 完全自学教程 》,不仅仅是基础那么简单…… 地址:https://lqpybook.readthedocs.io/   自学并不是

    2024年02月07日
    浏览(94)
  • 使用Python编写简单的小程序、成绩计算器

    成绩计算器程序需要两个分数,以百分比表示 - 一个用于项目,一个用于考试。 项目和考试都为最终评估成绩贡献了50%。 程序应从中计算出总体百分比,并使用下表中的数据计算出最终成绩: 例 项目分数 - 78%,考试分数 - 65%。 最终成绩 = 71.5% ((78 + 65)*0.5),最终成绩

    2024年02月11日
    浏览(38)
  • Python综合案例—利用tkinter实现计算器的程序

    目录 一、导入 tkinter 库 定义全局变量 二、定义回调函数 三、创建窗口对象 四、创建标签控件 五、创建数字按钮 六、创建加、减、乘、除和等于按钮 七、创建清空按钮 八、总结         用Python实现计算器可以让我们更好地理解面向对象编程、GUI 编程和事件驱动编程等

    2024年02月04日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包