Я сделал калькулятор так, 1.Получаем символ от пользователя 2.Добавляем его в переменную primer (primer = str(primer) + str(digit)) 3.Когда пользователь нажимает «=», мы вычисляем пример при помощи функции eval() (eval(primer))
Все круто, но представлен "плохой" пример по вычислению, так сказать по пути от А до Я (5 + 6 - 7 * 8 = 32), в жизни операции умножения и деления на первом месте (5 + 6 - 7 * 8 = -45). Не спорю, бывают моменты, когда именно такое вычисление очень помогает
не совсем понял, что не так. eval вычисляет с учетом приоритетов операций мы сейчас написали калькулятор который данное выражение вычисляет так: ((5 + 6) - 7) * 8
а у меня почему то не работают умножение и деление(показывает ошибку: File "C:\Users\Святослав\Desktop\pythonProject\kalkulator.py", line 39, in calculate calc.insert(0, eval(value)) File "", line 1 6x9)...Заметь плиз, помоги!!!
Друзья, подскажите плж. 8:50. Разве функция calculate(), вызванная из метода add_operation, не должна была уже вставить в поле entry результат вычисления? Зачем после ее вызова нужна строчка value = calc.get() ?
Я сделал калькулятор так,
1.Получаем символ от пользователя
2.Добавляем его в переменную primer (primer = str(primer) + str(digit))
3.Когда пользователь нажимает «=», мы вычисляем пример при помощи функции eval() (eval(primer))
я сегодня сам чуть не сдох пока, сам старался починить кнопку равно. А оказывается была просто
функция eval().
Ура, новое видео
Спасибо
Я вроде как нашла баг или просто сама где-то накосячила. Когда мы выполняем любую операцию, то мы получаем сумму, но когда начинаешь вводить новое число, то происходит конкетенация, а не очищение поля. Например, я ввожу 6*6 = 36, после этого я нажимаю на 1 и получаю не очищение поля и 1 на нем, а 361.
import tkinter as tk
def add_digit(digit):
value = calc.get()
if value[0] == '0' and len(value) == 1:
value = value[1:]
calc.delete(0, tk.END)
calc.insert(0, value+digit)
def add_operation(operation):
value = calc.get()
if value[-1] in '+-*/':
value = value[:-1]
elif '+' in value or '-' in value or '/' in value or '*' in value:
calculate()
value = calc.get()
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, eval(value))
def clear():
calc.delete(0, tk.END)
calc.insert(0, 0)
def make_digit(digit):
return tk.Button(text=digit, bd=5, font=('Arial', 13), command=lambda: add_digit(digit))
def make_operation_button(operation):
return tk.Button(text=operation, bd=5, font=('Arial', 13), command=lambda: add_operation(operation))
def make_calc_button(operation):
return tk.Button(text=operation, bd=5, font=('Arial', 13), command=calculate)
def make_clear_button(operation):
return tk.Button(text=operation, bd=5, font=('Arial', 13), command=clear)
win = tk.Tk()
win.geometry = (f"240x280+100+200")
win['bg'] = '#33ffe6'
win.title('Калькулятор')
calc = tk.Entry(win, justify=tk.RIGHT, font=('Arial', 15), width=15)
calc.insert(0,'0')
calc.grid(row=0, column=0, columnspan=4, stick='we', padx=5)
make_digit('1').grid(row=1, column=0, stick='wens', padx=5, pady=5)
make_digit('2').grid(row=1, column=1, stick='wens', padx=5, pady=5)
make_digit('3').grid(row=1, column=2, stick='wens', padx=5, pady=5)
make_digit('4').grid(row=2, column=0, stick='wens', padx=5, pady=5)
make_digit('5').grid(row=2, column=1, stick='wens', padx=5, pady=5)
make_digit('6').grid(row=2, column=2, stick='wens', padx=5, pady=5)
make_digit('7').grid(row=3, column=0, stick='wens', padx=5, pady=5)
make_digit('8').grid(row=3, column=1, stick='wens', padx=5, pady=5)
make_digit('9').grid(row=3, column=2, stick='wens', padx=5, pady=5)
make_digit('0').grid(row=4, column=0, stick='wens', padx=5, pady=5)
make_operation_button('+').grid(row=1, column=3, stick='wens', padx=5, pady=5)
make_operation_button('-').grid(row=2, column=3, stick='wens', padx=5, pady=5)
make_operation_button('*').grid(row=3, column=3, stick='wens', padx=5, pady=5)
make_operation_button('/').grid(row=4, column=3, stick='wens', padx=5, pady=5)
make_calc_button('=').grid(row=4, column=2, stick='wens', padx=5, pady=5)
make_clear_button('C').grid(row=4, column=1, stick='wens', padx=5, pady=5)
win.grid_columnconfigure(0, minsize=60)
win.grid_columnconfigure(1, minsize=60)
win.grid_columnconfigure(2, minsize=60)
win.grid_columnconfigure(3, minsize=60)
win.grid_rowconfigure(1, minsize=60)
win.grid_rowconfigure(2, minsize=60)
win.grid_rowconfigure(3, minsize=60)
win.grid_rowconfigure(4, minsize=60)
win.mainloop()
Все круто, но представлен "плохой" пример по вычислению, так сказать по пути от А до Я (5 + 6 - 7 * 8 = 32), в жизни операции умножения и деления на первом месте (5 + 6 - 7 * 8 = -45). Не спорю, бывают моменты, когда именно такое вычисление очень помогает
не совсем понял, что не так. eval вычисляет с учетом приоритетов операций
мы сейчас написали калькулятор который данное выражение вычисляет так:
((5 + 6) - 7) * 8
@@egoroffchannel реализована замена на уже подсчитанное значение. 5+6=11, 11-7=4, 4*8=32. А должно быть (5+6-(7*8))=-45
@@joehart7382 наш калькулятор не считает несколько операций
@@egoroffchannel по фактам)
может много раз вставить)
Почему-то не работает кнопка calculate, хотя код 1 в 1. По нажатию на нее ничего не происходит, подскажите пожалуйста
Нашли ошибку?
make_operation_button('=').grid(row=4, column=2, stick='wens', padx=5, pady=5)
должна быть make_calc_button
Будут ли видео по подготовке к ЕГЭ по информатике 2021?
Zachem eto ne dlya togo chtobi Ege po infushe zdavat'
Класс
У меня не работают кнопки говорит не найдено operation а у меня всё идеально я всё проверил
TypeError: eval() arg 1 must be a string, bytes or code object что делать (это если что eval)
я уже понял, просто скобки забыл поставить там где value = calc.get()
Ответьте пожалуйста почему что такое value и почему после него стоит [-1]
Про срезы посмотри у меня видео
@@egoroffchannel хорошо
Не работает eval, подсчеты при нажатии на равно не производятся, подскажите что делать
Тоже самое было просто если у тебя пайчарм то по подсказке которая тебе выдаётся кликни и все ок
А возможно ли как-то цвет рамки оконной поменять?
зачем сравнивать длину и первый символ, вместо того, чтобы сравнить value=="0"?
да, так логичнее будет. когда записывал представлял, что со списком работаю видимо)
а у меня почему то не работают умножение и деление(показывает ошибку: File "C:\Users\Святослав\Desktop\pythonProject\kalkulator.py", line 39, in calculate
calc.insert(0, eval(value))
File "", line 1
6x9)...Заметь плиз, помоги!!!
В и тоге решил?)
@@shedryn да.
Друзья, подскажите плж. 8:50. Разве функция calculate(), вызванная из метода add_operation, не должна была уже вставить в поле entry результат вычисления? Зачем после ее вызова нужна строчка value = calc.get() ?
calculate вставляет число, нужно еще и операцию добавить
в 21й строке мы к значению value прибавляем операцию. надо взять новое значение из ввода
А как проценты и квадратный корень добавить?
По-моему он любит число 7😅😅
с функцией eval у меня ошибка EOF while parsing(пишу с ООП)
у меня тоже такая проблема. Как ее исправить???
я конечно поздно, но у меня начали появляться по 2 цифры помогите пожалуйста
Скорее всего это связанно с заменой операторов, видимо ошибку совершили.
6:51
Какой это редактор кода? Пайчарм?
да
eval = evil
Калькулятор в стиле windows 3.1
Ага, я поставил bd=0.5 и поменял цвета, так намного более стильный
Так надо добавить ttk и все будет ок
Может кто то код скинуть я хочу со своим сравнить, так как у меня ошибки
import tkinter as tk
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 value [-1] in "-+*/":
value = value[:-1]
calc.delete(0, tk.END)
calc.insert(0, value + operation)
def calculate():
value = calc.get()
calc.delete(0, tk.END)
calc.insert(0, eval(value))
def makr_operation_button(operation):
return tk.Button(text=operation, bd=5,font=("Arial",15),command=lambda : add_operation(operation),fg="#3d360b")
def makr_digit_button(digit):
return tk.Button(text=digit, bd=5,font=("Arial",15),command=lambda : add_digit(digit))
def makr_calc_button(operation):
return tk.Button(text=operation, bd=5,font=("Arial",15),fg="#3d360b",command=calculate)
res = tk.Tk()
res.geometry("240x266+100+200")
res.resizable(False,False)
res.title("Калькулятор")
res["bg"] = "#e36b2b"
calc= tk.Entry(res,justify=tk.RIGHT,font=("Arial",15),width=15)
calc.insert(0,"0")
calc.grid(row=0,column=0, columnspan=4,stick="we",padx = 5,pady = 1)
makr_digit_button("1").grid(row= 1,column=0,stick="wens",padx = 5, pady = 5)
makr_digit_button("2").grid(row= 1,column=1,stick="wens",padx = 5, pady = 5)
makr_digit_button("3").grid(row= 1,column=2,stick="wens",padx = 5, pady = 5)
makr_digit_button("4").grid(row= 2,column=0,stick="wens",padx = 5, pady = 5)
makr_digit_button("5").grid(row= 2,column=1,stick="wens",padx = 5, pady = 5)
makr_digit_button("6").grid(row= 2,column=2,stick="wens",padx = 5, pady = 5)
makr_digit_button("7").grid(row= 3,column=0,stick="wens",padx = 5, pady = 5)
makr_digit_button("8").grid(row= 3,column=1,stick="wens",padx = 5, pady = 5)
makr_digit_button("9").grid(row= 3,column=2,stick="wens",padx = 5, pady = 5)
makr_digit_button("0").grid(row= 4,column=0,stick="wens",padx = 5, pady = 5)
makr_operation_button("+").grid(row= 1,column=3,stick="wens",padx = 5, pady = 5)
makr_operation_button("-").grid(row= 2,column=3,stick="wens",padx = 5, pady = 5)
makr_operation_button("*").grid(row= 3,column=3,stick="wens",padx = 5, pady = 5)
makr_operation_button("/").grid(row= 4,column=3,stick="wens",padx = 5, pady = 5)
makr_operation_button("=").grid(row= 4,column=2,stick="wens",padx = 5, pady = 5)
res.grid_columnconfigure(0,min = 60)
res.grid_columnconfigure(1,min = 60)
res.grid_columnconfigure(2,min = 60)
res.grid_columnconfigure(3,min = 60)
res.mainloop()
@@THE_KIROSHI этот код не работает
import tkinter as tk
window = tk.Tk()
window.geometry('233x230+500+200')
window['bg'] = 'pink'
window.title('Calculator')
calc = tk.Entry(window, justify=tk.RIGHT, font=('Arial', 15), bd=5)
calc.insert(0, '0')
calc.grid(row=0, column=0, columnspan=4)
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 make_digit_button(digit):
return tk.Button(text=digit, bd=5, bg='#DDA0DD', font=('Arial', 13), command=lambda: add_digit(digit))
def make_operation_button(operation):
return tk.Button(text=operation, bd=5, bg='#DDA0DD', font=('Arial', 13), command=lambda: add_operation(operation))
def calcul():
value = calc.get()
calc.delete(0, tk.END)
calc.insert(0, eval(value))
def add_operation(operation):
value = calc.get()
if value[-1] in '/*-+':
value = value[:-1]
calc.delete(0, tk.END)
calc.insert(0, value + operation)
def make_calc_button(calculc):
return tk.Button(text=calculc, bd=5, bg='#DDA0DD', font=('Arial', 13), command=calcul)
# bd в Button - рамка, padx и pady - расстояние между кнопками, stick - растягивание по полюсам до границ кнопки
make_digit_button('1').grid(row=1, column=0, stick='swne', padx=5, pady=5)
make_digit_button('2').grid(row=1, column=1, stick='swne', padx=5, pady=5)
make_digit_button('3').grid(row=1, column=2, stick='swne', padx=5, pady=5)
make_digit_button('4').grid(row=2, column=0, stick='swne', padx=5, pady=5)
make_digit_button('5').grid(row=2, column=1, stick='swne', padx=5, pady=5)
make_digit_button('6').grid(row=2, column=2, stick='swne', padx=5, pady=5)
make_digit_button('7').grid(row=3, column=0, stick='swne', padx=5, pady=5)
make_digit_button('8').grid(row=3, column=1, stick='swne', padx=5, pady=5)
make_digit_button('9').grid(row=3, column=2, stick='swne', padx=5, pady=5)
make_digit_button('0').grid(row=4, column=1, stick='swne', padx=5, pady=5)
make_operation_button('-').grid(row=1, column=3, stick='swne', padx=5, pady=5)
make_operation_button('+').grid(row=2, column=3, stick='swne', padx=5, pady=5)
make_operation_button('/').grid(row=3, column=3, stick='swne', padx=5, pady=5)
make_operation_button('*').grid(row=4, column=3, stick='swne', padx=5, pady=5)
make_calc_button('=').grid(row=4, column=2, stick='swne', padx=5, pady=5)
window.grid_columnconfigure(0, minsize=60)
window.grid_columnconfigure(1, minsize=60)
window.grid_columnconfigure(2, minsize=60)
window.grid_columnconfigure(3, minsize=45)
window.grid_rowconfigure(1, minsize=40)
window.grid_rowconfigure(2, minsize=40)
window.grid_rowconfigure(3, minsize=40)
window.grid_rowconfigure(4, minsize=40)
window.mainloop()
@@ПакетКонфет-о7ч тут с кодом для простоты ещё бы и то, на что консоль жалуется скинуть :)
Все четко, но он как-то так себе выглядит
как говорится "критикуешь? предлагай!")
спасибо предлагаю свой вариант
import tkinter as tk
win = tk.Tk()
#photo = tk.PhotoImage(file="Fun.png")
win.config(bg='#D4FFD4')
win.title('Калькулятор')
#win.iconphoto(False,photo)
win.geometry('270x280+100+200')
win.resizable(False,False)
def counting_the_response():
screen = calc.get()
calc.delete(0, tk.END)
answer = (eval(screen))
calc.insert((tk.END), answer)
def add_characters(characters):
calc.insert((tk.END), characters)
def add_digit(digit):
calc.insert((tk.END),digit)
calc = tk.Entry(win,bg='#A6FFFD',font=('Arial Black',15),bd=5)
calc.grid(row=0, column=0,columnspan=4)
tk.Button(text='1',bg='#FF8A8A',bd=10,command= lambda : add_digit(1)).grid(row=1, column=0,sticky='wens',padx=5,pady=5)#кнопка с цифрой 1
tk.Button(text='2',bg='#FF8A8A',bd=10,command= lambda : add_digit(2)).grid(row=1, column=1,sticky='wens',padx=5,pady=5)#кнопка с цифрой 2
tk.Button(text='3',bg='#FF8A8A',bd=10,command= lambda : add_digit(3)).grid(row=1, column=2,sticky='wens',padx=5,pady=5)#кнопка с цифрой 3
tk.Button(text='4',bg='#FF8A8A',bd=10,command= lambda : add_digit(4)).grid(row=2, column=0,sticky='wens',padx=5,pady=5)#кнопка с цифрой 4
tk.Button(text='5',bg='#FF8A8A',bd=10,command= lambda : add_digit(5)).grid(row=2, column=1,sticky='wens',padx=5,pady=5)#кнопка с цифрой 5
tk.Button(text='6',bg='#FF8A8A',bd=10,command= lambda : add_digit(6)).grid(row=2, column=2,sticky='wens',padx=5,pady=5)#кнопка с цифрой 6
tk.Button(text='7',bg='#FF8A8A',bd=10,command= lambda : add_digit(7)).grid(row=3, column=0,sticky='wens',padx=5,pady=5)#кнопка с цифрой 7
tk.Button(text='8',bg='#FF8A8A',bd=10,command= lambda : add_digit(8)).grid(row=3, column=1,sticky='wens',padx=5,pady=5)#кнопка с цифрой 8
tk.Button(text='9',bg='#FF8A8A',bd=10,command= lambda : add_digit(9)).grid(row=3, column=2,sticky='wens',padx=5,pady=5)#кнопка с цифрой 9
tk.Button(text='0',bg='#FF8A8A',bd=10,command= lambda : add_digit(0)).grid(columnspan=2,row=4, column=0,sticky='wens',padx=5,pady=5)#кнопка с цифрой 0
tk.Button(text='+',bg='#FF8A8A',bd=10,command= lambda : add_characters("+")).grid(row=1, column=3,sticky='wens',padx=5,pady=5)#кнопка с знаком +
tk.Button(text='-',bg='#FF8A8A',bd=10,command= lambda : add_characters("-")).grid(row=2, column=3,sticky='wens',padx=5,pady=5)#кнопка с знаком -
tk.Button(text='*',bg='#FF8A8A',bd=10,command= lambda : add_characters("*")).grid(row=3, column=3,sticky='wens',padx=5,pady=5)#кнопка с знаком *
tk.Button(text='/',bg='#FF8A8A',bd=10,command= lambda : add_characters("/")).grid(row=4, column=3,sticky='wens',padx=5,pady=5)#кнопка с знаком /
tk.Button(text='=',bg='#FF8A8A',bd=10,command= counting_the_response).grid(row=4, column=2,sticky='wens',padx=5,pady=5)#кнопка с знаком =
win.grid_columnconfigure(0,minsize=60)
win.grid_columnconfigure(1,minsize=60)
win.grid_columnconfigure(2,minsize=60)
win.grid_rowconfigure(1,minsize=60)
win.grid_rowconfigure(2,minsize=60)
win.grid_rowconfigure(3,minsize=60)
win.grid_rowconfigure(4,minsize=60)
win.mainloop()
😀😃
Спасибо