Python双版本计算器详解
作者:啥也不是:) 发布时间:2021-03-27 13:22:24
标签:Python,计算器
有框计算器
这个计算器我们用到了Python自带的Tkinter库
# 导入tkinter库
import tkinter
我们要对窗口进行一些基本操作
# 获取一个窗口
window = tkinter.Tk()
# 设置标题
window.title('计算器')
# 设置窗口大小
window.geometry('200x200')
接着用函数定义一个输入方法
输入方法
# 输入方法
def add(n):
# 获取到n1文本框的值
n1 = inp.get()
# 清空文本框
inp.delete(0,len(n1))
# 插入原来的加上新输入参数n
inp.insert(0,n1+str(n))
再用函数定义一个计算方法
计算方法
# 执行计算方法
def calc():
n1 = inp.get()
inp.delete(0,len(n1))
# 把文本框的字符串用eval当代码执行一次,再插入到文本框
inp.insert(0,str(eval(n1)))
完成后还需要把文本框给清除,我们还是用函数
清除文本框方法
# 清空文本框
def clear():
n1 = inp.get()
inp.delete(0,len(n1))
清空文本框后还会留下一个字符,我们需要删除最后一个字符,仍然用函数
删除最后一个字符方法
# 删除最后一个字符
def back():
n1 = inp.get()
inp.delete(len(n1)-1,len(n1))
接着我们计算绝对值
计算绝对值
# 计算绝对值
def ab():
n1 = inp.get()
inp.delete(0,len(n1))
inp.insert(0,str(eval(n1)*-1))
设置一些文本框作为按钮的一部分
设置文本框
# 设置一个文本框
inp = tkinter.Entry(window, width=25)
# 在第0行,第0个,合并5列
inp.grid(row=0,column=0,columnspan=5)
再制作一些功能按钮
功能按钮
# 删除按钮(窗口,宽度,文本,执行命令).grid(1行,0列)
tkinter.Button(window,width=5, text="C", command=clear).grid(row=1,column=0)
tkinter.Button(window,width=5, text="←", command=back).grid(row=1,column=1)
tkinter.Button(window,width=5, text="+/-", command=ab).grid(row=1,column=2)
再制作运算符按钮
运算符
# 删除按钮(窗口,宽度,文本,背景色,文本颜色,执行命令并传入参数).grid(1行,4列)
tkinter.Button(window,width=5, text="+",bg="#f70",fg="#fff",command=lambda:add("+")).grid(row=1,column=4)
tkinter.Button(window,width=5, text="-", bg="#f70",fg="#fff",command=lambda:add("-")).grid(row=2,column=4)
tkinter.Button(window,width=5, text="×",bg="#f70",fg="#fff",command=lambda:add("*")).grid(row=3,column=4)
tkinter.Button(window,width=5, text="÷",bg="#f70",fg="#fff",command=lambda:add("/")).grid(row=4,column=4)
tkinter.Button(window,width=12,text="0", command=lambda:add("0")).grid(row=5,column=0,columnspan=2)
tkinter.Button(window,width=5,text="=", bg="#f70",fg="#fff",command=calc).grid(row=5,column=4)
tkinter.Button(window,width=5, text=".", command=lambda:add(".")).grid(row=5,column=2)
最后,我们发现还没有 123 456 789 9个按钮,我们就用for循环创建
把代码加到
# 设置一个文本框
inp = tkinter.Entry(window, width=25)
# 在第0行,第0个,合并5列
inp.grid(row=0,column=0,columnspan=5)
的下面
9个按钮
# 设置一个文本框
inp = tkinter.Entry(window, width=25)
# 在第0行,第0个,合并5列
inp.grid(row=0,column=0,columnspan=5)
# 用for循环 创建 123 456 789 9个按钮
for i in range(0,3):
for j in range(1,4):
n = j+i*3
btn=tkinter.Button(window, text=str(j+i*3),width=5, command=lambda n=n:add(n))
btn.grid(row=i+2,column=j-1)
一个有框的计算器就做好了,完整代码请看文章末尾
命令行计算器
这个计算器的代码很短,很快就能学会
首先获取第一个数与第二个数
获取数
# 通过用户输入获取运算的第一个数
num1 = int(input("输入第一个数字: "))
# 通过用户输入获取运算的第二个数
# 默认是字符串需要用int把字符转换为数组
num2 = int(input("输入第二个数字: "))
# 提示用户输入运算符
我们还得添加while True来保证代码重复执行,否则计算器无法运算多次
在前面加上while True
while True:
# 通过用户输入获取运算的第一个数
num1 = int(input("输入第一个数字: "))
# 通过用户输入获取运算的第二个数
# 默认是字符串需要用int把字符转换为数组
num2 = int(input("输入第二个数字: "))
# 提示用户输入运算符
这样就能重复了
接着获取运算方法
运算方法
print("输入运算:1、相加;2、相减;3、相乘;4、相除")
# 获取用户输入的运算符号
choice = input("输入你的选择(1/2/3/4):")
接着判断加法
判断加法
# 如果是1
if choice == '1':
print(num1,"+",num2,"=", num1+num2)
减法、乘法、除法和加法差不多,你们可以自己试试
分割
分割
实在不会也可以看看我的
剩下的
# 如果2
elif choice == '2':
print(num1,"-",num2,"=", num1-num2)
elif choice == '3':
print(num1,"×",num2,"=", num1*num2)
elif choice == '4':
print(num1,"÷",num2,"=", num1/num2)
再把他们桥接到加法的下面
桥接
while True:
# 通过用户输入获取运算的第一个数
num1 = int(input("输入第一个数字: "))
# 通过用户输入获取运算的第二个数
# 默认是字符串需要用int把字符转换为数组
num2 = int(input("输入第二个数字: "))
# 提示用户输入运算符
print("输入运算:1、相加;2、相减;3、相乘;4、相除")
# 获取用户输入的运算符号
choice = input("输入你的选择(1/2/3/4):")
# 如果是1
if choice == '1':
print(num1,"+",num2,"=", num1+num2)
# 如果2
elif choice == '2':
print(num1,"-",num2,"=", num1-num2)
elif choice == '3':
print(num1,"×",num2,"=", num1*num2)
elif choice == '4':
print(num1,"÷",num2,"=", num1/num2)
算法部分就好了,我们还需要加一个else,否则输出将会出错
else
# 其他都是非法的
else:
print("非法输入")
最后的最后我们把else加到上面一部分的下面
桥接2
while True:
# 通过用户输入获取运算的第一个数
num1 = int(input("输入第一个数字: "))
# 通过用户输入获取运算的第二个数
# 默认是字符串需要用int把字符转换为数组
num2 = int(input("输入第二个数字: "))
# 提示用户输入运算符
print("输入运算:1、相加;2、相减;3、相乘;4、相除")
# 获取用户输入的运算符号
choice = input("输入你的选择(1/2/3/4):")
# 如果是1
if choice == '1':
print(num1,"+",num2,"=", num1+num2)
# 如果2
elif choice == '2':
print(num1,"-",num2,"=", num1-num2)
elif choice == '3':
print(num1,"×",num2,"=", num1*num2)
elif choice == '4':
print(num1,"÷",num2,"=", num1/num2)
# 其他都是非法的
else:
print("非法输入")
两个计算器都介绍完毕了,接下来是完整代码
完整代码
有框计算器
# 导入tkinter库
import tkinter
# 获取一个窗口
window = tkinter.Tk()
# 设置标题
window.title('计算器')
# 设置窗口大小
window.geometry('200x200')
# 输入方法
def add(n):
# 获取到n1文本框的值
n1 = inp.get()
# 清空文本框
inp.delete(0,len(n1))
# 插入原来的加上新输入参数n
inp.insert(0,n1+str(n))
# 执行计算方法
def calc():
n1 = inp.get()
inp.delete(0,len(n1))
# 把文本框的字符串用eval当代码执行一次,再插入到文本框
inp.insert(0,str(eval(n1)))
# 清空文本框
def clear():
n1 = inp.get()
inp.delete(0,len(n1))
# 删除最后一个字符
def back():
n1 = inp.get()
inp.delete(len(n1)-1,len(n1))
# 计算绝对值
def ab():
n1 = inp.get()
inp.delete(0,len(n1))
inp.insert(0,str(eval(n1)*-1))
# 设置一个文本框
inp = tkinter.Entry(window, width=25)
# 在第0行,第0个,合并5列
inp.grid(row=0,column=0,columnspan=5)
# 用for循环 创建 123 456 789 9个按钮
for i in range(0,3):
for j in range(1,4):
n = j+i*3
btn=tkinter.Button(window, text=str(j+i*3),width=5, command=lambda n=n:add(n))
btn.grid(row=i+2,column=j-1)
# 删除按钮(窗口,宽度,文本,执行命令).grid(1行,0列)
tkinter.Button(window,width=5, text="C", command=clear).grid(row=1,column=0)
tkinter.Button(window,width=5, text="←", command=back).grid(row=1,column=1)
tkinter.Button(window,width=5, text="+/-", command=ab).grid(row=1,column=2)
# 删除按钮(窗口,宽度,文本,背景色,文本颜色,执行命令并传入参数).grid(1行,4列)
tkinter.Button(window,width=5, text="+",bg="#f70",fg="#fff",command=lambda:add("+")).grid(row=1,column=4)
tkinter.Button(window,width=5, text="-", bg="#f70",fg="#fff",command=lambda:add("-")).grid(row=2,column=4)
tkinter.Button(window,width=5, text="×",bg="#f70",fg="#fff",command=lambda:add("*")).grid(row=3,column=4)
tkinter.Button(window,width=5, text="÷",bg="#f70",fg="#fff",command=lambda:add("/")).grid(row=4,column=4)
tkinter.Button(window,width=12,text="0", command=lambda:add("0")).grid(row=5,column=0,columnspan=2)
tkinter.Button(window,width=5,text="=", bg="#f70",fg="#fff",command=calc).grid(row=5,column=4)
tkinter.Button(window,width=5, text=".", command=lambda:add(".")).grid(row=5,column=2)
# 进入消息循环
window.mainloop()
命令行计算器
while True:
# 通过用户输入获取运算的第一个数
num1 = int(input("输入第一个数字: "))
# 通过用户输入获取运算的第二个数
# 默认是字符串需要用int把字符转换为数组
num2 = int(input("输入第二个数字: "))
# 提示用户输入运算符
print("输入运算:1、相加;2、相减;3、相乘;4、相除")
# 获取用户输入的运算符号
choice = input("输入你的选择(1/2/3/4):")
# 如果是1
if choice == '1':
print(num1,"+",num2,"=", num1+num2)
# 如果2
elif choice == '2':
print(num1,"-",num2,"=", num1-num2)
elif choice == '3':
print(num1,"×",num2,"=", num1*num2)
elif choice == '4':
print(num1,"÷",num2,"=", num1/num2)
# 其他都是非法的
else:
print("非法输入")
来源:https://blog.csdn.net/tanclyyy/article/details/115788085


猜你喜欢
- 前言今天在开发时发现一个奇怪的问题,我手动改完数据库竟然不生效,反复确认环境无误后猜测是缓存的问题,因为是新接手的项目,代码还不熟悉,仔细一
- 1. MySQL如何使用索引索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关
- 这篇文章主要为大家详细介绍了python编写实现抽奖器,文中代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下# codi
- csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格:就可以存储为csv文件,文件内容
- 核心代码: header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); head
- 下面这段代码是asp编写的用来识别客户端是否为手机浏览器,以及手机类型的代码。主要用于手机网站的建设,以便实现相同网址下的不同版本网站(比如
- 目的在各种各样的理论计算中,常常需要绘制各种填充图,绘制完后需要加渐变填充的colorbar。可是有些软件如VMD,colorbar渲染后颜
- 前言:1、gevent库可以轻松实现并发同步或异步编程。gevent中使用的主要模式是Greenlet,它是以C扩展模块的形式访问Pytho
- 本文实例为大家分享了vue+echarts封装气泡图的具体代码,供大家参考,具体内容如下前端可视化封装气泡图1. html<templ
- 需求描述有时候我们会基于已有数据生成一列在表格中,类似于下面的class BaseSchema(models.Model): ... def
- 使用django启动命令行和脚本,可以方便的使用django框架做开发,例如,数据库的操作等。下面分别介绍使用方法。django shell
- 可以用两种方式创建MySQL账户:1.使用GRANT语句2.直接操作MySQL授权表最好的方法是使用GRANT语句,因为这样更精确,错误少。
- 将视图与缓存系统进行了耦合,从几个方面来说并不理想。 例如,你可能想在某个无缓存的站点中重用该视图函数,或者你可能想将该视图发布给那些不想通
- 本文实例为大家分享了python实现动态人脸捕获的具体代码,供大家参考,具体内容如下步骤载入cv2捕获摄像头获取第一帧图像定义人脸识别信息开
- 前言python内建函数指的是python自带的函数,这种函数不需要定义,并且不同的内建函数具有不同的功能,可以直接使用。A类abs() 函
- FP代表频繁模式(Frequent Pattern),算法主要分为两个步骤:FP-tree构建、挖掘频繁项集。FP树表示法FP树通过逐个读入
- REPLACE语法REPLACE(String,from_str,to_str)即:将String中所有出现的from_str替换为to_s
- 昨天晚上在家里把WM设计好的好台界面做成Html,在家里只用IE8和FF做了测试,感觉还行,除了感觉IE8还不成熟,渲染比较慢且不稳定外,标
- Sql Server 解决“用户登录失败,错误编号18456”1.说明因密码或用户名错误而使身份验证
- 今天一同事需要整理http://ics.cnvd.org.cn/工控漏洞库里面的信息,一看960多个要整理到什么时候才结束。所以我决定写个爬