Задача 1. «Калькулятор»

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Задание: Написать приложение с графическим интерфейсом «Калькулятор». Оно должно
содержать: индикатор вывода результата, четыре кнопки с основными операциями [+], [-],
[*], [/] и кнопки [=], [С], [1/x], [x2].1234.png
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Просто вместо условно
a = "√"
Пиши
a = chr(8730)
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Просто вместо условно
a = "√"
Пиши
a = chr(8730)
Нашёл ещё одну ошибку Калькулятора, как обойти ошибку, деления на ноль.??)))
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Нашёл ещё одну ошибку Калькулятора, как обойти ошибку, деления на ноль.??)))
И попробовал заменить значек Кнопки /, на значек ÷ Рвёт код.!!!(((
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
И попробовал заменить значек Кнопки /, на значек ÷ Рвёт код.!!!(((
Кнопки по кодам прописал, единственное, как быть с кнопкой [÷] (код=247), как её прописать.??)))
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Python:
import tkinter as tk
from math import *

def add_digit(digit):
    value=calc.get()
    if value[0]=="0":
        value=value[1:]
    calc.delete(0,tk.END)
    calc.insert(0,value+digit)

def add_operation(operation):
    value = calc.get()
    if operation == "1/x":
        operation = ""
        calculate()
        value = calc.get()
        value = str(1/float(value))
    elif operation == "x2":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**2)
    elif operation == chr(8730):
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**0.5)
    elif operation == chr(8592):
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value[:-1])) if len(value) > 1 else "0"
    elif operation == chr(177):
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)*-1)
    elif value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or "/" in value or "*" in value:
        calculate()
        value = calc.get()
    value = value.removesuffix(".0")
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)

def calculate():
    value=calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    calc.insert(0, str(eval(value)).removesuffix(".0"))

def clear():
    calc.delete(0, tk.END)
    calc.insert(0,0)

def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))

def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))

def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)

def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)

root=tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x417")
root.resizable(width=False, height=False)

calc=tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15),width=15)
calc.insert(0,"0")
calc.grid(row=0, column=0, columnspan=4,stick="we", padx=5)

abbreviation("7").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=5, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=5, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=5, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=6, column=1, stick="wens", pady=2, padx=2)

abbreviation_clear_button("C").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation_operation_button("x2").grid(row=1, column=0, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("1/x").grid(row=1, column=2, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button(chr(8730)).grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button(chr(8592)).grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button(chr(177)).grid(row=6, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("/").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("*").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("-").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("+").grid(row=5, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(row=6, column=2, columnspan=2, stick="wens", pady=2, padx=2)

root.grid_columnconfigure(0,minsize=65)
root.grid_columnconfigure(1,minsize=65)
root.grid_columnconfigure(2,minsize=65)
root.grid_columnconfigure(3,minsize=65)
root.grid_columnconfigure(4,minsize=65)

root.grid_rowconfigure(1,minsize=65)
root.grid_rowconfigure(2,minsize=65)
root.grid_rowconfigure(3,minsize=65)
root.grid_rowconfigure(4,minsize=65)
root.grid_rowconfigure(5,minsize=65)
root.grid_rowconfigure(6,minsize=65)

root.mainloop()

Вот сейчас такой код.!!!)))
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Просто вместо условно
a = "√"
Пиши
a = chr(8730)
Python:
import tkinter as tk
from tkinter import messagebox
from math import *

def add_digit(digit):
    value=calc.get()
    if value[0]=="0":
        value=value[1:]
    calc.delete(0,tk.END)
    calc.insert(0,value+digit)

def add_operation(operation):
    value = calc.get()
    if operation == "1/x":
        operation = ""
        calculate()
        value = calc.get()
        value = str(1/float(value))
    elif operation == "x2":
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**2)
    elif operation == chr(8730):
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)**0.5)
    elif operation == chr(8592):
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value[:-1])) if len(value) > 1 else "0"
    elif operation == chr(177):
        operation = ""
        calculate()
        value = calc.get()
        value = str(float(value)*-1)
    elif value[-1] in "-+/*":
        value = value[:-1]
    elif "+" in value or "-" in value or "/" in value or "*" in value:
        calculate()
        value = calc.get()
    value = value.removesuffix(".0")
    calc.delete(0, tk.END)
    calc.insert(0, value+operation)

