鱼C论坛

 找回密码
 立即注册
查看: 3250|回复: 28

[作品展示] 24点计算器【原创】

[复制链接]
发表于 2022-8-30 12:42:07 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 zhangjinxuan 于 2023-12-12 16:37 编辑

程序说明:
名字:24点计算器
功能:帮你计算24点,生成24点题目及训练二十四点
代码行总数:500行
创作月数:4个月
创作目的:让更多的人爱上数学,帮鱼油们训练24点
适用人群:教师,学生,数学爱好者,python爱好者
使用本程序必备:python3.9+有tkinter库
效果图:

                               
登录/注册后可看大图

作者:zhangjinxuan(原创,仅供学习使用)
创作这么久,给点鱼币不过分吧?

源代码:
  1. #软件说明:
  2. #------------------------名称:24点计算器--------------------------#
  3. #-----------------功能:计算,生成,训练24点题目-------------------#
  4. #-----------------------代码行总数:约500行------------------------#
  5. #-----------------适用人群:老师,学生,学习爱好者-----------------#
  6. #-----------------使用权限:访问存储空间,生成窗口------------------#
  7. #--使用本程序必备:python3.9+,tkinter,sys,random,threading,time库--#
  8. #--------------------------作者:张锦轩----------------------------#
  9. #-------------------------版本号:v4.5.0---------------------------#
  10. from tkinter import *
  11. from tkinter.messagebox import *
  12. from threading import Thread as ths
  13. import sys,time
  14. sheching=False
  15. #特简单计时类
  16. class Time(object):
  17.         def __init__(self):
  18.                 self.starttime=time.time()
  19.                 self.endtime=time.time()
  20.         def get(self):
  21.                 self.endtime=time.time()
  22.                 return round(self.endtime-self.starttime,3)
  23. #判断a,b,c,d是否能通过加减乘除凑成result
  24. def tfp(a,b,c,d,result=24): #twenty four point简写
  25.         op=('+','-','*','/')
  26.         ns=str(a),str(b),str(c),str(d)
  27.         for o1 in op:
  28.                 for o2 in op:
  29.                         for o3 in op:
  30.                                 for d1,n1 in enumerate(ns):
  31.                                         for d2,n2 in enumerate(ns):
  32.                                                 if d2==d1:
  33.                                                         continue
  34.                                                 for d3,n3 in enumerate(ns):
  35.                                                         if d3==d2 or d3==d1:
  36.                                                                 continue
  37.                                                         for d4,n4 in enumerate(ns):
  38.                                                                 try:
  39.                                                                         r=float(result)
  40.                                                                 except:
  41.                                                                         return (False,None)
  42.                                                                 if d4==d3 or d4==d2 or d4==d1:
  43.                                                                         continue

  44.                                                                 try:
  45.                                                                         if eval(n1+o1+n2+o2+n3+o3+n4)==r:
  46.                                                                                 return (True,n1+o1+n2+o2+n3+o3+n4)
  47.                                                                 except:
  48.                                                                         pass
  49.                                                                 try:
  50.                                                                         if eval('('+n1+o1+n2+')'+o2+n3+o3+n4)==r:
  51.                                                                                 return (True,'('+n1+o1+n2+')'+o2+n3+o3+n4)
  52.                                                                 except:
  53.                                                                         pass
  54.                                                                 try:
  55.                                                                         if eval('('+n1+o1+n2+')'+o2+'('+n3+o3+n4+')')==r:
  56.                                                                                 return (True,'('+n1+o1+n2+')'+o2+'('+n3+o3+n4+')')
  57.                                                                 except:
  58.                                                                         pass
  59.                                                                 try:
  60.                                                                         if eval(n1+o1+n2+o2+'('+n3+o3+n4+')')==r:
  61.                                                                                 return (True,n1+o1+n2+o2+'('+n3+o3+n4+')')
  62.                                                                 except:
  63.                                                                         pass
  64.                                                                 try:
  65.                                                                         if eval(n1+o1+"("+n2+o2+n3+")"+o3+n4)==r:
  66.                                                                                 return (True,n1+o1+"("+n2+o2+n3+")"+o3+n4)
  67.                                                                 except:
  68.                                                                         pass
  69.                                                                 try:
  70.                                                                         if eval(n1+o1+'('+n2+o2+'('+n3+o3+n4+'))')==r:                                                                      
  71.                                                                                 return (True,n1+o1+'('+n2+o2+'('+n3+o3+n4+'))')
  72.                                                                 except:
  73.                                                                         pass
  74.                                                                 try:
  75.                                                                         if eval(n1+o1+'(('+n2+o2+n3+')'+o3+n4+')')==r:                                                               
  76.                                                                                 return (True,n1+o1+'(('+n2+o2+n3+')'+o3+n4+')')
  77.                                                                 except:
  78.                                                                         pass
  79.                                                                 try:
  80.                                                                         if eval("(("+n1+o1+n2+')'+o2+n3+")"+o3+n4)==r:                                                               
  81.                                                                                 return (True,"(("+n1+o1+n2+')'+o2+n3+")"+o3+n4)
  82.                                                                 except:
  83.                                                                         pass
  84.                                                                 try:
  85.                                                                         if eval('('+n1+o1+'('+n2+o2+n3+'))'+o3+n4)==r:                                                               
  86.                                                                                 return (True,'('+n1+o1+'('+n2+o2+n3+'))'+o3+n4)
  87.                                                                 except:
  88.                                                                         pass
  89.                                                                 try:
  90.                                                                         if eval("("+n1+o1+n2+o2+n3+")"+o3+n4)==r:                                                               
  91.                                                                                 return (True,"("+n1+o1+n2+o2+n3+")"+o3+n4)
  92.                                                                 except:
  93.                                                                         pass
  94.                                                                 try:
  95.                                                                         if eval(n1+o1+'('+n2+o2+n3+o3+n4+")")==r:                                                               
  96.                                                                                 return (True,n1+o1+'('+n2+o2+n3+o3+n4+")")
  97.                                                                 except:
  98.                                                                         pass
  99.         return (False,None)
  100. twp=tfp
  101. #计算用户输入的值
  102. def calc():
  103.         m=twp(num1.get(),num2.get(),num3.get(),num4.get(),evalre.get())
  104.         if m[0]:
  105.                 result.set("此题有解,解法是:"+str(m[1])+"。")
  106.         else:
  107.                 result.set("此题无解,请重新输入。")
  108. #生成题目
  109. def shech(mi,mx,result=24):
  110.         global a,b,c,d
  111.         rightan.set("")
  112.         #检查数值有没有错误
  113.         try:
  114.                 int(mi)
  115.                 int(mx)
  116.                 int(result)
  117.                 if int(result)< -56 or int(result)>560:
  118.                         num2_1.set('')
  119.                         num2_2.set('')
  120.                         num2_3.set('')
  121.                         num2_4.set('')
  122.                         showerror("错误","结果取值范围应在-56 - 560")
  123.                         return
  124.                 if int(mx)>100 or int(mx) <-20:
  125.                         num2_1.set('')
  126.                         num2_2.set('')
  127.                         num2_3.set('')
  128.                         num2_4.set('')
  129.                         showerror("错误","数值错误(最大值取值范围应在-20 - 100内)")
  130.                         return
  131.                 if int(mi)<-56 or int(mi)>80:
  132.                         num2_1.set('')
  133.                         num2_2.set('')
  134.                         num2_3.set('')
  135.                         num2_4.set('')
  136.                         showerror("错误","数值错误(最小值取值范围应在-56 -80内)")
  137.                         return
  138.                 if int(mx)<int(mi):
  139.                         num2_1.set('')
  140.                         num2_2.set('')
  141.                         num2_3.set('')
  142.                         num2_4.set('')
  143.                         showerror("错误","数值错误(最大值不能小于最小值)")
  144.                         return
  145.         except Exception as e:
  146.                 showerror("不明错误",e)
  147.                 num2_1.set('')
  148.                 num2_2.set('')
  149.                 num2_3.set('')
  150.                 num2_4.set('')
  151.                 return
  152.         #生成题目
  153.         from random import randint as r
  154.         mn=int(mi)
  155.         ma=int(mx)
  156.         for i in range(10):
  157.                 a=r(mn,ma)
  158.                 b=r(mn,ma)
  159.                 c=r(mn,ma)
  160.                 d=r(mn,ma)
  161.                 if twp(a,b,c,d,result)[0]:
  162.                         break
  163.         else:
  164.                 showerror("错误","执行超时,请重新生成或更改数值")
  165.                 num2_1.set('')
  166.                 num2_2.set('')
  167.                 num2_3.set('')
  168.                 num2_4.set('')
  169.                 return 0
  170.         num2_1.set(str(a))
  171.         num2_2.set(str(b))
  172.         num2_3.set(str(c))
  173.         num2_4.set(str(d))
  174.         return 1
  175. #退出python程序
  176. def exit1():
  177.         if askyesno("确认","确认退出?"):
  178.                 sys.exit()
  179. #显示帮助
  180. def help1():
  181.         showinfo("帮助","分别在四个文本框中输入数字,点击 计算 可计算题目正确答案\n第五个文本框是运算结果,默认为24\n感谢您的使用!作者:张锦轩")
  182. #显示答案
  183. def showan():
  184.         global a,b,c,d
  185.         try:
  186.                 del a,b,c,d
  187.                 rightan.set(twp(int(num2_1.get()),int(num2_2.get()),int(num2_3.get()),int(num2_4.get()),int(minre.get()))[1])
  188.         except NameError:
  189.                 showerror("错误","答案已经显示或未点击‘生成’按钮")
  190.         except ValueError:
  191.                 showerror("错误","答案已经显示或未点击‘生成’按钮")
  192. #题目生成器主程序
  193. def main():
  194.         global num2_1,num2_2,num2_3,num2_4,rightan,minre,maxs,mins,win1
  195.         #设置窗口
  196.         win1=Tk()
  197.         win1.title("题目生成器")
  198.         win1.resizable(False,False)
  199.         win1.geometry("400x280+480+120")
  200.         #创建Label对象
  201.         Label(win1,text="最小值:",font=('等线',15)).place(x=10,y=10)
  202.         Label(win1,text="最大值:",font=('等线',15)).place(x=10,y=40)
  203.         Label(win1,text="结果(默认为24):",font=('等线',15)).place(x=10,y=70)
  204.         Label(win1,text="题目:",font=('等线',15)).place(x=10,y=100)
  205.         Label(win1,text="答案:",font=('等线',15)).place(x=10,y=130)
  206.         #创建StringVar对象
  207.         maxs=StringVar(win1,"1")
  208.         mins=StringVar(win1,"10")
  209.         minre=StringVar(win1,"24")
  210.         rightan=StringVar(win1,"")
  211.         num2_1=StringVar(win1,"")
  212.         num2_2=StringVar(win1,"")
  213.         num2_3=StringVar(win1,"")
  214.         num2_4=StringVar(win1,"")
  215.         #创建Entry对象
  216.         numen1=Entry(win1,textvariable=num2_1)
  217.         numen1.place(x=65,y=100,width=50,height=25)
  218.         numen2=Entry(win1,textvariable=num2_2)
  219.         numen2.place(x=110,y=100,width=50,height=25)
  220.         numen3=Entry(win1,textvariable=num2_3)
  221.         numen3.place(x=160,y=100,width=50,height=25)
  222.         numen4=Entry(win1,textvariable=num2_4)
  223.         numen4.place(x=210,y=100,width=50,height=25)
  224.         numen1['state']="readonly"
  225.         numen2['state']="readonly"
  226.         numen3['state']="readonly"
  227.         numen4['state']="readonly"
  228.         Entry(win1,textvariable=maxs).place(x=85,y=10,height=25,width=230)
  229.         Entry(win1,textvariable=mins).place(x=85,y=40,height=25,width=230)
  230.         Entry(win1,textvariable=minre).place(x=165,y=70,height=25,width=150)
  231.         ane=Entry(win1,textvariable=rightan)
  232.         ane.place(x=65,y=130,height=25,width=330)
  233.         ane['state']="readonly"
  234.         #创建Button对象
  235.         Button(win1,text="生成",command=lambda:shech(maxs.get(),mins.get(),minre.get())).place(x=325,y=15,height=75,width=70)
  236.         Button(win1,text="显示答案",command=showan).place(x=270,y=100,height=25,width=125)
  237.         #--------------------我是一条迷人的分割线--------------------#
  238.         global filetra,testnum,condi
  239.         filetra=StringVar(win1,"test.txt")
  240.         testnum=StringVar(win1,"10")
  241.         condi=StringVar(win1,"导出状态:空")
  242.         Button(win1,text="导出题目",command=checkfile).place(x=330,y=180,height=60,width=60)
  243.         Button(win1,text="帮助",command=help2,fg="yellow",bg="blue").place(x=10,y=245,height=25,width=380)
  244.         Label(win1,text="导出数量:").place(x=10,y=180)
  245.         Label(win1,text="导出路径:").place(x=10,y=200)
  246.         Label(win1,textvariable=condi).place(x=10,y=220)
  247.         Entry(win1,textvariable=testnum).place(x=70,y=182,height=20,width=250)
  248.         Entry(win1,textvariable=filetra).place(x=70,y=202,height=20,width=250)
  249.         win1.mainloop()
  250. #显示题目生成器帮助
  251. def help2():
  252.         showinfo("帮助","\n快速生成用法:\n在 最小值 最大值 结果 中输入数字,\n点击生成按钮,即可生成题目,点击显示答案,即可显示此题目的答案。\n\n导入文件用法:\n输入导出数量,导出路径,点击导出题目,即可导出至文件\n注:最大值与最小值和结果需要在上方输入,最大值和最小值与结果取值范围分别是:\n-20到100,-56到80,-56到560,请不要超出范围,且在生成题目时不要做任何操作,直到生成完毕。\n感谢您的使用!作者:张锦轩")
  253. #检查文件并且导出
  254. def checkfile():
  255.         global sheching
  256.         if sheching:
  257.                 showwarning("警告","正在生成题目,请等待生成结束再执行操作!")
  258.                 return
  259.         condi.set("导出状态:检查文件中")
  260.         if askyesno("警告","如果文件存在,文件将被覆盖,确认继续?"):
  261.                 pass
  262.         else:
  263.                 condi.set("导出状态:空")
  264.                 return
  265.        
  266.         try:
  267.                 file=open(filetra.get(),'w')
  268.         except BaseException as e:
  269.                 showerror("未知错误",e)
  270.                 condi.set("导出状态:空")
  271.                 return
  272.         #如果没问题,则关闭文件并导出
  273.         file.close()
  274.         condi.set("导出状态:正在导出……")
  275.         num=int(testnum.get())
  276.         if num>=800:
  277.                 if askyesno("警告","导出题目过多,时间可能非常长,确认继续?"):
  278.                         pass
  279.                 else:
  280.                         condi.set("导出状态:空")
  281.                         return
  282.         lists=[]
  283.         from random import randint as r
  284.         try:
  285.                 #生成题目
  286.                 def a():
  287.                         global sheching
  288.                         sheching=True
  289.                         amax=int(maxs.get())
  290.                         amin=int(mins.get())
  291.                         aminre=int(minre.get())
  292.                         file=open(filetra.get(),'w')
  293.                         for i in range(0,num):
  294.                                 condi.set(f"导出状态:正在导出……{i}/{num}")
  295.                                 for i in range(10):
  296.                                         fn1=r(amax,amin)
  297.                                         fn2=r(amax,amin)
  298.                                         fn3=r(amax,amin)
  299.                                         fn4=r(amax,amin)
  300.                                         if twp(fn1,fn2,fn3,fn4,aminre)[0]:
  301.                                                 break
  302.                                 else:
  303.                                         showerror("错误","导出超时(原因可能是给定的数值无法生成题目)")
  304.                                         condi.set("导出状态:空")
  305.                                         return
  306.                                 lists.append(f'{fn1}  {fn2}  {fn3}  {fn4}')
  307.                         #写入文件
  308.                         file.write("\n".join(lists))
  309.                         condi.set("导出状态:完成!")
  310.                         file.close()
  311.                         showinfo("提示",f"生成成功,{num}道24点题目")
  312.                         condi.set("导出状态:空")
  313.                         sheching=False
  314.                 ths(target=a).start()
  315.                
  316.         except BaseException as e:
  317.                 #报错并关闭文件
  318.                 showerror("未知错误",e)
  319.                 condi.set("导出状态:空")
  320.                 file.close()
  321. #清空
  322. def clean():
  323.         num1.set('')
  324.         num2.set('')
  325.         num3.set('')
  326.         num4.set("")
  327.         evalre.set('24')
  328.         result.set("请输入数字")
  329. def th(func):
  330.         ths(target=func).start()
  331. #题目训练器主程序
  332. def Cdown():
  333.         main2_nums.set("        3")
  334.         time.sleep(1)
  335.         main2_nums.set("        2")
  336.         time.sleep(1)
  337.         main2_nums.set("        1")
  338.         time.sleep(1)
  339.         main2_nums.set("    开始!")
  340.         time.sleep(1)
  341.         teststart1()
  342. def shechnum(smaxnum,sminnum,sresult):
  343.         from random import randrange as r
  344.         mn=int(sminnum)
  345.         ma=int(smaxnum)
  346.         while True:
  347.                 a=r(mn,ma,1)
  348.                 b=r(mn,ma,1)
  349.                 c=r(mn,ma,1)
  350.                 d=r(mn,ma,1)
  351.                 if twp(a,b,c,d,int(sresult))[0]:
  352.                         return f"{a}  {b}  {c}  {d}"
  353. def check():
  354.         global win2,cdown,tmaxnum,tminnum,tresult,testatime,testtime,main2_nums,main2_result,timer
  355.         li=main2_nums.get().split("  ")
  356.         n1=li[0]
  357.         n2=li[1]
  358.         n3=li[2]
  359.         n4=li[3]
  360.         nums=[n1,n2,n3,n4]
  361.         t=tresult.get()
  362.         try:
  363.                 if eval(t)==float(main2_result.get()):
  364.                         if n1 in t and n2 in t and n3 in t and n4 in t:
  365.                                 for i in nums:
  366.                                         if nums.count(str(i))==li.count(str(i)):
  367.                                                 pass
  368.                                         else:
  369.                                                 print("no")
  370.                                                 return
  371.                                 tresult.set('')
  372.                                 testatime.set(f"平均{round(float(testtime.get())/int(testnum.get()[3:]),2)}0秒钟一题")
  373.                                 main2_nums.set(shechnum(tminnum.get(),tmaxnum.get(),main2_result.get()))
  374.                                 testnum.set("题号:"+str(int(testnum.get()[3:])+1))
  375.         except Exception as e:
  376.                 return
  377. def teststart1():
  378.         global win2,cdown,tmaxnum,tminnum,tresult,testatime,testtime,main2_nums,main2_result,timer
  379.         tmax=int(tmaxnum.get())
  380.         tmin=int(tminnum.get())
  381.         main2_nums.set(shechnum(tminnum.get(),tmaxnum.get(),main2_result.get()))
  382.         def updatetime():

  383.                 try:
  384.                         while True:
  385.                                 win2.state()
  386.                                 testtime.set(str(round(float(timer.get())-4,1)))
  387.                 except:
  388.                         return
  389.                 pass
  390.         th(updatetime)
  391.         Label(win2,text="时间:",font=("等线",14),fg="blue").place(x=10,y=50)
  392.         Label(win2,textvariable=testtime,font=("等线",14),fg="blue").place(x=50,y=50)
  393.         Label(win2,textvariable=testnum,font=("等线",14),fg="orange").place(x=120,y=50)
  394.         Label(win2,textvariable=testatime,font=("等线",14),fg="red").place(x=210,y=50)
  395.         Label(win2,text="请在此输入答案:",font=("等线",14)).place(x=10,y=130)
  396.         #buttons
  397.         Button(win2,text="提交",command=check,fg="yellow",bg="blue").place(x=20,y=220,width=170,height=40)
  398.         Button(win2,text="跳过",command=skip,fg="red",bg="orange").place(x=210,y=220,width=170,height=40)
  399.         Entry(win2,textvariable=tresult,font=("等线",24)).place(x=20,y=160,width=360,height=50)
  400. def skip():
  401.         tresult.set('')
  402.         main2_nums.set(shechnum(tminnum.get(),tmaxnum.get(),main2_result.get()))
  403. def teststart():
  404.         global win2,cdown,tmaxnum,tminnum,tresult,testatime,testtime,main2_nums,main2_result,timer
  405.         main2_nums=StringVar(win2,"3")
  406.         th(Cdown)
  407.         Label(win2,textvariable=main2_nums,font=("等线",28),fg="red").place(x=120,y=80)
  408. def main2():
  409.         global win2,main2_nums,main2_result,testnum,testtime,testatime,titlevar,tmaxnum,tminnum,tresult,timer
  410.         win2=Tk()
  411.         win2.resizable(False,False)
  412.         win2.geometry("400x280+100+120")
  413.         win2.title("24点训练器")
  414.         timer=Time()
  415.         #hidefunc
  416.         def hide():
  417.                 #检查数值
  418.                 try:
  419.                         int(tmaxnum.get())
  420.                         int(tminnum.get())
  421.                         int(main2_result.get())
  422.                         if int(tmaxnum.get())>int(tminnum.get()):
  423.                                 raise Exception("最大值小于最小值!")
  424.                 except Exception as e:
  425.                         showerror("错误",str(e))
  426.                         return
  427.                 from random import randint as r
  428.                 ma=int(tminnum.get())
  429.                 mn=int(tmaxnum.get())
  430.                 for i in range(10):
  431.                         a=r(mn,ma)
  432.                         b=r(mn,ma)
  433.                         c=r(mn,ma)
  434.                         d=r(mn,ma)
  435.                         if twp(a,b,c,d,float(main2_result.get()))[0]:
  436.                                 break
  437.                 else:
  438.                         showerror("错误","给定数值不能生成题目")
  439.                         return
  440.                
  441.                 label1.place(x=1000,y=10000)
  442.                 label2.place(x=1000,y=10000)
  443.                 label3.place(x=1000,y=10000)
  444.                 entry1.place(x=1000,y=10000)
  445.                 entry2.place(x=1000,y=10000)
  446.                 entry3.place(x=1000,y=10000)
  447.                 button1.place(x=2130,y=3418)
  448.                 button2.place(x=2130,y=3418)#不要在意乱输入的坐标
  449.                 teststart()
  450.         #StringVar
  451.         titlevar=StringVar(win2,"========24点训练场=======")
  452.         main2_nums=StringVar(win2,'')
  453.         main2_result=StringVar(win2,'')
  454.         testnum=StringVar(win2,"题号:1")
  455.         testtime=StringVar(win2,'0.00')
  456.         testatime=StringVar(win2,'平均-1秒钟一题')
  457.         tmaxnum=StringVar(win2,'1')
  458.         tminnum=StringVar(win2,'10')
  459.         main2_result=StringVar(win2,'24')
  460.         tresult=StringVar(win2,'')
  461.         #Label and Entry
  462.         main2_title=Label(win2,textvariable=titlevar,font=('等线',18))
  463.         main2_title.place(x=10,y=10)
  464.         label1=Label(win2,text="最小值:",font=('等线',15))
  465.         label1.place(x=10,y=50)
  466.         label2=Label(win2,text="最大值:",font=('等线',15))
  467.         label2.place(x=10,y=80)
  468.         label3=Label(win2,text="结果(默认为24):",font=('等线',15))
  469.         label3.place(x=10,y=110)
  470.         entry1=Entry(win2,textvariable=tmaxnum)
  471.         entry1.place(x=85,y=50,height=25,width=310)
  472.         entry2=Entry(win2,textvariable=tminnum)
  473.         entry2.place(x=85,y=80,height=25,width=310)
  474.         entry3=Entry(win2,textvariable=main2_result)
  475.         entry3.place(x=165,y=110,height=25,width=230)
  476.         #Button
  477.         button1=Button(win2,text="开始挑战!",command=hide,bg="red",fg="yellow",font=('等线',22))
  478.         button1.place(x=20,y=150,height=50,width=370)
  479.         button2=Button(win2,text="帮助",command=lambda:showinfo("帮助","老样子,先设置好最大值与最小值和结果\n接着你就可以开始挑战了,在文本框中输入你的答案,点击提交\n如果没有反应,说明你答错了,要重新输入\n若实在不会,就点击跳过吧(跳过是可耻的行为,我们一定要坚持做出来!)\n温馨提示,括号要用英文括号哦,以及不要切换至计算题目界面,程序容易崩溃!\n我的成绩是平均一题15秒钟,你呢?\n祝你使用愉快!作者:张锦轩"),bg="blue",fg="yellow",font=('等线',15))
  480.         button2.place(x=20,y=210,height=50,width=370)
  481.        
  482.         win2.mainloop()
  483. #主程序
  484. def main1():
  485.         global num1,num2,num3,num4,result,evalre
  486.         #创建窗口
  487.         win=Tk()
  488.         win.resizable(False,False)
  489.         win.geometry("350x115+100+120")
  490.         win.title("24点计算器")
  491.         #创建stringvar对象
  492.         num1=StringVar(win,"")
  493.         num2=StringVar(win,"")
  494.         num3=StringVar(win,"")
  495.         num4=StringVar(win,"")
  496.         result=StringVar(win,"请输入数字")
  497.         evalre=StringVar(win,"24")
  498.         #创建Entry对象
  499.         Entry(win,textvariable=num1).place(x=10,y=10,height=25,width=45)
  500.         Entry(win,textvariable=num2).place(x=60,y=10,height=25,width=45)
  501.         Entry(win,textvariable=num3).place(x=110,y=10,height=25,width=45)
  502.         Entry(win,textvariable=num4).place(x=160,y=10,height=25,width=45)
  503.         Entry(win,textvariable=evalre).place(x=245,y=10,height=25,width=45)
  504.         en=Entry(win,textvariable=result)
  505.         en.place(x=10,y=45,height=25,width=280)
  506.         Label(win,text='结果:').place(x=210,y=12)
  507.         en["state"]="readonly"
  508.         #创建Button对象
  509.         Button(win,text="计算",command=calc).place(x=295,y=45,height=25,width=45)
  510.         Button(win,text="清空",command=clean).place(x=295,y=10,height=25,width=45)
  511.         Button(win,text="题目生成器",command=main,bg="yellow",fg="blue").place(x=240,y=80,height=25,width=100)
  512.         Button(win,text="帮助",fg="yellow",bg="blue",command=help1).place(x=125,y=80,height=25,width=100)
  513.         Button(win,text="24点训练器",command=main2,bg="orange",fg="red").place(x=10,y=80,height=25,width=100)
  514.         win.mainloop()
  515. #运行程序
  516. if __name__ =="__main__":
  517.         main1()

