Github项目地址

 

解题思路描述:

(1) 思考如何随机生成四则运算表达式

(2) 查阅相关博客,了解效能分析所用工具

(3) 学习所用到的类库

函数说明:

  def s() #按钮事件,判断整数部分答案是否正确

  def s1() #按钮事件,判断真分数部分答案是否正确

  def s2() #按钮事件,关闭窗口

  def f() #计算整数部分的算式及答案 

  def f1() #计算真分数部分的算式及答案 

测试结果:

初始:

正确:

错误:

代码:

import tkinter
import random
from fractions import Fraction

m=['+','-','×','÷']
nn='0'

window = tkinter.Tk()
window.title('四则运算')
window.geometry('300x150')
m1=tkinter.StringVar()
m1.set('')
m2=tkinter.StringVar()
m2.set('')
m3=tkinter.StringVar()
m3.set('')
m4=tkinter.StringVar()
m4.set('')
name=tkinter.Label(text='算式:',justify=tkinter.RIGHT,width=80)
name.place(x=5,y=5,width=80,height=20)
m1name=tkinter.Label(width=80,textvariable=m1)
m1name.place(x=60,y=5,width=80,height=20)
en=tkinter.Entry(width=80,textvariable=m3)
en.place(x=180,y=5,width=80,height=20)
name2=tkinter.Label(text='结果:',justify=tkinter.RIGHT,width=80)
name2.place(x=5,y=30,width=80,height=20)
m2name=tkinter.Label(width=80,textvariable=m2)
m2name.place(x=60,y=30,width=80,height=20)
name3=tkinter.Label(text='答案:',justify=tkinter.RIGHT,width=80)
name3.place(x=5,y=60,width=80,height=20)
m4name=tkinter.Label(width=80,textvariable=m4)
m4name.place(x=75,y=60,width=50,height=20)

def s():
    b['text']='下一题'

    m1.set('')
    m2.set('')
    m3.set('')
    m4.set('')
    mm = f()
    a = mm
    def g(a):
        nn = en.get()
        if str(nn) == str(mm):
            m2.set('正确')
        else:
            m2.set('错误')
            m4.set(mm)
    en.bind('<Key-Return>', g)
def s1():
    b['text'] = '开始'
    b2['text']='下一题'
    m1.set('')
    m2.set('')
    m3.set('')
    m4.set('')
    mm = f2()
    a=mm
    def g(a):
        nn = en.get()
        if str(nn) == str(mm):
            m2.set('正确')
        else:
            m2.set('错误')
            m4.set(mm)
    en.bind('<Key-Return>', g)

def s2():
    window.destroy()
b=tkinter.Button(text='开始',command=s)
b.place(x=60,y=90,width=50,height=20)

b1=tkinter.Button(text='关闭',command=s2)
b1.place(x=180,y=90,width=50,height=20)

def f():
    f=random.randint(0,3)
    n1=random.randint(1,10)
    n2=random.randint(1,10)
    r = 0
    if f==0:
        r=n1+n2
    elif f==1:
        n1,n2=max(n1,n2),min(n1,n2)
        r=n1-n2
    elif f==2:
        r=n1*n2
    elif f==3:
        if n1==n2:
            r=1
        else:
            n1, n2 = max(n1, n2), min(n1, n2)
            if n2==1:
                r=n1
            else:
                while n1 % n2 != 0:
                    n1 = random.randint(1, 10)
                    n2 = random.randint(1, 10)
                    n1, n2 = max(n1, n2), min(n1, n2)
                    r = int(n1 / n2)
    a=str(n1)+str(m[f])+str(n2)+'='
    m1.set(a)
    return r

def f2():
    q = []
    f = random.randint(0, 3)
    t1 = random.randint(0, 20)
    t2 = random.randint(t1, 20)
    a = Fraction(t1, t2)
    t1 = random.randint(0, 20)
    t2 = random.randint(t1, 20)
    b = Fraction(t1, t2)
    if f==0:  # 加法
        q.append(a + b)
        q.append(str(a)+m[f]+str(b))
        m1.set(q[1])
        return q[0]
    elif f==1:  # 减法
        if a < b:
            tm = a
            a = b
            b = tm
        q.append(a - b)
        q.append(str(a) + m[f] + str(b))
        m1.set(q[1])
        return q[0]
    elif f==2:  # 乘法
        q.append(a * b)
        q.append(str(a) + m[f] + str(b))
        m1.set(q[1])
        return q[0]
    else:  # 除法
        c = Fraction(a, b)
        q.append(str(c))
        q.append(str(a) + m[f] + str(b))
        m1.set(q[1])
        return q[0]

window.mainloop()

性能分析:

这个程序通过使用cProfile和time模块来测试程序的性能