def calculate():
    value=calc.get()
    if value[-1] in "+-/*":
        value = value+value[:-1]
    calc.delete(0, tk.END)
    try:
        calc.insert(0, str(eval(value)).removesuffix(".0"))
    except (NameError,SyntaxError):
        messagebox.showinfo("Внимание","Нужно вводить цифры!")
        calc.insert (0,0)
    except ZeroDivisionError:
        messagebox.showinfo("Внимание","Деление на ноль невозможно!")
        calc.insert(0,0)

def clear():
    calc.delete(0, tk.END)
    calc.insert(0,0)

def abbreviation(digit):
    return tk.Button(text=digit, bd=5, command=lambda: add_digit(digit))

def abbreviation_operation_button(operation):
    return tk.Button(text=operation, bd=5, command=lambda: add_operation(operation))

def abbreviation_calc_button(operation):
    return tk.Button(text=operation, bd=5, command=calculate)

def abbreviation_clear_button(operation):
    return tk.Button(text=operation, bd=5, command=clear)

root=tk.Tk()
root["bg"] = ""
root.title("Калькулятор")
root.wm_attributes("-alpha", 1)
root.geometry("260x417")
root.resizable(width=False, height=False)

calc=tk.Entry(root, justify=tk.RIGHT, font=("Times New Roman", 15),width=15)
calc.insert(0,"0")
calc.grid(row=0, column=0, columnspan=4,stick="we", padx=5)

abbreviation("7").grid(row=3, column=0, stick="wens", pady=2, padx=2)
abbreviation("8").grid(row=3, column=1, stick="wens", pady=2, padx=2)
abbreviation("9").grid(row=3, column=2, stick="wens", pady=2, padx=2)
abbreviation("4").grid(row=4, column=0, stick="wens", pady=2, padx=2)
abbreviation("5").grid(row=4, column=1, stick="wens", pady=2, padx=2)
abbreviation("6").grid(row=4, column=2, stick="wens", pady=2, padx=2)
abbreviation("1").grid(row=5, column=0, stick="wens", pady=2, padx=2)
abbreviation("2").grid(row=5, column=1, stick="wens", pady=2, padx=2)
abbreviation("3").grid(row=5, column=2, stick="wens", pady=2, padx=2)
abbreviation("0").grid(row=6, column=1, stick="wens", pady=2, padx=2)

abbreviation_clear_button("C").grid(row=2, column=1, stick="wens", pady=2, padx=2)
abbreviation_operation_button("x2").grid(row=1, column=0, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button("1/x").grid(row=1, column=2, columnspan=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button(chr(8730)).grid(row=2, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button(chr(8592)).grid(row=2, column=2, stick="wens", pady=2, padx=2)
abbreviation_operation_button(chr(177)).grid(row=6, column=0, stick="wens", pady=2, padx=2)
abbreviation_operation_button("/").grid(row=2, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("*").grid(row=3, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("-").grid(row=4, column=3, stick="wens", pady=2, padx=2)
abbreviation_operation_button("+").grid(row=5, column=3, stick="wens", pady=2, padx=2)
abbreviation_calc_button("=").grid(row=6, column=2, columnspan=2, stick="wens", pady=2, padx=2)

root.grid_columnconfigure(0,minsize=65)
root.grid_columnconfigure(1,minsize=65)
root.grid_columnconfigure(2,minsize=65)
root.grid_columnconfigure(3,minsize=65)
root.grid_columnconfigure(4,minsize=65)

root.grid_rowconfigure(1,minsize=65)
root.grid_rowconfigure(2,minsize=65)
root.grid_rowconfigure(3,minsize=65)
root.grid_rowconfigure(4,minsize=65)
root.grid_rowconfigure(5,minsize=65)
root.grid_rowconfigure(6,minsize=65)

root.mainloop()
Вот так, решил проблему деления на ноль, а можно, это значение, как-то выводить в индикатор.??)))
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Ну можно выводить в поле с числами в виде текста например
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Ну можно выводить в поле с числами в виде текста например
А как это реализовать.??)))
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Python:
except ZeroDivisionError:
    calc.insert(0, 'Деление на 0!')
 

bivlinux

Новичок
Пользователь
Фев 27, 2022
23
1
3
Python:
except ZeroDivisionError:
    calc.insert(0, 'Деление на 0!')
Спасибо Вам большое, всё работает.!!!)))
 
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов