鱼C论坛

 找回密码
 立即注册
查看: 1688|回复: 0

[作品展示] [开源]Math Problem Solver+1.0

[复制链接]
发表于 2023-3-12 18:53:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 陶远航 于 2023-3-12 18:55 编辑

几何画板和其他功能暂时不能用,2.0时会改进
  1. from tkinter import *
  2. import tkinter.messagebox as g
  3. from math import *
  4. from random import *
  5. import sys
  6. from easygui import enterbox
  7. import os

  8. global ver
  9. ver=1.0
  10. def sx_main():
  11.     def feedback():
  12.         import smtplib
  13.         import re
  14.         from os import environ
  15.         from os.path import exists
  16.         from platform import system, node
  17.         from time import strftime
  18.         from email.mime.text import MIMEText
  19.         from email.utils import formataddr
  20.         from random import randint
  21.         from easygui import enterbox

  22.         title = ('Math Problem Solver+',ver)
  23.         my_sender = 'advance_software@126.com'
  24.         my_pass = 'QFAQPLFQZRZBMVWQ'
  25.         dt = strftime('%Y-%m-%d %H:%M:%S')
  26.         my_user = "taoyuanhang66@outlook.com"
  27.         username = environ['USERNAME']
  28.         system = system()
  29.         computer = node()
  30.         number = enterbox("请输入反馈内容:")
  31.         err = Exception
  32.         def mail():
  33.             global err
  34.             ret = True
  35.             try:
  36.                 msg = MIMEText(number, 'plain', 'utf-8')
  37.                 msg['From'] = formataddr([enterbox("请输入名字(昵称):"), my_sender])
  38.                 msg['To'] = formataddr(["", my_user])
  39.                 msg['Subject'] = "用户使用反馈"
  40.                 server = smtplib.SMTP_SSL("smtp.126.com", 465)
  41.                 server.login(my_sender, my_pass)
  42.                 server.sendmail(my_sender, [my_user, ], msg.as_string())
  43.                 server.quit()
  44.             except Exception as e:
  45.                 ret = False
  46.                 err = str(e)
  47.             return ret
  48.         def checkmail(email):
  49.             reg = "\w+[@][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+"
  50.             result = re.findall(reg, email)
  51.             if result:
  52.                 ret = mail()
  53.                 if ret:
  54.                     g.showinfo("反馈", '发送成功!')
  55.                 else:
  56.                     g.showerror("反馈", '邮件发送失败!')
  57.             else:
  58.                 g.showerror('Math Problem Solver+', '您的输入不合法,请重新输入!')
  59.         if __name__ == '__main__':
  60.             checkmail(my_user)

  61.     def aboutm():
  62.         g.showinfo("About Math Problem Solver+","""Math Problem Solver+ 1.0
  63. Copyright© 2023 陶远航
  64. All Rights Reserved.

  65. 警告:
  66. 不能过于依赖此工具
  67. 程序及源代码仅供学习交流,
  68. 未经作者允许不可用于商业用途!""")

  69.     def guifan():
  70.         g.showinfo("","""由于我的能力有限,无法做出以下的功能,以后可能会修复:
  71. 1、数字不能直接写在字母、括号前,比如,把“5x”替换成“5*x”
  72. 2、注意,把所有的次方改成“**”,比如,“5³”要替换成“5**3”
  73. 3、乘号“×”替换成“*”
  74. 上述问题在以后版本会改进,谢谢!
  75. """)
  76.     def jhhb():
  77.         jhhbpath=os.path.join(os.path.dirname(__file__), 'GSP5chs.exe')
  78.         os.system(str('"'+jhhbpath+'"'))
  79.         return None

  80.     def menuCommand() :
  81.         g.showinfo("功能未开放","功能未开放,您可以使用其他功能")

  82.     def _quit():
  83.         win.quit()
  84.         win.destroy()
  85.         sys.exit()

  86.     def njh(bianshu=None):
  87.         try:
  88.             if bianshu==None:
  89.                 bianshu=int(enterbox("请输入边数:",""))
  90.             else:
  91.                 bianshu=int(bianshu)
  92.         except:
  93.             g.showerror("","请输入正确的值!")
  94.             return None
  95.         if bianshu<=2:
  96.             g.showerror("","请输入正确的值!")
  97.             return None
  98.         else:
  99.             g.showinfo("",("内角和为",str((bianshu-2)*180),"°"))
  100.     def waijiao(bianshu=None):
  101.         try:
  102.             if bianshu==None:
  103.                 bianshu=int(enterbox("请输入边数:",""))
  104.             else:
  105.                 bianshu=int(bianshu)
  106.         except:
  107.             g.showerror("","请输入正确的值!")
  108.             return None
  109.         if bianshu<=2:
  110.             g.showerror("","请输入正确的值!")
  111.             return None
  112.         else:
  113.             g.showinfo('',("正",bianshu,"边形的外角为",str(360-(bianshu-2)*180/bianshu)))
  114.     def zhouchang(n=None):
  115.         if n==None:
  116.             try:
  117.                 n=int(enterbox("请输入边数"))
  118.             except:
  119.                 g.showerror("","请输入正确的值!")
  120.                 return None
  121.         if n<=2:
  122.             g.showerror("","边数不能小于二!")
  123.             return None
  124.         b_list=[]
  125.         for i in range(n):
  126.             try:
  127.                 b_list.append(int(enterbox(("请输入第",i+1,"边边长"))))
  128.             except:
  129.                 g.showerror("","请输入正确的值!")
  130.                 return None
  131.         g.showinfo("",str(sum(b_list)))
  132.         return None
  133.     def sjx_mj_dg():
  134.         try:
  135.             gao=int(enterbox("请输入高:"))
  136.             di=int(enterbox("请输入底:"))
  137.             g.showinfo("",("面积为",str(gao*di/2)))
  138.             return None
  139.         except:
  140.             g.showerror("","请输入正确的值!")
  141.             return None
  142.     def sjx_mj_sb():
  143.         try:
  144.             s1=int(enterbox("请输入第一边长:"))
  145.             s2=int(enterbox("请输入第二边长:"))
  146.             s3=int(enterbox("请输入第三边长:"))
  147.             p=(s1+s2+s3)/2
  148.             s=sqrt(p*(p-s1)*(p-s2)*(p-s3))
  149.             g.showinfo("",("p=(",s1,"+",s2,"+",s3,")÷2 =",(s1+s2+s3)/2,
  150.                 "面积为√",str(p*(p-s1)*(p-s2)*(p-s3)),"即",str(s)))
  151.             return None
  152.         except:
  153.             g.showerror("","请输入正确的值!")
  154.             return None
  155.     def zjsjx_mj_dg():
  156.         try:
  157.             a=int(enterbox("直角边长:"))
  158.             b=int(enterbox("另一个直角边长:"))
  159.             g.showinfo("",str(a*b/2))
  160.             return None
  161.         except:
  162.             g.showerror("","请输入正确的值!")
  163.             return None
  164.     def zjsjx_xb():
  165.         try:
  166.             a=int(enterbox("直角边长:"))
  167.             b=int(enterbox("另一个直角边长:"))
  168.             g.showinfo("",("√",str(pow(a,2)+pow(b,2)),",即",str(sqrt(pow(a,2)+pow(b,2)))))
  169.             return None
  170.         except:
  171.             g.showerror("","请输入正确的值!")
  172.             return None
  173.     def dysjx_yd_zc():
  174.         try:
  175.             yao=int(enterbox("腰长:"))
  176.             di=int(enterbox("底长:"))
  177.             g.showinfo("",("周长为",str(2*yao+di)))
  178.             return None
  179.         except:
  180.             g.showerror("","请输入正确的值!")
  181.             return None
  182.     def sbx_mj_ty(state=None):
  183.         if state=="1":
  184.             try:
  185.                 a=int(enterbox("边长:"))
  186.                 g.showinfo("",str(a**2))
  187.                 return None
  188.             except:
  189.                 g.showerror("","请输入正确的值!")
  190.                 return None
  191.         elif state=="2":
  192.             try:
  193.                 a=int(enterbox("长:"))
  194.                 b=int(enterbox("宽:"))
  195.                 g.showinfo("",str(a*b))
  196.                 return None
  197.             except:
  198.                 g.showerror("","请输入正确的值!")
  199.                 return None
  200.         elif state=="3":
  201.             try:
  202.                 a=int(enterbox("底:"))
  203.                 b=int(enterbox("高:"))
  204.                 g.showinfo("",str(a*b))
  205.                 return None
  206.             except:
  207.                 g.showerror("","请输入正确的值!")
  208.                 return None
  209.         elif state=="4":
  210.             try:
  211.                 a=int(enterbox("上底:"))
  212.                 c=int(enterbox("下底:"))
  213.                 b=int(enterbox("高:"))
  214.                 g.showinfo("",str((a+c)*b/2))
  215.                 return None
  216.             except:
  217.                 g.showerror("","请输入正确的值!")
  218.                 return None
  219.         elif state==None:
  220.             return None
  221.     def sbx_bc_ty(state=None):
  222.         try:
  223.             if state=="None":
  224.                 return None
  225.             elif state=="1":
  226.                 s=int(enterbox("面积:"))
  227.                 g.showinfo("",str(sqrt(s)))
  228.                 return None
  229.             elif state=="2":
  230.                 s=int(enterbox("面积:"))
  231.                 a=int(enterbox("长(或宽):"))
  232.                 g.showinfo("",str(s/a))
  233.                 return None
  234.             elif state=="3":
  235.                 s=int(enterbox("面积:"))
  236.                 a=int(enterbox("底(或高):"))
  237.                 g.showinfo("",str(s/a))
  238.                 return None
  239.             else:
  240.                 return None
  241.         except:
  242.             g.showerror("","请输入正确的值!")
  243.     def sbx_zc_ty(state=None):
  244.         if state==1:
  245.             try:
  246.                 g.showinfo("",str(4*int(enterbox("请输入边长:"))))
  247.             except:
  248.                 g.showerror("","请输入正确的值!")
  249.         elif state==2:
  250.             try:
  251.                 g.showinfo("",str(2*int(enterbox("请输入长:"))+2*int(enterbox("请输入宽:"))))
  252.             except:
  253.                 g.showerror("","请输入正确的值!")
  254.         elif state==3:
  255.             try:
  256.                 g.showinfo("",str(2*int(enterbox("请输入其中一组对边的长:"))+2*int(enterbox("请输入另一组对边的长:"))))
  257.             except:
  258.                 g.showerror("","请输入正确的值!")
  259.         elif state==4:
  260.             try:
  261.                 g.showinfo("",str(int(enterbox("请输入上底:"))+int(enterbox("请输入下底:"))+int(enterbox("请输入腰:"))+int(enterbox("请输入另一条腰:"))))
  262.             except:
  263.                 g.showerror("","请输入正确的值!")
  264.         elif state==5:
  265.             try:
  266.                 g.showinfo("",str(int(enterbox("请输入第一条边长:"))+int(enterbox("请输入第二条边长:"))+int(enterbox("请输入第三条边长:"))+int(enterbox("请输入第四条边长:"))))
  267.             except:
  268.                 g.showerror("","请输入正确的值!")

  269.     def sbx_mj_ts():
  270.         try:
  271.             s1=int(enterbox("请输入第一边长:"))
  272.             s2=int(enterbox("请输入第二边长:"))
  273.             s3=int(enterbox("请输入第三边长:"))
  274.             s4=int(enterbox("请输入第四边长:"))
  275.             s5=int(enterbox("请输入第对角线长(第二边长和第三边长的夹角的角平分线在四边形内的长度):"))
  276.             p=(s1+s2+s5)/2
  277.             p2=(s3+s4+s5)/2
  278.             s=sqrt(p*(p-s1)*(p-s2)*(p-s5))+sqrt(p*(p2-s3)*(p2-s4)*(p2-s5))
  279.             g.showinfo("",(str(s)))
  280.             return None
  281.         except:
  282.             g.showerror("","请输入正确的值!")
  283.             return None
  284.         
  285.     win = Tk()
  286.     win.title("Math Problem Solver+ 1.0")
  287.     win.geometry('350x150+300+200')
  288.     mainmenu = Menu (win)
  289.     jihemenu = Menu (mainmenu, tearoff=False)
  290.     tongyong=Menu(jihemenu,tearoff=0)
  291.     #######################通用###############################
  292.     tongyong.add_command(label='内角和',command=njh)
  293.     tongyong.add_command(label='外角',command=waijiao)
  294.     jihemenu.add_cascade(label="通用",menu=tongyong)
  295.     #######################通用###############################
  296.     #######################三角形##########################################
  297.     sjx=Menu(jihemenu,tearoff=0)
  298.     sjx.add_command(label='周长',command=lambda:zhouchang(3))
  299.     #######################三角形面积##########################
  300.     sjxmianji=Menu(jihemenu,tearoff=0)
  301.     sjxmianji.add_command(label='已知底和高',command=lambda:sjx_mj_dg())
  302.     sjxmianji.add_command(label='已知三边长',command=lambda:sjx_mj_sb())
  303.     zjsjx=Menu(jihemenu,tearoff=0)
  304.     zjsjx.add_command(label='求面积',command=zjsjx_mj_dg)
  305.     zjsjx.add_command(label='求斜边长',command=zjsjx_xb)
  306.     sjxmianji.add_cascade(label='直角三角形(特殊)',menu=zjsjx)
  307.     sjx.add_cascade(label='面积',menu=sjxmianji)
  308.     #######################三角形面积##########################
  309.     #######################直角三角形##########################
  310.     #menu在上面
  311.     sjx.add_cascade(label='直角三角形',menu=zjsjx)
  312.     #######################直角三角形##########################
  313.     #######################等腰三角形##########################
  314.     dysjx=Menu(jihemenu,tearoff=0)
  315.     dysjx.add_command(label='已知腰底求周长',command=dysjx_yd_zc)
  316.     sjx.add_cascade(label='等腰三角形',menu=dysjx)
  317.     #######################等腰三角形##########################
  318.     jihemenu.add_cascade(label="三角形",menu=sjx)
  319.     #######################三角形###########################################
  320.     #######################四边形###########################################
  321.     sbx=Menu(jihemenu,tearoff=0)
  322.     #######################正方形###########################################
  323.     zfx=Menu(jihemenu,tearoff=0)
  324.     zfx.add_command(label='求面积',command=lambda:sbx_mj_ty(state="1"))
  325.     zfx.add_command(label='求边长',command=lambda:sbx_bc_ty(state="1"))
  326.     zfx.add_command(label='求周长',command=lambda:sbx_zc_ty(state=1))
  327.     sbx.add_cascade(label='正方形',menu=zfx)
  328.     #######################正方形###########################################
  329.     #######################长方形###########################################
  330.     cfx=Menu(jihemenu,tearoff=0)
  331.     cfx.add_command(label='求面积',command=lambda:sbx_mj_ty(state="2"))
  332.     cfx.add_command(label='求长/宽',command=lambda:sbx_bc_ty(state="2"))
  333.     cfx.add_command(label='求周长',command=lambda:sbx_zc_ty(state=2))
  334.     sbx.add_cascade(label='长方形',menu=cfx)
  335.     #######################长方形###########################################
  336.     #######################平行四边形########################################
  337.     pxsbx=Menu(jihemenu,tearoff=0)
  338.     pxsbx.add_command(label='求面积',command=lambda:sbx_mj_ty(state="3"))
  339.     pxsbx.add_command(label='求底/高',command=lambda:sbx_bc_ty(state="3"))
  340.     pxsbx.add_command(label='求周长',command=lambda:sbx_zc_ty(state=3))
  341.     sbx.add_cascade(label='平行四边形',menu=pxsbx)
  342.     #######################平行四边形########################################
  343.     #######################梯形#############################################
  344.     tx=Menu(jihemenu,tearoff=0)
  345.     tx.add_command(label='求面积',command=lambda:sbx_mj_ty(state="4"))
  346.     tx.add_command(label='求上底/下底/高',command=menuCommand)
  347.     tx.add_command(label='求周长',command=lambda:sbx_zc_ty(state=4))
  348.     sbx.add_cascade(label='梯形',menu=tx)
  349.     #######################梯形#############################################
  350.     #######################任意四边形########################################
  351.     rysbx=Menu(jihemenu,tearoff=0)
  352.     rysbx.add_command(label='求面积',command=lambda:sbx_mj_ts)
  353.     rysbx.add_command(label='求周长',command=lambda:sbx_zc_ty(state=4))
  354.     sbx.add_cascade(label='任意四边形',menu=rysbx)
  355.     #######################任意四边形########################################
  356.     jihemenu.add_cascade(label="四边形",menu=sbx)
  357.     #######################四边形###########################################
  358.     wbx=Menu(jihemenu,tearoff=0)
  359.     wbx.add_cascade(label='内角和',command=njh)
  360.     jihemenu.add_cascade(label="五边形及以上",menu=wbx)
  361.     jihemenu.add_separator()
  362.     jihemenu.add_command(label="打开几何画板",command=jhhb)
  363.     mainmenu.add_cascade(label="几何",menu=jihemenu)

  364.     def calc():
  365.         guifan()
  366.         try:
  367.             g.showinfo("",eval(enterbox("式子:")))
  368.             return None
  369.         except:
  370.             g.showerror("","运行错误!")

  371.     def kaifang():
  372.         guifan()
  373.         a = int(enterbox("请输入你要开方的数:"))
  374.         b = int(enterbox("请输入你要开几次方"))
  375.         x = 1
  376.         b1 = b - 1
  377.         while True:
  378.             try:
  379.                 y = (b1 * x + a / (x ** b1)) / b
  380.             except OverflowError:
  381.                 g.showerror("数字可能太大了!")
  382.             if y == x:
  383.                 break
  384.             x = y
  385.         g.showinfo("",x)

  386.     def gaojimoshi():
  387.         guifan()
  388.         mingling=enterbox("式子或任意命令:")
  389.         try:
  390.             g.showinfo("",(str(mingling),"执行成功!返回值:",eval(mingling)))
  391.             return None
  392.         except:
  393.             try:
  394.                 g.showinfo("",(str(mingling),"执行成功!返回值:",exec(mingling)))
  395.                 return None
  396.             except:
  397.                 g.showerror("","运行错误!请检查输入是否正确!")
  398.                 return None
  399.     class hanshu:
  400.         def sin():
  401.             try:
  402.                 g.showinfo("",str(sin(int(enterbox("请输入sin(a)中a的值:")))))
  403.             except:
  404.                 g.showerror("","运行错误!")
  405.     daishumenu = Menu (mainmenu, tearoff=False)
  406.     daishumenu.add_command(label="简易计算器",command=calc)
  407.     daishumenu.add_command(label="开方",command=kaifang)
  408.     daishumenu.add_command(label="多项式展开",command=menuCommand)
  409.     daishumenu.add_command(label="因数/式分解",command=menuCommand)
  410.     daishumenu.add_command(label="随机数生成",command=menuCommand)
  411.     daishumenu.add_command(label="质数检测",command=menuCommand)
  412.     daishumenu.add_command(label="函数的计算",command=menuCommand)
  413.     daishumenu.add_separator()
  414.     daishumenu.add_command(label="高级模式",command=gaojimoshi)
  415.     mainmenu.add_cascade(label="代数",menu=daishumenu)
  416.     mainmenu.add_command(label="退出",command=_quit)
  417.     mainmenu.add_command(label="关于",command=aboutm)
  418.     def fb():
  419.         g.showinfo("","""请联系邮箱“taoyuanhang66@outlook.com”""")
  420.     mainmenu.add_command(label="反馈",command=fb)
  421.     win.config(menu=mainmenu)
  422.     win.mainloop()

  423. sx_main()
复制代码

不能给大家鱼币了,鱼币实在是没了,大家可以去这里领:https://fishc.com.cn/forum.php?m ... B%A7%B5%C7%C2%BC8.0

评分

参与人数 3荣誉 +8 鱼币 +8 贡献 +3 收起 理由
tyh小号 + 1 + 1 鱼C有你更精彩^_^
liuhongrun2022 + 5 + 5 + 3
歌者文明清理员 + 2 + 2 无条件支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-10 04:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表