Вопрос задан 10.10.2026 в 12:50. Предмет Информатика. Спрашивает Лукашова Ира.

Поможіть будь ласка, створив калькулятор, а він не може давати відповідь на питання(Створено на Python)

Код калькулятору:

import tkinter as tk

import math



def button_click(symbol):

current = entry.get()

entry.delete(0, tk.END)

entry.insert(0, current + symbol)



def calculate():

try:

expression = entry.get()

result = eval(expression, {'__builtins__': None}, {'math': math})

entry.delete(0, tk.END)

entry.insert(0, str(result))

except Exception as e:

entry.delete(0, tk.END)

entry.insert(0, "Ошибка")



def clear():

entry.delete(0, tk.END)



# Создаем главное окно

root = tk.Tk()

root.title("Калькулятор")

root.configure(bg="#F0F0F0")



# Создаем виджет для ввода

entry = tk.Entry(root, width=30, borderwidth=5)

entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10)



# Создаем кнопки для цифр и операций

buttons = [

('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),

('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),

('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),

('0', 4, 0), ('.', 4, 1), ('=', 4, 2), ('+', 4, 3),

]



for button in buttons:

symbol, row, column = button

tk.Button(root, text=symbol, padx=20, pady=10, bg="#FFFF99", borderwidth=2, relief="groove", command=lambda s=symbol: button_click(s)).grid(row=row, column=column)



# Кнопка очистки

clear_button = tk.Button(root, text="C", padx=20, pady=10, bg="#FFCCCC", borderwidth=2, relief="groove", command=clear)

clear_button.grid(row=5, column=0, columnspan=3)



# Кнопка выхода

exit_button = tk.Button(root, text="Выход", padx=20, pady=10, bg="#FFCCCC", borderwidth=2, relief="groove", command=root.quit)

exit_button.grid(row=5, column=3, columnspan=1)



# Запускаем главный цикл обработки событий

root.mainloop()

Поможіть будь ласка!!! Даю 50 балів

Перейти к ответам

Ответы на вопрос

Отвечает Смирнов Евгений.

Проблема у вашому коді полягає в тому, що кнопка = не викликає функцію calculate(), яка повинна обчислювати результат.

У вас усі кнопки, включно з =, використовують одну команду:

Python
command=lambda s=symbol: button_click(s)

Тому, коли ви натискаєте =, програма просто додає цей символ у поле введення замість того, щоб виконати обчислення.

Наприклад, якщо ввести 5+3 і натиснути =, вийде 5+3=, а не 8.

Як виправити помилку?

Потрібно зробити так, щоб кнопка = запускала функцію calculate(), а інші кнопки продовжували викликати button_click().

Ось повністю виправлений код вашого калькулятора:

Python

import tkinter as tk

# Функція натискання кнопок
def button_click(symbol):
current = entry.get()
entry.delete(0, tk.END)
entry.insert(0, current + symbol)

# Функція обчислення
def calculate():
try:
expression = entry.get()
result = eval(expression, {"__builtins__": {}})
entry.delete(0, tk.END)
entry.insert(0, str(result))
except Exception:
entry.delete(0, tk.END)
entry.insert(0, "Помилка")

# Функція очищення
def clear():
entry.delete(0, tk.END)

# Створюємо головне вікно
root = tk.Tk()
root.title("Калькулятор")
root.configure(bg="#F0F0F0")

# Поле введення
entry = tk.Entry(root, width=30, borderwidth=5)
entry.grid(row=0, column=0, columnspan=4,
padx=10, pady=10)

# Кнопки калькулятора
buttons = [

Що саме я змінив?

Головне виправлення — ось цей фрагмент:

Python
if symbol == '=':
command = calculate
else:
command = lambda s=symbol: button_click(s)

Тепер програма перевіряє, яку кнопку натиснуто.

  • Якщо це =, викликається функція calculate().

  • Якщо це цифра або математична операція, викликається функція button_click().

  • Якщо натиснути C, поле введення очиститься.

Також я прибрав import math, тому що для звичайних арифметичних операцій у цьому варіанті калькулятора він не потрібний.

Як тепер працюватиме калькулятор?

Приклад роботи

Демонстрація

5+3

Інтерактивний приклад роботи виправленої кнопки «=».

Після виправлення калькулятор зможе виконувати такі обчислення:

Вираз

Результат

5+3

8

10-4

6

7*6

42

20/5

4.0

2**3

8

10/0

Помилка

Важливо: функція eval() підходить для простого навчального прикладу, але для повноцінного калькулятора краще використовувати безпечний обробник математичних виразів, оскільки eval() не призначена для обробки довільного введення користувача.

Висновок: у вас майже все було правильно. Основна помилка — ви створили функцію calculate(), але не прив'язали її до кнопки =. Після додавання перевірки if symbol == '=' калькулятор почне показувати результати обчислень.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос