# 1、导入模块
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import random

# 四则运算
def sizeyunsuan():
    global realanswer                        # 声明全局变量在函数内的使用
    mini = int(mixn.get())                   # 获取用户输入的最小值,并且将最小值转换成整型赋值给变量mini
    maxi = int(maxn.get())                   # 获取用户输入的最大值,并且将最大值转换成整型赋值给变量maxi
    
    x = random.randint(mini,maxi)            # 在最小值和最大值之间随机取一个数字保存在x中
    y = random.randint(mini,maxi)            # 在最小值和最大值之间随机取一个数字保存在y中
    
    typeo = random.randint(1,4)              # 在1~4之间随机取一个数字保存在typeo中
    
    # 加法
    if typeo == 1:
        code = str(x)+'+'+str(y)             # 拼接字符串为加法运算
        
        show1.insert(0,'题目为四则运算的加法') # 在show1提示框中加入提示文字
        realshow.insert(0,code) # 在题目框中加入加法运算式
        
        realanswer = x + y # 计算x和y变量值的和并保存到全局变量realanswer中
    # 减法
    elif typeo == 2:
        code = str(x)+'-'+str(y) # 拼接字符串为减法运算
        
        show1.insert(0,'题目为四则运算的减法') # 在show1提示框中加入提示文字
        realshow.insert(0,code) # 在题目框中加入减法运算式
        
        realanswer = x - y # 计算x和y变量值的差并保存到全局变量realanswer中
    # 乘法
    if typeo == 3:
        code = str(x)+'*'+str(y) # 拼接字符串为乘法运算
        
        show1.insert(0,'题目为四则运算的乘法') # 在show1提示框中加入提示文字
        realshow.insert(0,code) # 在题目框中加入乘法运算式
        
        realanswer = x * y # 计算x和y变量值的积并保存到全局变量realanswer中
    # 除法
    if typeo == 4:
        # 防止非整数
        while True:
            if x % y == 0:
                break
            else:
                x = random.randint(mini,maxi) # 在最小值和最大值之间随机取一个数字保存在x中
                y = random.randint(mini,maxi) # 在最小值和最大值之间随机取一个数字保存在y中
                
        code = str(x)+'/'+str(y) # 拼接字符串为除法运算
        
        show1.insert(0,'题目为四则运算的除法') # 在show1提示框中加入提示文字
        realshow.insert(0,code) # 在题目框中加入除法运算式
        
        realanswer = x / y # 计算x和y变量值的商并保存到全局变量realanswer中


def place():
    mini = mixn.get()
    maxi = maxn.get()
    numberi = numer.get()
    numberi = str(numberi)
    
    if maxi == '请输入整数' or mini == '请输入整数':
        messagebox.showerror('ERROR','您没有输入数值!')
    else:
        realshow.delete(0,'end')
        show1.delete(0,'end')
        show2.delete(0,'end')
        if numberi == '四则运算':
            sizeyunsuan()
        else:
            messagebox.showerror('提示','目前只能使用四则运算')
def answer():
    ansi = ans.get()
    if ansi == '请输入答案' :
        messagebox.showerror('ERROR','您没有输入答案!')
    else:
        if ansi == str(realanswer):
            show2.delete(0,'end')
            code = '答案正确'
            show2.insert(0,code)
        else:
            show2.delete(0,'end')
            code = '答案错误'
            show2.insert(0,code)

# 变量初始化
realanswer = 0

machine = tk.Tk()  # 实例化tkinter对象
machine.title('数学自动出题机')

# 在图形界面上创建标签label用以显示文字并且定位标签
ttk.Label(machine, text='输入最大值').grid(column=0,row=0)
ttk.Label(machine, text='输入最小值').grid(column=1,row=0)
ttk.Label(machine, text='选择题目类型').grid(column=2,row=0)
ttk.Label(machine, text='请输入你的答案').grid(column=0,row=3)


# 输入框
# 创建最大值输入框
maxn = tk.StringVar()
maxn.set('请输入整数')
maxenter = ttk.Entry(machine, width=16, textvariable=maxn)
maxenter.grid(column=0,row=1)
# 创建最小值输入框
mixn = tk.StringVar()
mixn.set('请输入整数')
mixenter = ttk.Entry(machine, width=16, textvariable=mixn)
mixenter.grid(column=1,row=1)
# 创建答案输入框
ans = tk.StringVar()
ans.set('请输入答案')
ansenter = ttk.Entry(machine, width=16, textvariable=ans)
ansenter.grid(column=0,row=4)

# 创建运算方法下拉框
numer = tk.StringVar()
numerChosen = ttk.Combobox(machine, width=16, textvariable=numer, state = 'readonly')
numerChosen['values']=('四则运算','一元一次方程','平方、开方','一次函数')
numerChosen.grid(column=2,row=1)
numerChosen.current(0)

# 创建按钮
# 生成题目按钮
action = ttk.Button(machine, width=12, text = '生成题目',command=place)
action.grid(column=1,row=2)
# 提交答案按钮
aw = ttk.Button(machine, width=12, text = '提交答案',command=answer)
aw.grid(column=0,row=5)

# 创建文本框
show1 = ttk.Entry(machine,show = '')
show1.grid(column=1,row=3)
show2 = ttk.Entry(machine,show = '')
show2.grid(column=1,row=4)
realshow = ttk.Entry(machine,show = '')
realshow.grid(column=1,row=5)
madeby = ttk.Entry(machine,show = '')
madeby.grid(column=2,row=4)
madeby.insert(0,'数学出题练习机')
madeby1 = ttk.Entry(machine,show = '')
madeby1.grid(column=2,row=5)
madeby1.insert(0,'made by Tom')


machine.mainloop()




# 一元一次方程
def yiyuanyici():
    print('一元一次方程')
# 平方开方
def pingfang():
    print('平方开方')
# 一次函数
def yicihanshu():
    print('一次函数')

