计算题生成器(脱式、方程计算)第六代

源码

老样子,先上源码。

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()  
 
 

解析

一、整体功能概述

这个程序的主要目的是生成不同类型的数学题目,包括计算题、一元方程和二元方程,并通过图形界面展示给用户。用户可以通过点击“生成题目”按钮来获取新的题目,还可以点击“重新生成”按钮来重新获取题目。

二、函数功能分析

  1. calculate函数

    • 这个函数接受四个参数min_val1max_val1min_val2max_val2,用于指定两个随机数的取值范围。

    • 在函数内部,首先使用random.uniform 函数生成两个带有两位小数的随机数num1num2,然后对这两个数进行一些计算得到num3num4

    • 最后将这些数组合成一个字符串表达式,形式为num1×num2+num3×num4并返回。这个表达式可以作为计算题的题目内容。

  2. equation_one函数

    • 此函数用于生成一元方程。它首先随机生成系数ab,并且确保a不为0。

    • 根据ab的正负情况确定符号,然后根据b的值构建一元方程的字符串表示。如果b为0,方程形式为±ax = 0;如果b不为0,方程形式为±ax ± b = 0。最后返回这个方程字符串。

  3. equation_two函数

    • 该函数的目标是生成二元一次方程ax + by = c

    • 它随机生成系数abc,确保ab不为0。

    • 同样根据系数的正负确定符号,然后构建二元方程的字符串表示并返回。

  4. topic函数

    • 这个函数在全局范围内定义了多个变量A_eB_e等。

    • 它调用calculate函数生成计算题的表达式,调用equation_oneequation_two函数分别生成一元方程和二元方程,并将结果赋值给相应的变量。

  5. up_date函数

    • 它首先调用topic函数获取新的题目内容。

    • 然后更新一系列的Label组件(label1 - label9)的文本内容,将新生成的题目显示在图形界面上,使用的字体是“微软雅黑”,字号为15。

  6. butt函数

    • 这个函数用于处理按钮的点击事件。当点击按钮时,它首先销毁原有的labelbutton组件。

    • 然后创建一个新的按钮“重新生成”,并将其放置在坐标(0,0)处。

    • 最后使用root.after 函数在0毫秒后调用up_date函数来更新题目内容。

三、图形界面部分(tkinter相关)

  1. 主窗口设置
    • 通过root = Tk()创建了一个Tk对象,这是tkinter库的主窗口。
    • 设置了窗口的标题为“题目生成器V6.0”,并且通过root.geometry 设置了窗口的大小为500x500,位置为(100,100)
  2. 组件布局
    • 创建了多个Label组件(label1 - label9)用于显示不同类型的题目,并且通过place方法设置了它们在窗口中的位置。
    • 还有一个初始的label组件显示“欢迎使用题目生成器!”和一个button组件“生成题目”,当点击“生成题目”按钮时会触发butt函数来生成并显示题目。

总体

总体而言,这个程序通过合理地组织函数和利用tkinter库构建了一个简单但实用的题目生成器,能够满足生成多种数学题目的需求,并提供了基本的用户交互功能。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值