Pondělí , 23 Červen 2025
Domů Počítače a internet Matematický trénink Windows program
Počítače a internetProgramování

Matematický trénink Windows program

blank
blank

Tento program pro Windows vytváří jednoduchou uživatelskou aplikaci pro matematický trénink.

Uživatel si může vybrat, kolik úloh chce vyřešit, a jak velký bude maximální možný výsledek každé úlohy.

Dále si může vybrat druh aritmetické operace, kterou chce trénovat, tj. sčítání, odečítání, násobení nebo dělení.

Po stisku tlačítka „TESTOVAT“ program vygeneruje požadované množství úloh s náhodně vybranými čísly vzhledem k vybraným parametrům.

Uživatel poté tyto úlohy postupně řeší a potvrdí tlačítkem ‚Odpovědět‘. Po potvrzení odpovědi se zobrazí další úloha.

Po vyřešení všech úloh se zobrazí skóre uživatele, které ukazuje, kolik úloh řešil správně.

Poté má uživatel možnost, pokud mu aplikace pomohla, přispět autorovi programu prostřednictvím tlačítka „Přispějte zde“, které otevře webovou stránku pro příspěvky.

Náhled programu:

blank

Program je napsaný v Pythonu, chcete-li tento program dále vyvíjet nebo upravovat, níže poskytuji celý kód.

				
					import tkinter as tk
import random
import webbrowser

root = tk.Tk()
root.title("Matematický tréning & PetrPikora.com")
root.geometry('450x380')

operation_dict = {
    "+": "Sčítání",
    "-": "Odečítání",
    "x": "Násobení",
    ":": "Dělení"
}

global_vars = {
    "current_task": 0,
    "tasks": [],
    "results": [],
    "operation_key": "+"
}

def generate_task(num_task, max_res, operation):
    tasks = []
    for i in range(num_task):
        if operation == "+":
            a = random.randint(1, max_res - 1)
            b = random.randint(1, max_res - a)
            tasks.append((a, b, a + b))
        elif operation == "-":
            a = random.randint(2, max_res)
            b = random.randint(1, a - 1)
            tasks.append((a, b, a - b))
        elif operation == "x":
            a = random.randint(1, max_res)
            b = random.randint(1, max_res // a)
            tasks.append((a, b, a * b))
        elif operation == ":":
            b = random.randint(1, max_res)
            a = b * random.randint(1, max_res // b)
            tasks.append((a, b, a / b))
    return tasks

def check_task():
    ans = float(entry.get())
    entry.delete(0, 'end')
    global_vars['results'].append(round(ans, 2) == round(global_vars['tasks'][global_vars['current_task']][2], 2))
    global_vars['current_task'] += 1
    if global_vars['current_task'] < len(global_vars['tasks']):
        task_label.config(text=f"{global_vars['tasks'][global_vars['current_task']][0]} {global_vars['operation_key']} {global_vars['tasks'][global_vars['current_task']][1]} = ?")
    else:
        result_label.config(text=f"Vaše skóre je: {global_vars['results'].count(True)}/{len(global_vars['tasks'])}")
        task_label.config(text="")
        entry.config(state='disabled')
        check_button.config(state='disabled')

def start_test():
    num_task = int(num_entry.get())
    max_res = int(range_entry.get())
    operation = operation_var.get()
    operation_key = [k for k, v in operation_dict.items() if v == operation][0]
    global_vars['operation_key'] = operation_key

    global_vars['tasks'] = generate_task(num_task, max_res, operation_key)
    global_vars['current_task'] = 0
    global_vars['results'] = []

    task_label.config(text=f"{global_vars['tasks'][global_vars['current_task']][0]} {operation_key} {global_vars['tasks'][global_vars['current_task']][1]} = ?")
    result_label.config(text="")

    entry.bind("<Return>", lambda event: check_task())
    check_button.config(state='normal')
    entry.config(state='normal')

num_label = tk.Label(root, text="Počet úloh:", font=('Helvetica', 14))
num_label.pack()
num_entry = tk.Entry(root, font=('Helvetica', 14))
num_entry.pack()

range_label = tk.Label(root, text="Maximální výsledek:", font=('Helvetica', 14))
range_label.pack()
range_entry = tk.Entry(root, font=('Helvetica', 14))
range_entry.pack()

operation_var = tk.StringVar(root)
operation_var.set("Sčítání")

operation_menu = tk.OptionMenu(root, operation_var, *operation_dict.values())
operation_menu.config(font=('Helvetica', 14))
operation_menu.pack()

start_button = tk.Button(root, text="TESTOVAT", command=start_test, font=('Helvetica', 14))
start_button.pack()

task_label = tk.Label(root, text="", font=('Helvetica', 14))
task_label.pack()

entry = tk.Entry(root, state='disabled', font=('Helvetica', 14))
entry.pack()

result_label = tk.Label(root, text="", font=('Helvetica', 14))
result_label.pack()

check_button = tk.Button(root, text='Odpovědět', command=check_task, state='disabled', font=('Helvetica', 14))
check_button.pack()
def open_web():
    webbrowser.open('https://www.paypal.com/paypalme/petrpikora')

help_label = tk.Label(root, text="Pomohl vám tento program?", font=('Helvetica', 8))
help_label.pack()

help_button = tk.Button(root, text="Přispějte zde", command=open_web, font=('Helvetica', 8))
help_button.pack()

root.mainloop()
				
			

A zde ještě jedna varianta doplněná o vykreslení posledních 10 výsledků v grafu:

				
					import tkinter as tk
import random
import webbrowser
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

root = tk.Tk()
root.title("Matematický tréning & PetrPikora.com")
root.geometry('600x600')

operation_dict = {
    "+": "Sčítání",
    "-": "Odečítání",
    "x": "Násobení",
    ":": "Dělení"
}

global_vars = {
    "current_task": 0,
    "tasks": [],
    "results": [],
    "operation_key": "+",
    "prev_results": []
}

figure = plt.Figure(figsize=(6, 2), dpi=100)
ax = figure.add_subplot(111)
chart_type = FigureCanvasTkAgg(figure, root)
chart_type.get_tk_widget().pack(side=tk.BOTTOM)

def update_graph():
    ax.clear()
    x_data = range(len(global_vars["prev_results"]))
    y_data = global_vars["prev_results"]
    ax.bar(x_data, y_data)
    chart_type.draw()

def generate_task(num_task, max_res, operation):
    tasks = []
    for i in range(num_task):
        if operation == "+":
            a = random.randint(1, max_res - 1)
            b = random.randint(1, max_res - a)
            tasks.append((a, b, a + b))
        elif operation == "-":
            a = random.randint(2, max_res)
            b = random.randint(1, a - 1)
            tasks.append((a, b, a - b))
        elif operation == "x":
            a = random.randint(1, max_res)
            b = random.randint(1, max_res // a)
            tasks.append((a, b, a * b))
        elif operation == ":":
            b = random.randint(1, max_res)
            a = b * random.randint(1, max_res // b)
            tasks.append((a, b, a / b))
    return tasks

def check_task():
    ans = float(entry.get())
    entry.delete(0, 'end')
    global_vars['results'].append(round(ans, 2) == round(global_vars['tasks'][global_vars['current_task']][2], 2))
    global_vars['current_task'] += 1
    if global_vars['current_task'] < len(global_vars['tasks']):
        task_label.config(text=f"{global_vars['tasks'][global_vars['current_task']][0]} {global_vars['operation_key']} {global_vars['tasks'][global_vars['current_task']][1]} = ?")
    else:
        correct_answers = global_vars['results'].count(True)
        success_rate = (correct_answers / len(global_vars['results'])) * 100  # compute success rate in percentage
        global_vars["prev_results"].append(success_rate)  # save the success rate instead of the raw score
        if len(global_vars["prev_results"]) > 10:
            global_vars["prev_results"].pop(0)
        result_label.config(text=f"Vaše úspěšnost je: {success_rate}%")
        task_label.config(text="")
        entry.config(state='disabled')
        check_button.config(state='disabled')
        update_graph()

def start_test():
    num_task = int(num_entry.get())
    max_res = int(range_entry.get())
    operation = operation_var.get()
    operation_key = [k for k, v in operation_dict.items() if v == operation][0]
    global_vars['operation_key'] = operation_key

    global_vars['tasks'] = generate_task(num_task, max_res, operation_key)
    global_vars['current_task'] = 0
    global_vars['results'] = []

    task_label.config(text=f"{global_vars['tasks'][global_vars['current_task']][0]} {operation_key} {global_vars['tasks'][global_vars['current_task']][1]} = ?")
    result_label.config(text="")

    entry.bind("<Return>", lambda event: check_task())
    check_button.config(state='normal')
    entry.config(state='normal')

num_label = tk.Label(root, text="Počet úloh:", font=('Helvetica', 14))
num_label.pack()
num_entry = tk.Entry(root, font=('Helvetica', 14))
num_entry.pack()

range_label = tk.Label(root, text="Maximální výsledek:", font=('Helvetica', 14))
range_label.pack()
range_entry = tk.Entry(root, font=('Helvetica', 14))
range_entry.pack()

operation_var = tk.StringVar(root)
operation_var.set("Sčítání")

operation_menu = tk.OptionMenu(root, operation_var, *operation_dict.values())
operation_menu.config(font=('Helvetica', 14))
operation_menu.pack()

start_button = tk.Button(root, text="Začít Test", command=start_test, font=('Helvetica', 14))
start_button.pack()

task_label = tk.Label(root, text="", font=('Helvetica', 14))
task_label.pack()

entry = tk.Entry(root, state='disabled', font=('Helvetica', 14))
entry.pack()

result_label = tk.Label(root, text="", font=('Helvetica', 14))
result_label.pack()

check_button = tk.Button(root, text='Odpovědět', command=check_task, state='disabled', font=('Helvetica', 14))
check_button.pack()
def open_web():
    webbrowser.open('https://www.paypal.com/paypalme/petrpikora')

help_label = tk.Label(root, text="Pomohl vám tento program?", font=('Helvetica', 8))
help_label.pack()

help_button = tk.Button(root, text="Přispějte zde", command=open_web, font=('Helvetica', 8))
help_button.pack()

root.mainloop()
				
			
blank

Zanechte komentář

Napsat komentář

Související články

blank
ProgramováníStrojové učeníUmělá inteligence

Neuromorfní čipy vs. GPU/TPU

Top články Neuromorfní čipy vs. GPU/TPU 19. 6. 2025 Edge-AI v IoT:...

blank
Online výpočtyPočítače a internetReklama a marketing

Fake Live Notification Pop-up

🔮 Generátor Fake Notifikace (Elementor-ready) 🔮 Generátor Fake Notifikace Zprávy (jedna na...

blank
Online výpočtyPočítače a internetReklama a marketing

Generátor HTML tlačítek

Generátor HTML tlačítek Generátor HTML tlačítek Text tlačítka Odkaz (URL) Barva pozadí...

blank
Online výpočtyPočítače a internetReklama a marketing

Simulátor návštěvnosti při zlepšení SEO pozice

📈 Simulátor růstu návštěvnosti dle pozice ve vyhledávání 📈 Simulátor návštěvnosti při...