功能
⬇⬇⬇
1、平面图形面积计算
2、立体图形体积计算
3、普通算术计算
4、密码
5、爬虫
原代码
⬇⬇⬇
import easygui as e
import turtle as t
import math
import requests as r
import tkinter
while True:
x = e.buttonbox('请选择你要使用的计算器','',['平面图形面积计算器','立体图形体积计算器','算术计算器','密码','爬虫','迭代日志','退出'])
if x == '退出':
break
if x == '算术计算器':
d = e.buttonbox('请选择你要使用的算数方法\n加法符号:+\n减法符号:-\n乘法符号:*\n除法符号/\n整除符号://\n取余符号:%\n次方符号:**','',['加法','减法','乘法','除法','整除','取余','次方','开方','高级选项','返回'])
if d == '加法':
r = e.enterbox('请输入你要ac算的算式')
a = r.split('+')
b = float(a[0])
c = float(a[1])
d = c + b
e.msgbox(d)
continue
f.write('加法')
elif d == '减法':
r = e.enterbox('请输入你要算的算式')
a = r.split('-')
b = float(a[0])
c = float(a[1])
d = b - c
e.msgbox(d)
continue
f.write('减法')
elif d == '次方':
r = e.enterbox('请输入你要算的算式')
a = r.split('**')
d = float(a[0]) ** float(a[1])
e.msgbox(d)
continue
f.write('次方')
elif d == '乘法':
r = e.enterbox('请输入你要算的算式')
a = r.split('*')
d = float(a[0]) * float(a[1])
e.msgbox(d)
continue
f.write('乘法')
elif d == '整除':
r = e.enterbox('请输入你要算的算式')
a = r.split('//')
d = divmod(int((a[0])),(int(a[1])))
e.msgbox('第一个数是商,第二个数是余数',d)
continue
f.write('整除')
elif d == '取余':
r = e.enterbox('请输入你要算的算式')
a = r.split('%')
d = float(a[0]) % float(a[1])
e.msgbox(d)
continue
f.write('取余')
elif d == '除法':
r = e.enterbox('请输入你要算的算式')
a = r.split('/')
d = float(a[0]) / float(a[1])
e.msgbox(d)
f.write('除法')
elif d == '开方':
g = int(e.enterbox('请输入你要开方的数'))
h = g ** 0.5
e.msgbox(h)
f.write('开方')
elif d == '高级选项':
a = e.buttonbox('欢迎来到高级选项','',['公倍数','公因(约)数','四舍五入','列出因数','勾股定理','鸡兔同笼','折扣计算','转换进制','长度转换','重量转换','四则混合计算','列表排序','画图计算','返回'])
if a == '公因(约)数':
f = []
c = int(e.enterbox('请输入第一个数'))
d = int(e.enterbox('请输入第二个数'))
g = min(c,d)
for i in range(1, g + 1):
if c % i == 0 and d % i ==0:
f.append(i)
e.msgbox(f)
if a == '四舍五入':
y = float(e.enterbox('请输入你需要四舍五入的数'))
b = int(e.enterbox('请输入你要精确到第几位'))
g = round(y,b)
e.msgbox(g)
if a == '公倍数':
f = []
c = int(e.enterbox('请输入第一个数'))
d = int(e.enterbox('请输入第二个数'))
g = min(c,d)
for i in range(1, g + 1):
if c % i == 0 and d % i ==0:
r = i
v = c // r
x = d // r
h = v * x * r
e.msgbox(h)
if a == '列出因数':
c = int(e.enterbox('请输入需要分解的数(请小于10位数)\n100内的素数有2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97'))
d = []
for i in range(c + 1):
if c % (i + 1) == 0:
d.append(i + 1)
e.msgbox(d)
if a == '勾股定理':
c = int(e.enterbox('请输入第一条边的长度'))
b = int(e.enterbox('请输入第二条边的长度'))
n = c ** 2 + b ** 2
m = math.sqrt(n)
e.msgbox(m)
if a == '鸡兔同笼':
g = int(e.enterbox('请输入总头数'))
h = int(e.enterbox('请输入总脚数'))
flag = False
for ji in range(0,g + 1):
tu = g - ji
if ji * 2 + tu * 4 == h:
e.msgbox('鸡有' + str(ji) + '只,兔有' + str(tu) + '只')
flag = True
if a == '折扣计算':
b = e.enterbox('请输入你要打折的数')
c = int(e.enterbox('请输入你要打的折数(请用数字,例:95,80)'))
c /= 100
d = float(b) * float(c)
e.msgbox(d)
if a == '转换进制':
b = int(e.enterbox('请输入原数的进制(只支持2,8,10,16进制)'))
c = int(e.enterbox('请输入转换后的进制'))
n = e.enterbox('请输入原数')
if b == 2 and c == 10:
e.msgbox(int(n,base = 2))
if b == 2 and c == 8:
e.msgbox(oct(int(n,base = 2)))
if b == 2 and c == 16:
e.msgbox(hex(int(n,base = 2)))
if b == 8 and c == 10:
e.msgbox(int(n,base = 8))
if b == 8 and c == 2:
e.msgbox(bin(int(n,base = 8)))
if b == 8 and c == 16:
e.msgbox(hex(int(n,base = 8)))
if b == 10 and c == 8:
e.msgbox(oct(int(n)))
if b == 10 and c == 2:
e.msgbox(bin(int(n)))
if b == 10 and c == 16:
e.msgbox(hex(int(n)))
if b == 16 and c == 8:
e.msgbox(oct(int(n,16)))
if b == 16 and c == 2:
e.msgbox(bin(int(n,16)))
if b == 16 and c == 10:
e.msgbox(hex(int(n,16)))
if a == '长度转换':
b = e.enterbox('请输入原数单位(仅支持纳米、微米、毫米、厘米、米、公里)')
d = int(e.enterbox('请输入原数'))
c = e.enterbox('请输入改后单位')
if b == '纳米':
if c == '微米':
d = d / 1000
if c == '毫米':
d = d / 1000000
if c == '厘米':
d = d / 10000000
if c == '米':
d = d / 1000000000
if c == '公里':
d = d / 1000000000000
if b == '微米':
if c == '纳米':
d = d * 1000
if c == '毫米':
d = d / 1000
if c == '厘米':
d = d / 10000
if c == '米':
d = d / 1000000
if c == '公里':
d = d / 1000000000
elif b == '毫米':
if c == '纳米':
d = d * 1000000
if c == '微米':
d = d * 1000
if c == '厘米':
d = d / 10
if c == '米':
d = d / 1000
if c == '公里':
d = d / 1000000
elif b == '米':
if c == '微米':
d = d * 1000000000
if c == '毫米':
d = d * 1000
if c == '厘米':
d = d * 100
if c == '纳米':
d = d * 1000000000
if c == '公里':
d = d / 1000
elif b == '公里':
if c == '微米':
d = d * 1000000000
if c == '毫米':
d = d * 1000000
if c == '厘米':
d = d * 100000
if c == '纳米':
d = d * 1000000000000
if c == '米':
d = d * 1000
else:
e.msgbox("您输入的没有添加(仅支持纳米、微米、毫米、厘米、米、公里)")
e.msgbox(d)
if a == '重量转换':
a = e.enterbox('输入原单位(仅支持克、千克、吨)')
b = int(e.enterbox('请输入原数'))
c = e.enterbox('请输入改后单位')
if a == '克':
if c == '千克':
b = b / 1000
if c == '吨':
b = b / 1000000
elif a == '千克':
if c == '克':
b = b * 1000
if c == '吨':
b = b / 1000
elif a == '吨':
if c == '克':
b = b * 1000000
if c == '千克':
b = b * 1000
else:
e.msgbox('输入有误!!!')
e.msgbox(b)
if a == '四则混合计算':
n = eval(e.enterbox('请输入混合式(将输入英文字母)'))
e.msgbox("结果为:" + str(n))
if a == '列表排序':
d = e.enterbox('输入数据请用英文逗号隔开')
d = d.split(",")
for i in range(len(d)):
d[i] = int(d[i])
e.msgbox(sorted(d))
if a == '画图计算':
e.msgbox('如果一会儿计算器弹出只有点\n\n右上角的×才能返回主界面')
window = tkinter.Tk()
window.title("计算器")
expstr = ""
history_label_obj_list = []
def onClick(key):
global expstr
if key == "=":
jieguo = round(eval(expstr), 2)
result["text"] = jieguo
frame_right.pack()
t = tkinter.Label(frame_inner, text=expstr + "=" + str(jieguo),
background="seashell")
t.pack()
history_label_obj_list.append(t)
elif key == "AC":
result["text"] = ""
expstr = ""
else:
expstr = expstr + str(key)
result["text"] = expstr
frame_grap = tkinter.Frame(window)
frame_grap.pack(fill="y", side="left")
frame_left = tkinter.Frame(window)
result = tkinter.Label(frame_left, bg="seashell", text="0", height=2,font=("Arial", 34, "bold"))
result.grid(row=0, column=0, columnspan=4, sticky=tkinter.E)
ac = tkinter.Button(frame_left, text="AC", width=6, height=2, command=lambda: onClick("AC"))
ac.grid(row=1,column=0)
negative = tkinter.Button(frame_left, text="+/-", width=6, height=2, command=lambda: onClick("-"))
negative.grid(row=1,column=1)
percent = tkinter.Button(frame_left, text="%", width=6, height=2, command=lambda: onClick("/100"))
percent.grid(row=1,column=2)
division = tkinter.Button(frame_left, text="/", width=6, height=2, command=lambda: onClick("/"))
division.grid(row=1,column=3)
num7 = tkinter.Button(frame_left, text="7", width=6, height=2, command=lambda: onClick(7))
num7.grid(row=2,column=0)
num8 = tkinter.Button(frame_left, text="8", width=6, height=2, command=lambda: onClick(8))
num8.grid(row=2,column=1)
num9 = tkinter.Button(frame_left, text="9", width=6, height=2, command=lambda: onClick(9))
num9.grid(row=2,column=2)
multi = tkinter.Button(frame_left, text="*", width=6, height=2, command=lambda: onClick("*"))
multi.grid(row=2,column=3)
num4 = tkinter.Button(frame_left, text="4", width=6, height=2, command=lambda: onClick(4))
num4.grid(row=3,column=0)
num5 = tkinter.Button(frame_left, text="5", width=6, height=2, command=lambda: onClick(5))
num5.grid(row=3,column=1)
num6 = tkinter.Button(frame_left, text="6", width=6, height=2, command=lambda: onClick(6))
num6.grid(row=3,column=2)
sub = tkinter.Button(frame_left, text="-", width=6, height=2, command=lambda: onClick("-"))
sub.grid(row=3,column=3)
num1 = tkinter.Button(frame_left, text="1", width=6, height=2, command=lambda: onClick(1))
num1.grid(row=4,column=0)
num2 = tkinter.Button(frame_left, text="2", width=6, height=2, command=lambda: onClick(2))
num2.grid(row=4,column=1)
num3 = tkinter.Button(frame_left, text="3", width=6, height=2, command=lambda: onClick(3))
num3.grid(row=4,column=2)
add = tkinter.Button(frame_left, text="+", width=6, height=2, command=lambda: onClick("+"))
add.grid(row=4,column=3)
num0 = tkinter.Button(frame_left, text="0", width=12, height=2, command=lambda: onClick(0))
num0.grid(row=5,column=0,columnspan=2)
point = tkinter.Button(frame_left, text=".", width=6, height=2, command=lambda: onClick("."))
point.grid(row=5,column=2)
equals = tkinter.Button(frame_left, text="=", width=6, height=2, command=lambda: onClick("="))
equals.grid(row=5,column=3)
frame_left.pack(fill="y", side="left")
frame_right = tkinter.Frame(window, width=200)
tkinter.Label(frame_right, text="运算历史", font=("仿宋", 14,)).pack()
frame_inner = tkinter.Frame(frame_right)
frame_inner.pack(fill="x", side="top")
def clean_history():
for x in history_label_obj_list:
x.destroy()
cls_button = tkinter.Button(frame_right, text="清空", command=lambda: clean_history())
cls_button.pack(fill="x", side="top")
window.mainloop()
if a == '返回':
e.buttonbox('请选择你要使用的算数方法\n加法符号:+减法符号:-\n乘法符号:*除法符号/\n整除符号://取余符号:%次方符号:**','',['加法','减法','乘法','除法','整除','取余','次方','开方','高级选项','返回'])
elif d == '返回':
e.buttonbox('请选择你要使用的计算器','',['平面图形面积计算器','立体图形体积计算器','算术计算器','密码','爬虫','迭代日志','退出'])
else:
pass
if x == '平面图形面积计算器':
a = e.buttonbox('请选择你需要算的图形种类','平面图形面积计算器',['正方形','长方形','圆形','梯形','三角形','平行四边形','自定义','弧长','扇形','返回'])
if a == '自定义':
h = None
if a == '自定义':
g = int(e.enterbox('你自定义图形有几个点?\n请输入一个整数。\n(请输入3个点或3个点以上,\n当你输入最后一个点的时候,系统会自动\n把你输入的最后一个点与起始点相连)(此系统未完善)'))
p = []
for i in range(g):
n = i + 1
pos = e.enterbox('请以x,y坐标的格式(英文逗号)输入\n请输入第' + str(n) + '的坐标')
pos = eval(pos)
p.append(pos)
print(p)
x,y = pos[0],pos[1]
if n == 1:
t.up()
t.goto(x,y)
t.down()
if n == g:
t.goto(x,y)
t.goto(p[0])
else:
t.goto(x,y)
if a == '正方形':
b = int(e.enterbox('请你输入正方形的边长'))
c = b ** 2
e.msgbox('边长为' + str(b) + '的正方形面积为' + str(c))
if a == '圆形':
b = int(e.enterbox('请你输入圆形的半径'))
c = b * b * 3.14
e.msgbox('半径为' + str(b) + '的圆形面积为' + str(c))
if a == '长方形':
b = int(e.enterbox('请你输入长方形的长'))
c = int(e.enterbox('请你输入长方形的宽'))
f = b * c
e.msgbox('长为' + str(b) + '、宽为' + str(c) + '的长方形面积为' + str(f))
if a == '平行四边形':
b = int(e.enterbox('请你输入平行四边形的高'))
c = int(e.enterbox('请你输入平行四边形的底'))
f = b * c
e.msgbox('高为' + str(b) + '、底为' + str(c) + '的平行四边形面积为' + str(f))
if a == '三角形':
b = int(e.enterbox('请你输入三角形的高'))
c = int(e.enterbox('请你输入三角形的底'))
f = b * c / 2
e.msgbox('高为' + str(b) + '、底为' + str(c) + '的三角形面积为' + str(f))
if a == '梯形':
b = int(e.enterbox('请你输入梯形的高'))
c = int(e.enterbox('请你输入梯形的上底'))
d = int(e.enterbox('请你输入梯形的下底'))
f = (d + c) * b / 2
e.msgbox('高为' + str(b) + '、上底为' + str(c) + '、下底为' + str(d)+'的梯形面积为' + str(f))
if a == '弧长':
n = float(e.enterbox('请输入弧长所在圆的角度'))
v = float(e.enterbox('请输入弧长所在圆的半径'))
x = (n * v * 3.14) / 180
e.msgbox(x)
if a == '扇形':
n = float(e.enterbox('请输入扇形所在圆的角度'))
v = float(e.enterbox('请输入扇形所在圆的半径'))
x = n * 3.14 * (v ** 2) / 180
e.msgbox(x)
if a == '返回':
e.buttonbox('请选择你要使用的计算器','',['平面图形面积计算器','立体图形体积计算器','算术计算器','密码','爬虫','迭代日志','退出'])
if x == '立体图形体积计算器':
a = e.buttonbox('请选择你需要算的图形种类','立体图形计算器',['长方体','正方体','圆柱体','圆锥体','棱锥','返回'])
if a == '长方体':
b = int(e.enterbox('请输入长方体的长'))
c = int(e.enterbox('请输入长方体的宽'))
d = int(e.enterbox('请输入长方体的高'))
f = b * c * d
e.msgbox('你要算的长方体的体积是' + str(f))
if a == '正方体':
b = int(e.enterbox('请输入正方体的边长'))
f = b ** 3
e.msgbox('你要算的正方体的体积是' + str(f))
if a == '圆柱体':
b = int(e.enterbox('请输入圆柱体底面圆形的半径'))
d = int(e.enterbox('请输入圆柱体的高'))
c = b * b * 3.14 * d
e.msgbox('圆柱形体积为' + str(c))
if a == '圆锥体':
b = int(e.enterbox('请输入圆锥体底面圆形的半径'))
d = int(e.enterbox('请输入圆锥体的高'))
c = (b * b * 3.14 * d) / 3
e.msgbox('圆锥体的体积为' + str(c))
if a == '棱锥':
b = int(e.enterbox('请输入棱锥锥体底面长方形的长'))
g = int(e.enterbox('请输入棱锥锥体底面长方形的宽'))
d = int(e.enterbox('请输入棱锥体的高'))
c = (b * g * d) / 3
e.msgbox('棱锥体的体积为' + str(c))
if a == '返回':
e.buttonbox('请选择你要使用的计算器','',['平面图形面积计算器','立体图形体积计算器','算术计算器','密码','爬虫','迭代日志','退出'])
if x == '密码':
a = e.buttonbox('请选择你的密码种类','',['凯撒密码器','恩尼格玛器','返回'])
if a == '凯撒密码器':
k = e.buttonbox('请选择你要加密还是解密','凯撒密码器',['加密','解密','返回'])
if k == '加密':
s = e.enterbox('请输入明文')
s = list(s)
k = int(e.enterbox('请输入密钥'))
for i in range(len(s)):
t = ord(s[i]) + k
if t > ord('z'):
t -= 26
s[i] = chr(t)
e.msgbox(''.join(s))
if k == '解密':
s = e.enterbox('请输入明文')
s = list(s)
k = int(e.enterbox('请输入密钥'))
for i in range(len(s)):
t = ord(s[i]) - k
if t < ord('z'):
t += 26
s[i] = chr(t)
e.msgbox(''.join(s))
if k == '返回':
e.buttonbox('请选择你要使用的计算器','',['平面图形面积计算器','立体图形体积计算器','算术计算器','密码','爬虫','迭代日志','退出'])
if x == '恩尼格玛器':
k = e.buttonbox('请选择你要加密还是解密','恩尼格玛器',['加密','解密','返回'])
if k == '加密':
s = e.enterbox('请输入明文')
s = list(s)
k = int(e.enterbox('请输入密钥'))
for i in range(len(s)):
t = ord(s[i]) + k
if t > ord('z'):
t -= 26
s[i] = chr(t)
k += 1
e.msgbox(''.join(s))
if k == '解密':
s = e.enterbox('请输入明文')
s = list(s)
k = int(e.enterbox('请输入密钥'))
for i in range(len(s)):
t = ord(s[i]) - k
if t < ord('z'):
t += 26
s[i] = chr(t)
k += 1
e.msgbox(''.join(s))
if k == '返回':
e.buttonbox('请选择你要使用的计算器','',['平面图形面积计算器','立体图形体积计算器','算术计算器','密码','爬虫','迭代日志','退出'])
if x == '爬虫':
p = e.buttonbox('如果访问网站则会弹出原代码','',['访问网站','退出'])
if p == '访问网站':
try:
i = e.enterbox("输入网页地址")
g = e.buttonbox("选择编码方式",'',['GBK','utf-8','unicode'])
r.encoding = g
res = r.get(i)
e.msgbox("------------ \n\n" + res.text + "\n\n------------")
except Exception as k:
e.msgbox("出现异常,报错信息如下: " + str(k))
elif p == '退出':
e.buttonbox('请选择你要使用的计算器','',['平面图形面积计算器','立体图形体积计算器','算术计算器','密码','爬虫','迭代日志','退出'])
if x == '迭代日志':
e.msgbox(''' 混合计算器迭代日志
混合计算器1.0:算数计算器
混合计算器1.1:算数计算器高级选项
混合计算器2.0:平面图形计算器
混合计算器2.1:平面图形计算器自定义
混合计算器3.0:立体图形计算器
混合计算器4.0:更改页面顺序
混合计算器5.0:密码
混合计算器6.0:爬虫
混合计算器7.0:增加算数计算器高级选项
混合计算器7.1:修复bug
混合计算器8.0:写迭代日志
混合计算器8.1:迭代日志重写
混合计算器9.0:增加画图计算功能(tkinter)
混合计算器9.1:迭代日志重写''')
if x == '返回':
e.buttonbox('请选择你要使用的计算器','',['平面图形面积计算器','立体图形体积计算器','算术计算器','密码','爬虫','迭代日志','退出'])
到这儿就结束了,感谢大家支持!