欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python實(shí)現(xiàn)小學(xué)生算術(shù)自動(dòng)出題工具

 更新時(shí)間:2025年05月13日 09:47:12   作者:花小姐的春天  
這篇文章主要為大家詳細(xì)介紹了使用Python實(shí)現(xiàn)小學(xué)生算術(shù)自動(dòng)出題工具,支持四種題型自由組合,自動(dòng)去重,還能導(dǎo)出帶答案的Word文檔,需要的可以了解下

昨天加完班剛躺下,手機(jī)突然"叮咚"一聲。我瞇著眼劃開(kāi)屏幕,嫂子發(fā)來(lái)?xiàng)l59秒的語(yǔ)音:"花花啊,你侄子數(shù)學(xué)最近不好,計(jì)算題總出錯(cuò),想多練練,但每天手寫(xiě)出題太費(fèi)時(shí)間!從網(wǎng)上找的題目好多都要收費(fèi),我手抄了三天實(shí)在扛不住了,你們程序員不是會(huì)搞什么自動(dòng)化嗎?幫幫忙?。?quot;

為了挽救嫂子的家庭幸福,也出于對(duì)小侄子的關(guān)心,我回復(fù)了一個(gè)ok,抄起電腦就開(kāi)始噼里啪啦敲代碼...

代碼比想象中簡(jiǎn)單的多

效果圖

先給大伙看最終效果:

支持四種題型自由組合,自動(dòng)去重,還能導(dǎo)出帶答案的Word文檔,直接打印就能用。

實(shí)現(xiàn)思路

核心代碼其實(shí)就三大塊:

1. 題目生成器

def generate_question(selected_operations):
    operators = selected_operations
    num1 = random.randint(1, 100)
    num2 = random.randint(1, 100)
    operator = random.choice(operators)
    
    # 確保生成的題目符合條件
    if operator == '+':
        return num1, operator, num2, num1 + num2
    elif operator == '-':
        while num2 > num1:  # 保證減法不為負(fù)數(shù)
            num1 ,num2 = num2 ,num1
        return num1, operator, num2, num1 - num2
    elif operator == '*':
        return num1, '×', num2, num1 * num2
    elif operator == '/':
        num1 = random.randint(1, 100) * random.randint(1, 10)  # 確保能整除
        num2 = random.randint(1, 10)
        return num1, '÷', num2, num1 // num2

# 生成題目的函數(shù)
def generate_questions(quantity, selected_operations):
    questions = []
    answers = []
    
    for i in range(quantity):
        num1, operator, num2, answer = generate_question(selected_operations)
        question = f"{num1} {operator} {num2} = "
        questions.append(question)
        answers.append(f"{question} {answer}")
    print(len(questions),len(answers))
    return questions, answers

重點(diǎn)細(xì)節(jié):

  • 減法自動(dòng)交換數(shù)字避免負(fù)數(shù)(小學(xué)生還沒(méi)學(xué)負(fù)數(shù)呢?。?/li>
  • 除法確保能整除

2. 把題目生成Word

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.section import WD_SECTION_START

def save_to_word(questions, answers, filename="小學(xué)生計(jì)算題.docx"):
    doc = Document()
    
    # 添加數(shù)學(xué)題目標(biāo)題
    title = doc.add_heading('數(shù)學(xué)題目', 0)
    title.alignment = WD_ALIGN_PARAGRAPH.CENTER

    # 插入"連續(xù)分節(jié)",設(shè)置4欄,題目區(qū)域都屬于這一節(jié)
    section = doc.add_section(start_type=WD_SECTION_START.CONTINUOUS)
    sectPr = section._sectPr
    cols = sectPr.xpath('./w:cols')[0]
    cols.set('num', '4')

    # 添加題目?jī)?nèi)容
    for q in questions:
        p = doc.add_paragraph(q)
        p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT  # 左對(duì)齊

    # 插入一個(gè)新的頁(yè)面,用新節(jié)保持正確格式
    doc.add_page_break()

    # 添加答案標(biāo)題
    answer_title = doc.add_heading('答案', 0)
    answer_title.alignment = WD_ALIGN_PARAGRAPH.CENTER

    # 插入新的"連續(xù)分節(jié)",設(shè)置4欄,答案區(qū)域也屬于這一節(jié)
    section = doc.add_section(start_type=WD_SECTION_START.CONTINUOUS)
    sectPr = section._sectPr
    cols = sectPr.xpath('./w:cols')[0]
    cols.set('num', '4')

    # 添加答案內(nèi)容
    for a in answers:
        p = doc.add_paragraph(a)
        p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT

    doc.save(filename)

為了給嫂子節(jié)省打印前,這里用了Word的分欄功能,一行四道題目。

3. GUI界面(假裝專(zhuān)業(yè)的操作面板)

import tkinter as tk
from tkinter import messagebox

# GUI界面
def on_generate():
    try:
        quantity = int(entry_quantity.get())
        selected_operations = []
        
        if var_add.get():
            selected_operations.append('+')
        if var_sub.get():
            selected_operations.append('-')
        if var_mul.get():
            selected_operations.append('*')
        if var_div.get():
            selected_operations.append('/')
        
        if not selected_operations:
            selected_operations = 'All'
        
        questions, answers = generate_questions(quantity, selected_operations)
        save_to_word(questions, answers)
        
    except ValueError:
        messagebox.showerror("輸入錯(cuò)誤", "請(qǐng)輸入有效的題目數(shù)量")

# 創(chuàng)建主窗口
root = tk.Tk()
root.title("小學(xué)生出題工具")
root.geometry("400x350")  
root.config(bg="#f5f5f5")  

label_quantity = tk.Label(root, text="請(qǐng)輸入題目數(shù)量:", font=("微軟雅黑", 12), bg="#f5f5f5")
label_quantity.grid(row=0, column=0, padx=20, pady=10, sticky="w")

entry_quantity = tk.Entry(root, font=("微軟雅黑", 12), width=15)
entry_quantity.insert(0, "100")
entry_quantity.grid(row=0, column=1, padx=20, pady=10)

label_operations = tk.Label(root, text="請(qǐng)選擇題目類(lèi)型:", font=("微軟雅黑", 12), bg="#f5f5f5")
label_operations.grid(row=1, column=0, padx=20, pady=10, sticky="w")

var_add = tk.BooleanVar()
var_sub = tk.BooleanVar()
var_mul = tk.BooleanVar()
var_div = tk.BooleanVar()

check_add = tk.Checkbutton(root, text="加法", variable=var_add, font=("微軟雅黑", 12))
check_add.grid(row=2, column=0, padx=20, sticky="w")

check_sub = tk.Checkbutton(root, text="減法", variable=var_sub, font=("微軟雅黑", 12))
check_sub.grid(row=3, column=0, padx=20, sticky="w")

check_mul = tk.Checkbutton(root, text="乘法", variable=var_mul, font=("微軟雅黑", 12))
check_mul.grid(row=4, column=0, padx=20, sticky="w")

check_div = tk.Checkbutton(root, text="除法", variable=var_div, font=("微軟雅黑", 12))
check_div.grid(row=5, column=0, padx=20, sticky="w")

button_generate = tk.Button(root, text="生成題目", command=on_generate, font=("微軟雅黑", 14), bg="#4CAF50", fg="white")
button_generate.grid(row=6, column=0, columnspan=2, pady=40)

root.mainloop()

設(shè)計(jì)心得:

  • grid布局比pack更適合這種規(guī)整的界面
  • 默認(rèn)生成100道題目,小侄子看了更開(kāi)心

沒(méi)想到栽在這些小細(xì)節(jié)上

  • 侄子說(shuō)除不盡的計(jì)算題看不懂
  • 減法為什么有負(fù)數(shù),我們還沒(méi)學(xué)負(fù)數(shù)
  • 乘號(hào)寫(xiě)成*,除號(hào)寫(xiě)成/結(jié)果被侄子吐槽"和作業(yè)本長(zhǎng)得不一樣

最絕的是加了個(gè)一鍵導(dǎo)出答案,嫂子現(xiàn)在每天把題目和答案分開(kāi)打印,侄子做完自己核對(duì),徹底解放家長(zhǎng)!

到此這篇關(guān)于使用Python實(shí)現(xiàn)小學(xué)生算術(shù)自動(dòng)出題工具的文章就介紹到這了,更多相關(guān)Python自動(dòng)出題工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論