1 条评论

  • @ 2024-3-2 19:53:55
    # 1、导入模块
    import tkinter as tk
    from tkinter import ttk
    from tkinter import messagebox
    import random
    
    # 四则运算
    def sizeyunsuan():
        global realanswer                        # 声明全局变量在函数内的使用
        mini = int(mixn.get())                   # 获取用户输入的最小值,并且将最小值转换成整型赋值给变量mini
        maxi = int(maxn.get())                   # 获取用户输入的最大值,并且将最大值转换成整型赋值给变量maxi
        
        x = random.randint(mini,maxi)            # 在最小值和最大值之间随机取一个数字保存在x中
        y = random.randint(mini,maxi)            # 在最小值和最大值之间随机取一个数字保存在y中
        
        typeo = random.randint(1,4)              # 在1~4之间随机取一个数字保存在typeo中
        
        # 加法
        if typeo == 1:
            code = str(x)+'+'+str(y)             # 拼接字符串为加法运算
            
            show1.insert(0,'题目为四则运算的加法') # 在show1提示框中加入提示文字
            realshow.insert(0,code) # 在题目框中加入加法运算式
            
            realanswer = x + y # 计算x和y变量值的和并保存到全局变量realanswer中
        # 减法
        elif typeo == 2:
            code = str(x)+'-'+str(y) # 拼接字符串为减法运算
            
            show1.insert(0,'题目为四则运算的减法') # 在show1提示框中加入提示文字
            realshow.insert(0,code) # 在题目框中加入减法运算式
            
            realanswer = x - y # 计算x和y变量值的差并保存到全局变量realanswer中
        # 乘法
        if typeo == 3:
            code = str(x)+'*'+str(y) # 拼接字符串为乘法运算
            
            show1.insert(0,'题目为四则运算的乘法') # 在show1提示框中加入提示文字
            realshow.insert(0,code) # 在题目框中加入乘法运算式
            
            realanswer = x * y # 计算x和y变量值的积并保存到全局变量realanswer中
        # 除法
        if typeo == 4:
            # 防止非整数
            while True:
                if x % y == 0:
                    break
                else:
                    x = random.randint(mini,maxi) # 在最小值和最大值之间随机取一个数字保存在x中
                    y = random.randint(mini,maxi) # 在最小值和最大值之间随机取一个数字保存在y中
                    
            code = str(x)+'/'+str(y) # 拼接字符串为除法运算
            
            show1.insert(0,'题目为四则运算的除法') # 在show1提示框中加入提示文字
            realshow.insert(0,code) # 在题目框中加入除法运算式
            
            realanswer = x / y # 计算x和y变量值的商并保存到全局变量realanswer中
    
    
    def place():
        mini = mixn.get()
        maxi = maxn.get()
        numberi = numer.get()
        numberi = str(numberi)
        
        if maxi == '请输入整数' or mini == '请输入整数':
            messagebox.showerror('ERROR','您没有输入数值!')
        else:
            realshow.delete(0,'end')
            show1.delete(0,'end')
            show2.delete(0,'end')
            if numberi == '四则运算':
                sizeyunsuan()
            else:
                messagebox.showerror('提示','目前只能使用四则运算')
    def answer():
        ansi = ans.get()
        if ansi == '请输入答案' :
            messagebox.showerror('ERROR','您没有输入答案!')
        else:
            if ansi == str(realanswer):
                show2.delete(0,'end')
                code = '答案正确'
                show2.insert(0,code)
            else:
                show2.delete(0,'end')
                code = '答案错误'
                show2.insert(0,code)
    
    # 变量初始化
    realanswer = 0
    
    machine = tk.Tk()  # 实例化tkinter对象
    machine.title('数学自动出题机')
    machine.geometry("1200x800+300+300")
    # machine.maxsize("1200x800")
    # machine.minsize("1200x800")
    
    # 在图形界面上创建标签label用以显示文字并且定位标签
    ttk.Label(machine, text='输入最大值').place(x=10,y=10)
    ttk.Label(machine, text='输入最小值').place(x=10,y=110)
    ttk.Label(machine, text='选择题目类型').place(x=10,y=210)
    ttk.Label(machine, text='请输入你的答案').place(x=10,y=310)
    
    
    # 输入框
    # 创建最大值输入框
    maxn = tk.StringVar()
    maxn.set('请输入整数')
    maxenter = ttk.Entry(machine, width=16, textvariable=maxn)
    maxenter.place(x=110,y=10)
    # 创建最小值输入框
    mixn = tk.StringVar()
    mixn.set('请输入整数')
    mixenter = ttk.Entry(machine, width=16, textvariable=mixn)
    mixenter.place(x=110,y=110)
    # 创建答案输入框
    ans = tk.StringVar()
    ans.set('请输入答案')
    ansenter = ttk.Entry(machine, width=16, textvariable=ans)
    ansenter.place(x=110,y=310)
    
    # 创建运算方法下拉框
    numer = tk.StringVar()
    numerChosen = ttk.Combobox(machine, width=16, textvariable=numer, state = 'readonly')
    numerChosen['values']=('四则运算','一元一次方程','平方、开方','一次函数')
    numerChosen.place(x=110,y=210)
    numerChosen.current(0)
    
    # 创建按钮
    # 生成题目按钮
    action = ttk.Button(machine, width=12, text = '生成题目',command=place)
    action.place(x=10,y=510)
    # 提交答案按钮
    aw = ttk.Button(machine, width=12, text = '提交答案',command=answer)
    aw.place(x=10,y=610)
    
    # 创建文本框
    show1 = ttk.Entry(machine,show = '')
    show1.place(x=110,y=510)
    show2 = ttk.Entry(machine,show = '')
    show2.place(x=110,y=610)
    realshow = ttk.Entry(machine,show = '')
    realshow.place(x=110,y=710)
    
    
    
    
    machine.mainloop()
    
    
    
    
    # 一元一次方程
    def yiyuanyici():
        print('一元一次方程')
    # 平方开方
    def pingfang():
        print('平方开方')
    # 一次函数
    def yicihanshu():
        print('一次函数')
        
    
    
    • 1