Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 19.04.2023
Сообщений: 8

Создаю простенькую программу по математике

19.04.2023, 20:58. Показов 1533. Ответов 15

Студворк — интернет-сервис помощи студентам
Здравствуйте!
В первый раз создаю программу на питоне, использую библиотеку Tkinker.
На данный момент сделал основное окно с текстом и 2 кнопками(1-с теорией. 2-с практикой), в практике хочу чтоб было несколько легких примеров с умножением, в котором значения постоянно меняются с помощью рандома.
хочу сделать так чтоб когда человек прорешает всё и ведет ответы в поле ввода, после нажимает на кнопку "узнать результат" и ему показывалось сколько он сделал правильно, и неплохо было бы ещё указать правильные ответы.

Буду очень благодарен если кто то сможет или попробует помочь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2023, 20:58
Ответы с готовыми решениями:

Можна ли всю школьную программу по математике изучить по книжке Выгодского "Справочник по элементарной математике"? Не читая других учебников
Или всеравно в этом справочнике не всего материала которые есть вучебниках разных классов

Написать простенькую программу. При изменении пикселей в выбранно области нужно закрыть определенную программу!
Нужно написать программу готовым .exe. выделить область на экране, и при изменении пикселей в выбранной области выполнить...

Написать простенькую программу
Есть класс различной военной техники , у каждого свой вес , получить на выход общий вес

15
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
20.04.2023, 16:55
Lirsh, код-то где?
1
0 / 0 / 0
Регистрация: 19.04.2023
Сообщений: 8
21.04.2023, 13:57  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from tkinter import *
import random
 
a = random.randint(0,100)
b = random.randint(0,100)
c = random.randint(0,100)
d = random.randint(0,100)
A = a,"x", b
C = c,"x", d 
 
def chek_1():
    test=Tk()
    frame = Frame(
        test,
        padx=10,
        pady=10
    )
    frame.pack(expand=True)
 
    odin = Label(
        frame,
        text= A,
    )
    odin.grid(row=3, column=1)
 
    dva = Label(
        frame,
        text= C, 
    )
    dva.grid(row=4, column=1)
 
    Odin = Entry(
        frame,
    )
    Odin.grid(row=3, column=2, pady=5)
 
    Dva = Entry(
        frame,
    )
    Dva.grid(row=4, column=2, pady=5)
    test.mainloop()
 
def chek_2():
    teoriya=Tk()
    lab_08=Label(teoriya, text="1 x 1 = 1     2 x 1 = 2     3 x 1 = 3     4 x 1 = 4     5 x 1 = 5     6 x 1 = 6     7 x 1 = 7     8 x 1 = 8     9 x 1 = 9     10 x 1 = 10  \n1 x 2 = 2     2 x 2 = 4     3 x 2 = 6     4 x 2 = 8     5 x 2 = 10    6 x 2 = 12    7 x 2 = 14    8 x 2 = 16    9 x 2 = 18    10 x 2 = 20      \n1 x 3 = 3     2 x 3 = 6     3 x 3 = 9     4 x 3 = 12    5 x 3 = 15    6 x 3 = 18    7 x 3 = 21    8 x 3 = 24    9 x 3 = 27    10 x 3 = 30      \n1 x 4 = 4     2 x 4 = 8     3 x 4 = 12    4 x 4 = 16    5 x 4 = 20    6 x 4 = 24    7 x 4 = 28    8 x 4 = 32    9 x 4 = 36    10 x 4 = 40     \n1 x 5 = 5     2 x 5 = 10    3 x 5 = 15    4 x 5 = 20    5 x 5 = 25    6 x 5 = 30    7 x 5 = 35    8 x 5 = 40    9 x 5 = 45    10 x 5 = 50     \n1 x 6 = 6     2 x 6 = 12    3 x 6 = 18    4 x 6 = 24    5 x 6 = 30    6 x 6 = 36    7 x 6 = 42    8 x 6 = 48    9 x 6 = 54    10 x 6 = 60     \n1 x 7 = 7     2 x 7 = 14    3 x 7 = 21    4 x 7 = 28    5 x 7 = 35    6 x 7 = 42    7 x 7 = 49    8 x 7 = 56    9 x 7 = 63    10 x 7 = 70     \n1 x 8 = 8     2 x 8 = 16    3 x 8 = 24    4 x 8 = 32    5 x 8 = 40    6 x 8 = 48    7 x 8 = 56    8 x 8 = 64    9 x 8 = 72    10 x 8 = 80     \n1 x 9 = 9     2 x 9 = 18    3 x 9 = 27    4 x 9 = 36    5 x 9 = 45    6 x 9 = 54    7 x 9 = 63    8 x 9 = 72    9 x 9 = 81    10 x 9 = 90     \n1 x 10 = 10   2 x 10 = 20   3 x 10 = 30   4 x 10 = 40   5 x 10 = 50   6 x 10 = 60   7 x 10 = 70   8 x 10 = 80   9 x 10 = 90   10 x 10 = 100", justify=CENTER, font=("Times New Roman", 14))
    lab_08.grid(row=0, column=0, sticky=W)
    teoriya.mainloop() 
 
root=Tk()
root.title("тренажер")
root.geometry("")
 
lab_02=Label(root, text="ТРЕНАЖЕР ПО МАТЕМАТИКЕ",  font=("Times New Roman", 18, "bold"), padx=40, pady=40)
lab_03=Label(root, text="По таблице умножения", font=("Times New Roman", 14)) 
 
 
button_01=Button(root, text="Начать тренинг", font=("Times New Roman", 12), command=chek_1) 
button_02=Button(root, text="Таблица умножения", font=("Times New Roman", 12), command=chek_2)
 
lab_02.grid(row=1, column=0)
lab_03.grid(row=2, column=0)
 
 
button_01.grid(row=4, column=0)
button_02.grid(row=5, column=0)
 
root.mainloop()
Добавлено через 4 минуты
отправил
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
21.04.2023, 17:07
Лучший ответ Сообщение было отмечено Lirsh как решение

Решение

Lirsh, я художник, я так вижу)

Не по теме:

На 45 строчке вашего кода я пустил слезу, столько терпения набирать было эту строку... Есть же циклы



"button_01" - не называйте никогда так, потом когда кода будет 100500 строк, вы не вспомните что это было вообще, когда на очереди появится button_2569 Тоже относится и к остальным именам кода.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import tkinter as tk
import random
 
class MainApp(tk.Tk):
    def __init__(self, *arg, **kwarg):
        super().__init__(*arg, **kwarg)
 
        self.title("Тест умножения")
        self.geometry("450x150")
 
        label = tk.Label(self, text="ТРЕНАЖЕР ПО МАТЕМАТИКЕ",
                         font=("Times New Roman", 18, "bold"))
        label.grid(row=0, column=0)
 
        btn_table = tk.Button(self, text="Теория", command=self.show_table)
        btn_table.grid(row=1, column=0)
 
        btn_test = tk.Button(self, text="Тест", command=self.show_test)
        btn_test.grid(row=2, column=0)
 
    def show_table(self):
        Table().mainloop()
 
    def show_test(self):
        Test().mainloop()
 
 
class Table(tk.Toplevel):
    def __init__(self, *arg, **kwarg):
        super().__init__(*arg, **kwarg)
        # Вывод таблицы умножения
        self.title("Таблица умножения")
        for a in range(10):
            for b in range(10):
                lbl = tk.Label(self, text=f"{a} * {b} = {a * b}  |")
                lbl.grid(row=a, column=b)
 
 
class Test(tk.Toplevel):
    def __init__(self, *arg, **kwarg):
        super().__init__(*arg, **kwarg)
        # Получим цифры и ответы их умножения
        res = self.get_num()
        # Напишем пример
        label_question = tk.Label(self, text=f"{res[0]} * {res[1]} = ?",
                                  font=("Times New Roman", 12, "bold"))
        label_question.grid(row=0, column=0)
        # Поле для ответа
        self.entry = tk.Entry(self)
        self.entry.grid(row=1, column=0)
        # Кнопка результата
        btn_res = tk.Button(self, text="Проверить ответ", command=lambda: self.check(res[2]))
        btn_res.grid(row=2, column=0)
 
        # Напишем ответ
        self.label_ans = tk.Label(self, text=f"", font=("Times New Roman", 12, "bold"))
        self.label_ans.grid(row=3, column=0)
 
    def get_num(self):
        'Получить радомных 2 int числа от 0 до 100 и результат их умножения'
        a = random.randint(0, 10)
        b = random.randint(0, 10)
        ans = a * b
        return (a, b, ans)
 
    def check(self, res):
        try:
            ans = int(self.entry.get())
            if ans == res:
                self.label_ans['text'] = "Абсолютно правильно!"
            else:
                self.label_ans['text'] = "Решение не верно!"
        except:
            self.label_ans['text'] = "Проверьте ввод!"
 
 
if __name__ == '__main__':
    MainApp().mainloop()
5
0 / 0 / 0
Регистрация: 19.04.2023
Сообщений: 8
21.04.2023, 18:39  [ТС]
дорогой человек, могу ли я с вами связаться?
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
21.04.2023, 23:22
Lirsh, спасибо, на добром слове!) если вопрос по коду можете темы создавать, тут очень отзывчивый народ, особенно если пишешь со своим кодом. А так на форуме есть личные сообщения.
0
0 / 0 / 0
Регистрация: 19.04.2023
Сообщений: 8
22.04.2023, 18:33  [ТС]
не могу с помощью grid и padyxy поставить надпись в нужное место, подскажите
0
0 / 0 / 0
Регистрация: 19.04.2023
Сообщений: 8
22.04.2023, 18:34  [ТС]
вот
Миниатюры
Создаю простенькую программу по математике  
0
0 / 0 / 0
Регистрация: 19.04.2023
Сообщений: 8
22.04.2023, 18:37  [ТС]
Также можно ли сделать так чтоб после правильного ответа, математический пример менялся?
Просто не удобно каждый раз выходить из окна и открывать новый
В коде который отправил михалыч
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,762
23.04.2023, 02:04
Цитата Сообщение от Lirsh Посмотреть сообщение
после правильного ответа, математический пример менялся?
как то так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showerror, showinfo
from random import randint
 
class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.lbl = ttk.Label(borderwidth=1, relief="ridge")
        self.lbl.pack(padx=4,pady=4,expand = True)
        self.entry = ttk.Entry()
        self.entry.pack(padx=4,pady=4,expand = True)
        btn = ttk.Button(self,text = "Результат",command=self.on_result)
        btn.pack(padx=4,pady=4,expand = True)
        self.load()
    
    def load(self):
        a,b = randint(0,10),randint(0,10)
        self.lbl['text'] = str(a) +'*'+str(b)
 
    def on_result(self):
        val  = eval(self.lbl['text'])
        try:
            res = int(self.entry.get())
        except:
            showerror(title="Ошибка",message="Ошибка ввода данных", parent=self)
        else:
            if val == res:
                showinfo(title="Результат",message='Ответ верен',parent=self)
                self.load()
            else:
                showerror(title="Ошибка",message="Ответ неверен", parent=self)
 
if __name__=="__main__":
    app = App()
    app.title('TEST')
    app.geometry("+300+300")
    app.attributes('-topmost',True)
    app.mainloop()
3
0 / 0 / 0
Регистрация: 19.04.2023
Сообщений: 8
25.04.2023, 22:42  [ТС]
Сколько бы не пытался, я не смог сделать так чтобы после правильного решения примера, пример менялся на другой.
Я конечно понимаю что это уже наглость в том что мне уже помогли, но сколько бы я не сидел и пробовал что то, ничего не выходит. Покажите пожалуйста на коде от Михалыча.
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
26.04.2023, 07:05
Лучший ответ Сообщение было отмечено Lirsh как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import tkinter as tk
import random
 
class MainApp(tk.Tk):
    def __init__(self, *arg, **kwarg):
        super().__init__(*arg, **kwarg)
 
        self.title("Тест умножения")
        self.geometry("450x150")
 
        label = tk.Label(self, text="ТРЕНАЖЕР ПО МАТЕМАТИКЕ",
                         font=("Times New Roman", 18, "bold"))
        label.grid(row=0, column=0)
 
        btn_table = tk.Button(self, text="Теория", command=self.show_table)
        btn_table.grid(row=1, column=0)
 
        btn_test = tk.Button(self, text="Тест", command=self.show_test)
        btn_test.grid(row=2, column=0)
 
    def show_table(self):
        Table().mainloop()
 
    def show_test(self):
        Test().mainloop()
 
 
class Table(tk.Toplevel):
    def __init__(self, *arg, **kwarg):
        super().__init__(*arg, **kwarg)
        # Вывод таблицы умножения
        self.title("Таблица умножения")
        for a in range(10):
            for b in range(10):
                lbl = tk.Label(self, text=f"{a} * {b} = {a * b}  |")
                lbl.grid(row=a, column=b)
 
 
class Test(tk.Toplevel):
    def __init__(self, *arg, **kwarg):
        super().__init__(*arg, **kwarg)
        # Получим цифры и ответы их умножения
        self.res = self.get_num()                                                       #++++++++++
        # Напишем пример
        self.label_question = tk.Label(self, text=f"{self.res[0]} * {self.res[1]} = ?",
                                  font=("Times New Roman", 12, "bold"))                 #++++++++++
        self.label_question.grid(row=0, column=0)                                       #++++++++++
        # Поле для ответа
        self.entry = tk.Entry(self)
        self.entry.grid(row=1, column=0)
        # Кнопка результата
        btn_res = tk.Button(self, text="Проверить ответ", command=lambda: self.check(self.res[2])) #++++++++++
        btn_res.grid(row=2, column=0)
 
        # Напишем ответ
        self.label_ans = tk.Label(self, text=f"", font=("Times New Roman", 12, "bold"))
        self.label_ans.grid(row=3, column=0)
 
    def get_num(self):
        'Получить радомных 2 int числа от 0 до 100 и результат их умножения'
        a = random.randint(0, 10)
        b = random.randint(0, 10)
        ans = a * b
        return (a, b, ans)
 
    def check(self, res):
        try:
            ans = int(self.entry.get())
            if ans == res:
                self.label_ans['text'] = "Абсолютно правильно! Получите новый пример =)"
                # Получим новые цифры и ответы их умножения
                self.res = self.get_num()                                               #++++++++++
                # Заново напишем пример
                self.label_question['text'] =f"{self.res[0]} * {self.res[1]} = ?"       #++++++++++
            else:
                self.label_ans['text'] = "Решение не верно!"
        except:
            self.label_ans['text'] = "Проверьте ввод!"
 
 
if __name__ == '__main__':
    MainApp().mainloop()
Добавлено через 1 минуту
Lirsh, примерно так) измененные/добавленные строки отмечены "#++++++++++"

Добавлено через 5 минут
Цитата Сообщение от Lirsh Посмотреть сообщение
сколько бы я не сидел и пробовал что то, ничего не выходит
А это и не помогает смысл сидеть, все равно придется возвращаться к основам (проверено на личном опыте).

Добавлено через 2 минуты
Цитата Сообщение от Lirsh Посмотреть сообщение
нажимает на кнопку "узнать результат" и ему показывалось сколько он сделал правильно, и неплохо было бы ещё указать правильные ответы
Потому что следующее изменение согласно вашего ТЗ вызовет у вас опять ступор.
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
26.04.2023, 08:20

Не по теме:

Как у вас только терпения хватает писать на этом убогом ткинтере, когда под рукой со всех сторон охренительный кьют


0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
26.04.2023, 09:18
iSmokeJC,

Не по теме:

ТС уж начал, ему и так не понятно, а тут еще дополнительно что-то ставить из-за пары кнопок, а так да я тоже за кьют

Миниатюры
Создаю простенькую программу по математике  
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
26.04.2023, 09:21
Михалыч, я тут где-то выкладывал уже готовую программку с таким же функционалом. На кьюте разумеется. С чтением примеров из файла и все такое. Элементарно-минимальная. Самое то - посмотреть, допилить...

Добавлено через 1 минуту
Во!
1
0 / 0 / 0
Регистрация: 19.04.2023
Сообщений: 8
26.04.2023, 18:24  [ТС]
Спасибо за помощь!
Я обязательно продолжу обучение и поизучаю кьют!

Добавлено через 2 минуты
Парни вы просто гении!
Спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.04.2023, 18:24
Помогаю со студенческими работами здесь

Оцените, пожалуйста, простенькую программу на C#!
3 функции. Первая вычисляет число ПИ, вторая - число e и третья - ln2. Всё с точностью 15 знаков после запятой using System; using...

Написать простенькую программу с циклами
Вычислить сумму указанных чисел, вывести данные числа на экран, решить задачу 3 способами, используя циклы с параметром, с предусловием, с...

Доработайте простенькую программу считалочку
Ребята Всем привет! Помогите пожалуйста доработать программу считалочку на выбывание.хотелось бы, чтобы она выводила водящего который...

Нужно добавить исключения в простенькую программу
Вот задание: оптимизировать программу, включив в нее обработку исключительных ситуаций: ввода данных, операции деления и др. Вот уже...

Нужно сделать простенькую программу с циклом
По заданию составить программу с различными вариантами применения операторов цикла: while, do… while, for. Предусмотреть дополнительные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru