Python如何实现一个计算器?

代码如下:

#  *_* coding:utf8 *_*
import tkinter
from functools import partial# 按钮输入调用
def get_input(entry, argu):# 从entry窗口展示中获取输入的内容input_data = entry.get()# 合法运算符 : + - * / -- ** // +-# ------------ 输入合法性判断的优化 ------------# 最后一个字符不是纯数字(已经有算数符号),原窗口值不为空,且输入值为运算符# if not input_data[-1:].isdecimal() and (not argu.isdecimal()):#     if input_data[-2:] in ["--", "**", "//", "+-"]:#         return#     if (input_data[-1:] + argu) not in ["--", "**", "//", "+-"]:#         return# ------------------------------------------------# 出现连续+,则第二个+为无效输入,不做任何处理if (input_data[-1:] == '+') and (argu == '+'):return# 出现连续+--,则第三个-为无效输入,不做任何处理if (input_data[-2:] == '+-') and (argu == '-'):return# 窗口已经有--后面字符不能为+或-if (input_data[-2:] == '--') and (argu in ['-', '+']):return# 窗口已经有 ** 后面字符不能为 * 或 /if (input_data[-2:] == '**') and (argu in ['*', '/']):return# 输入合法将字符插入到entry窗口结尾entry.insert("end", argu)# 退格(撤销输入)
def backspace(entry):input_len = len(entry.get())# 删除entry窗口中最后的字符entry.delete(input_len - 1)# 清空entry内容(清空窗口)
def clear(entry):entry.delete(0, "end")# 计算
def calc(entry):input_data = entry.get()# 计算前判断输入内容是否为空;首字符不能为*/;*/不能连续出现3次;if not input_data:returnclear(entry)# 异常捕获,在进行数据运算时如果出现异常进行相应处理# noinspection PyBroadExceptiontry:# eval() 函数用来执行一个字符串表达式,并返回表达式的值;并将执行结果转换为字符串output_data = str(eval(input_data))except Exception:# 将提示信息输出到窗口entry.insert("end", "Calculation error")else:# 将计算结果显示在窗口中if len(output_data) > 20:entry.insert("end", "Value overflow")else:entry.insert("end", output_data)if __name__ == '__main__':root = tkinter.Tk()root.title("Yummy")# 框体大小可调性,分别表示x,y方向的可变性;root.resizable(0, 0)button_bg = 'pink'math_sign_bg = 'DarkTurquoise'cal_output_bg = 'Yellow'button_active_bg = 'gray'# justify:显示多行文本的时候, 设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER# 文本从窗口左方开始显示,默认可以显示20个字符# row:entry组件在网格中的横向位置# column:entry组件在网格中的纵向位置# columnspan:正常情况下,一个插件只占一个单元;可通过columnspan来合并一行中的多个相邻单元entry = tkinter.Entry(root, justify="right", font=1)entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10)def place_button(text, func, func_params, bg=button_bg, **place_params):# 偏函数partial,可以理解为定义了一个模板,后续的按钮在模板基础上进行修改或添加特性# activebackground:按钮按下后显示颜place_params色my_button = partial(tkinter.Button, root, bg=button_bg, padx=10, pady=3, activebackground=button_active_bg)button = my_button(text=text, bg=bg, command=lambda: func(*func_params))button.grid(**place_params)# 文本输入类按钮place_button('7', get_input, (entry, '7'), row=1, column=0, ipadx=5, pady=5)place_button('8', get_input, (entry, '8'), row=1, column=1, ipadx=5, pady=5)place_button('9', get_input, (entry, '9'), row=1, column=2, ipadx=5, pady=5)place_button('4', get_input, (entry, '4'), row=2, column=0, ipadx=5, pady=5)place_button('5', get_input, (entry, '5'), row=2, column=1, ipadx=5, pady=5)place_button('6', get_input, (entry, '6'), row=2, column=2, ipadx=5, pady=5)place_button('1', get_input, (entry, '1'), row=3, column=0, ipadx=5, pady=5)place_button('2', get_input, (entry, '2'), row=3, column=1, ipadx=5, pady=5)place_button('3', get_input, (entry, '3'), row=3, column=2, ipadx=5, pady=5)place_button('0', get_input, (entry, '0'), row=4, column=0, padx=8, pady=5,columnspan=2, sticky=tkinter.E + tkinter.W + tkinter.N + tkinter.S)place_button('.', get_input, (entry, '.'), row=4, column=2, ipadx=7, padx=5, pady=5)# 运算输入类按钮(只是背景色不同)# 字符大小('+','-'宽度不一样,使用ipadx进行修正)place_button('+', get_input, (entry, '+'), bg=math_sign_bg, row=1, column=3, ipadx=5, pady=5)place_button('-', get_input, (entry, '-'), bg=math_sign_bg, row=2, column=3, ipadx=5, pady=5)place_button('*', get_input, (entry, '*'), bg=math_sign_bg, row=3, column=3, ipadx=5, pady=5)place_button('/', get_input, (entry, '/'), bg=math_sign_bg, row=4, column=3, ipadx=5, pady=5)# 功能输入类按钮(背景色、触发功能不同)place_button('<-', backspace, (entry,), row=5, column=0, ipadx=5, padx=5, pady=5)place_button('C', clear, (entry,), row=5, column=1, pady=5, ipadx=5)place_button('=', calc, (entry,), bg=cal_output_bg, row=5, column=2, ipadx=5, padx=5, pady=5,columnspan=2, sticky=tkinter.E + tkinter.W + tkinter.N + tkinter.S)root.mainloop()

那html5如何实现一个计算器呢?请查阅:HTML5+CSS3+JS:计算器

Python:计算器(代码全+解析+实现结果)相关推荐

  1. Vision Transformer(ViT)PyTorch代码全解析(附图解)

    Vision Transformer(ViT)PyTorch代码全解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来,屠杀了各大CV榜单.本文将根 ...

  2. 主板诊断卡代码全解析

    主板诊断卡代码全解析 RUN灯功能介绍 该灯只用极少部件,故自身故障率极低,且只需极少的主板插槽信号,故即使插到一个坏的插槽中虽无法走代码,或其它的所有指示灯都不亮,但该灯很有可能照常工作,您可根据: ...

  3. circlegan_CycleGAN原理以及代码全解析

    许多名画造假者费尽毕生的心血,试图模仿出艺术名家的风格.如今,CycleGAN就可以初步实现这个神奇的功能.这个功能就是风格迁移,比如下图,照片可以被赋予莫奈,梵高等人的绘画风格 这属于是无配对数据( ...

  4. 贝塞尔曲线之爱心点赞代码全解析!| CSDN 博文精选

    作者 | 威威喵 责编 | 屠敏 出品 | CSDN 博客 直接步入正题,我们要实现的是一个 Android 客户端应用里面的一种点赞效果,比如你点一下那个爱心型的图片,就会产生一个小爱心,而且会以曲 ...

  5. tensorflow代码全解析 -3- seq2seq 自动生成文本

    模型概述 序列建模seq2seq,给定一个序列A,模型生产另一个序列B,然后模型再由序列B生成C,以此一直持续下去. 基本工作流程如下: 序列A中的每一个单词通过word_embedding操作以后, ...

  6. c++将小数化为二进制_C/C+学习笔记:C语言实现任意进制转换,代码全解析!...

    问题描述 给定一个 M 进制的数 x,实现对 x 向任意的一个非 M 进制的数的转换. 问题分析 掌握不同数制间的转换关系是解决问题的关键,这里所说的数制一般包括二进制.八进制.十六进制及十进制.除了 ...

  7. C/C++学习笔记:C语言实现任意进制转换,代码全解析!

    问题描述 给定一个 M 进制的数 x,实现对 x 向任意的一个非 M 进制的数的转换. 问题分析 掌握不同数制间的转换关系是解决问题的关键,这里所说的数制一般包括二进制.八进制.十六进制及十进制.除了 ...

  8. 《统计学习方法》代码全解析——第十三部分无监督学习概论

    1.机器学习或统计学习一般包括监督学习.无监督学习.强化学习. 无监督学习是指从无标注数据中学习模型的机器学习问题.无标注数据是自然得到的数据,模型表示数据的类别.转换或概率无监督学习的本质是学习数据 ...

  9. 《统计学习方法》代码全解析——第十二部分监督学习方法总结

    1 适用问题¶ 监督学习可以认为是学习一个模型,使它能对给定的输入预测相应的输出.监督学习包括分类.标注.回归.本篇主要考虑前两者的学习方法. 分类问题是从实例的特征向量到类标记的预测问题:标注问题是 ...

  10. 《统计学习方法》代码全解析——第十一部分条件随机场

    1.概率无向图模型是由无向图表示的联合概率分布.无向图上的结点之间的连接关系表示了联合分布的随机变量集合之间的条件独立性,即马尔可夫性.因此,概率无向图模型也称为马尔可夫随机场. 概率无向图模型或马尔 ...

最新文章

  1. 用solidity语言开发代币智能合约
  2. python串口编程_python串口通信
  3. nginx php上传大小设置
  4. python 模块 类 函数_Python17之函数、类、模块、包、库
  5. 怎么改python系统路径_动态修改python系统路径
  6. OpenCV图像处理(17)—— 各种二值化对比
  7. Jconsole使用实例解说
  8. red5流媒体服务器系统,red5 流媒体服务器配置
  9. 虹科教您固定工业树莓派Modbus RTU设备编号
  10. C语言考试题及答案(一)
  11. 二元序列游程编码c语言,基于游程编码数据压缩算法设计与实现.doc
  12. 200行Python实现连连看辅助
  13. zerg发出了第一个报文,纪念一下!!!
  14. 什么是内存颗粒?内存条的构成!
  15. MAC设置L2TP连接公司内部网络
  16. c语言课程设计人事管理,C语言课程设计-人事管理系统(65页).doc
  17. 社群空间站一键发布微信群精品优质社群的搜索和发布平台
  18. 基于云平台的41种可复用的架构最佳实践 | 赠书活动
  19. 2021年05月软件设计师真题透析
  20. 主流App开屏广告一夜消失!满屏找“跳过”的时代快结束了

热门文章

  1. QQ for linux不用udp8000端口?
  2. delphi7 获取计算机名,远程控制篇:获得网络邻居所有机器名_delphi教程
  3. 把Ubuntu安装到移动硬盘
  4. 修复被病毒破坏的Winsock
  5. 《数据结构 严蔚敏C》期末高频考题整理(含详解)
  6. R语言读取Excel的神器——openxlsx
  7. python实现城市到省份的转换
  8. jquery视频教程(jquery视频教程全集)
  9. 浏览器访问局域网共享文件服务器,局域网文件共享:Filezilla-IE 轻松解决(图)...
  10. 孔浩java web视频教程_孔浩老师webservice视频教程(含CXF视频教程)