复制代码

本程序使用暴力枚举算法,但计算时间也不高,基本秒算

评分

参与人数 3荣誉 +15 鱼币 +10 贡献 +6 收起 理由
cjjJasonchen + 5 + 5 + 3 真有钱啊,堆这么多千斤顶
hveagle + 5 无条件支持楼主!
python爱好者. + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2022-8-30 13:06:33 | 显示全部楼层

回帖奖励 +2 鱼币

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

使用道具 举报

发表于 2022-8-30 13:15:43 | 显示全部楼层

回帖奖励 +2 鱼币

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

使用道具 举报

发表于 2022-8-30 13:26:05 | 显示全部楼层

回帖奖励 +2 鱼币

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

使用道具 举报

发表于 2022-8-30 14:47:49 | 显示全部楼层
第182行:
except ValueError:
python说ex有错误!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-30 14:50:50 | 显示全部楼层
WHAT?? 182行是显示帮助行啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-30 14:51:54 | 显示全部楼层
我这边用3.10.0没有问题,建议检查版本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-30 15:03:24 | 显示全部楼层
hveagle 发表于 2022-8-30 14:47
第182行:
except ValueError:
python说ex有错误!


我这边用3.10.0没有问题,建议检查版本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-30 15:05:18 | 显示全部楼层
zhangjinxuan 发表于 2022-8-30 15:03
我这边用3.10.0没有问题,建议检查版本

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

