源码
老样子,先上源码。
import random
from tkinter import *
#计算题
def calculate(min_val1, max_val1, min_val2, max_val2):
num1 = round(random.uniform(min_val1, max_val1), 2)
num2 = round(random.uniform(min_val2, max_val2), 2)
num3 = num1
num4 = round(100 - num2, 2)
expr = str(num1)+'×'+str(num2)+'+'+str(num3)+'×'+str(num4)
return expr
#一元方程
def equation_one():
a = random.randint(-10, 10)
if a == 0:
a = random.randint(1, 10)
b = random.randint(-10, 10)
sign_a = '-' if a < 0 else ''
sign_b = '-' if b < 0 else '+'
if b == 0:
equation = f"{sign_a}{abs(a)}x = 0"
else:
equation = f"{sign_a}{abs(a)}x {sign_b} {abs(b)} = 0"
return equation
#二元方程
def equation_two():
# 生成二元一次方程 ax + by = c
a = random.randint(-10, 10)
if a == 0:
a = random.randint(1, 10)
b = random.randint(-10, 10)
if b == 0:
b = random.randint(1, 10)
c = random.randint(-10, 10)
sign_a = '-' if a < 0 else ''
sign_b = '-' if b < 0 else '+'
sign_c = '-' if c < 0 else '+'
equation = f"{sign_a}{abs(a)}x {sign_b} {abs(b)}y {sign_c} {abs(c)} = 0"
return equation
def topic():
global A_e, B_e, C_e, D_g, E_g,X_o_a, Y_o_a, X_t_a, Y_t_a;
A_e = calculate(10, 100, 10, 100)
B_e = calculate(10, 100, 10, 100)
C_e = calculate(10, 100, 10, 100)
D_g = calculate(10, 100, 10, 130)
E_g = calculate(10, 100, 10, 130)
X_o_a = equation_one()
Y_o_a = equation_one()
X_t_a = equation_two()
Y_t_a = equation_two()
def up_date():
date = topic()
label1.config(text = A_e, font = ("微软雅黑", 15))
label2.config(text = B_e, font = ("微软雅黑", 15))
label3.config(text = C_e, font = ("微软雅黑", 15))
label4.config(text = D_g, font = ("微软雅黑", 15))
label5.config(text = E_g, font = ("微软雅黑", 15))
label6.config(text = X_o_a, font = ("微软雅黑", 15))
label7.config(text = Y_o_a, font = ("微软雅黑", 15))
label8.config(text = X_t_a, font = ("微软雅黑", 15))
label9.config(text = Y_t_a, font = ("微软雅黑", 15))
def butt():
label.destroy()
button.destroy()
button1 = Button(root, text='重新生成', width = 20, height = 1, command = butt)
button1.place(x = 0, y = 0)
timer = root.after(0, up_date)
root = Tk()
root.title(" 题目生成器 V6.0")
root.geometry("500x500+100+100")
date = topic()
label1 = Label(root, text=' ', font = ("微软雅黑", 15))
label1.place(x = 0, y = 30)
label2 = Label(root, text=' ', font = ("微软雅黑", 15))
label2.place(x = 0, y = 60)
label3 = Label(root, text=' ', font = ("微软雅黑", 15))
label3.place(x = 0, y = 90)
label4 = Label(root, text=' ', font = ("微软雅黑", 15))
label4.place(x = 0, y = 120)
label5 = Label(root, text=' ', font = ("微软雅黑", 15))
label5.place(x = 0, y = 150)
label6 = Label(root, text=' ', font = ("微软雅黑", 15))
label6.place(x = 0, y = 210)
label7 = Label(root, text=' ', font = ("微软雅黑", 15))
label7.place(x = 0, y = 240)
label8 = Label(root, text=' ', font = ("微软雅黑", 15))
label8.place(x = 0, y = 300)
label9 = Label(root, text=' ', font = ("微软雅黑", 15))
label9.place(x = 0, y = 330)
label = Label(root, text='欢迎使用题目生成器!', font = ('微软雅黑', 20))
button = Button(root, text='生成题目', font = ('微软雅黑', 15), command = butt)
label.place(x = 120, y = 150)
button.place(x = 190, y = 200)
root.mainloop()
解析
一、整体功能概述
这个程序的主要目的是生成不同类型的数学题目,包括计算题、一元方程和二元方程,并通过图形界面展示给用户。用户可以通过点击“生成题目”按钮来获取新的题目,还可以点击“重新生成”按钮来重新获取题目。
二、函数功能分析
-
calculate
函数-
这个函数接受四个参数
min_val1
、max_val1
、min_val2
和max_val2
,用于指定两个随机数的取值范围。 -
在函数内部,首先使用
random.uniform
函数生成两个带有两位小数的随机数num1
和num2
,然后对这两个数进行一些计算得到num3
和num4
。 -
最后将这些数组合成一个字符串表达式,形式为
num1×num2+num3×num4
并返回。这个表达式可以作为计算题的题目内容。
-
-
equation_one
函数-
此函数用于生成一元方程。它首先随机生成系数
a
和b
,并且确保a
不为0。 -
根据
a
和b
的正负情况确定符号,然后根据b
的值构建一元方程的字符串表示。如果b
为0,方程形式为±ax = 0
;如果b
不为0,方程形式为±ax ± b = 0
。最后返回这个方程字符串。
-
-
equation_two
函数-
该函数的目标是生成二元一次方程
ax + by = c
。 -
它随机生成系数
a
、b
和c
,确保a
和b
不为0。 -
同样根据系数的正负确定符号,然后构建二元方程的字符串表示并返回。
-
-
topic
函数-
这个函数在全局范围内定义了多个变量
A_e
、B_e
等。 -
它调用
calculate
函数生成计算题的表达式,调用equation_one
和equation_two
函数分别生成一元方程和二元方程,并将结果赋值给相应的变量。
-
-
up_date
函数-
它首先调用
topic
函数获取新的题目内容。 -
然后更新一系列的
Label
组件(label1
-label9
)的文本内容,将新生成的题目显示在图形界面上,使用的字体是“微软雅黑”,字号为15。
-
-
butt
函数-
这个函数用于处理按钮的点击事件。当点击按钮时,它首先销毁原有的
label
和button
组件。 -
然后创建一个新的按钮“重新生成”,并将其放置在坐标
(0,0)
处。 -
最后使用
root.after
函数在0毫秒后调用up_date
函数来更新题目内容。
-
三、图形界面部分(tkinter
相关)
- 主窗口设置
- 通过
root = Tk()
创建了一个Tk
对象,这是tkinter
库的主窗口。 - 设置了窗口的标题为“题目生成器V6.0”,并且通过
root.geometry
设置了窗口的大小为500x500
,位置为(100,100)
。
- 通过
- 组件布局
- 创建了多个
Label
组件(label1
-label9
)用于显示不同类型的题目,并且通过place
方法设置了它们在窗口中的位置。 - 还有一个初始的
label
组件显示“欢迎使用题目生成器!”和一个button
组件“生成题目”,当点击“生成题目”按钮时会触发butt
函数来生成并显示题目。
- 创建了多个
总体
总体而言,这个程序通过合理地组织函数和利用tkinter
库构建了一个简单但实用的题目生成器,能够满足生成多种数学题目的需求,并提供了基本的用户交互功能。