使用道具 举报

发表于 2022-8-30 15:06:29 | 显示全部楼层
可是像下面
  1. >>> try:
  2.         1/0
  3. except ZeroDivisionError:
  4.         print('ZeroDivisionError')

  5.        
  6. ZeroDivisionError
  7. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-30 15:07:45 | 显示全部楼层

你是不是说错行数了,第182行可是长这样:
  1. showinfo("帮助","分别在四个文本框中输入数字,点击 计算 可计算题目正确答案\n第五个文本框是运算结果,默认为24\n感谢您的使用!作者:张锦轩")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-30 15:18:42 | 显示全部楼层
191
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-30 15:32:08 | 显示全部楼层

运行有问题吗?你是怎么操作的?我没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-30 15:43:10 | 显示全部楼层
Run
Run module
弹出了1个窗口
invalid syntax

评分

参与人数 1荣誉 +1 收起 理由
zhangjinxuan + 1 啊!没加转义!谢谢提醒!

查看全部评分

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

使用道具 举报

发表于 2022-9-3 14:03:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-9-3 14:08:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-3 14:10:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-13 21:32:05 | 显示全部楼层
现在正在策划C++版本的24点计算器...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-11 10:48:18 | 显示全部楼层
顶顶顶,还有人吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-11 12:01:11 | 显示全部楼层
没评分次数了
明天评分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 08:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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