from tkinter import *
class Main(Frame):
def __init__(self, root):
super(Main, self).__init__(root)
self.build()
def build(self):
self.formula = "0"
self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"), bg="#000", foreground="#FFF")
self.lbl.place(x=11, y=50)
btns = [
"C", "DEL", "*", "=",
"1", "2", "3", "/",
"4", "5", "6", "+",
"7", "8", "9", "-",
"(", "0", ")", "X^2"
]
x = 10
y = 140
for bt in btns:
com = lambda x=bt: self.logicalc(x)
Button(text=bt, bg="#FFF",
font=("Times New Roman", 15),
command=com).place(x=x, y=y,
width=115,
height=79)
x += 117
if x > 400:
x = 10
y += 81
def logicalc(self, operation):
if operation == "C":
self.formula = ""
elif operation == "DEL":
self.formula = self.formula[0:-1]
elif operation == "X^2":
self.formula = str((eval(self.formula))**2)
elif operation == "=":
self.formula = str(eval(self.formula))
else:
if self.formula == "0":
self.formula = ""
self.formula += operation
self.update()
def update(self):
if self.formula == "":
self.formula = "0"
self.lbl.configure(text=self.formula)
if __name__ == '__main__':
root = Tk()
root["bg"] = "#000"
root.geometry("485x550+200+200")
root.title("Калькулятор")
root.resizable(False, False)
app = Main(root)
app.pack()
root.mainloop()
Объяснение:
1.Создаём окно 485 на 550. Размеры не важны, мне понравились такие. Так же указываем, что окно не будет изменяться.
class Main(Frame):
def __init__(self, root):
super(Main, self).__init__(root)
self.build()
def build(self):
pass
def logicalc(self, operation):
pass
def update():
pass
if __name__ == '__main__':
root = Tk()
root["bg"] = "#000"
root.geometry("485x550+200+200")
root.title("Калькулятор")
root.resizable(False, False)
app = Main(root)
app.pack()
root.mainloop()
2.Делаем кнопочки
В методе build создаём такой список:
btns = [
"C", "DEL", "*", "=",
"1", "2", "3", "/",
"4", "5", "6", "+",
"7", "8", "9", "-",
"+/-", "0", "%", "X^2"
]
Он отвечает за все кнопки, отображающиеся у нас в окне.
3.Мы создали список, теперь проходимся циклом и отображаем эти кнопки. Для этого в том же методе пишем следующее:
x = 10
y = 140
for bt in btns:
com = lambda x=bt: self.logicalc(x)
Button(text=bt, bg="#FFF",
font=("Times New Roman", 15),
command=com).place(x=x, y=y,
width=115,
height=79)
x += 117
if x > 400:
x = 10
y += 81
4.Замечательно, у нас есть кнопочки. Добавляем надпись с выводом результата. Я хочу что бы текст был слева, следовательно, атрибутов выравнивания текста писать не нужно.
self.formula = "0"
self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"),
bg="#000", foreground="#FFF")
self.lbl.place(x=11, y=50)
5.Пишем логику
def logicalc(self, operation):
if operation == "C":
self.formula = ""
elif operation == "DEL":
self.formula = self.formula[0:-1]
elif operation == "X^2":
self.formula = str((eval(self.formula))**2)
elif operation == "=":
self.formula = str(eval(self.formula))
else:
if self.formula == "0":
self.formula = ""
self.formula += operation
self.update()
def update(self):
if self.formula == "":
self.formula = "0"
self.lbl.configure(text=self.formula)
Так, как у нас нет ввода с клавиатуры, мы можем позволить себе сделать так, просто проверить на спец. кнопки (C, DEL, =) и в остальных случаях просто добавить это к формуле.
за внимание!)
1. Число не меньше 50 и четное: 50
2. Опечатка, вероятно. Либо наибольшее X - тогда 99, либо наименьшее натуральное x, и тогда это будет 1, либо НЕ меньше 100, тогда 101
3. Немного запутано, но по идее: число должно быть четным и меньше 10. Максимальное такое число: 8
4. X больше либо равен 7, или x меньше 6. Единственное число, которое НЕ подходит под эту формулу: 6
10. Обычное уравнение вида При том что n только натурален. Очевидно, что n = 2
17. Надо просмотреть каждую пару чисел и поставить плюсик, если первое больше 15 или второе больше 9. Я загнул пять пальцев, лучше меня перепроверить
25. У эсминца всего 2500 из которых 500 принадлежат также и фрегату. А всего-всего их 4500. Значит ТОЛЬКО эсминцу принадлежат 2000, ТОЛЬКО фрегату тоже 2000, а фрегату всего 2000+500 = 2500. Я понимаю, что ничего из этой писанины понять невозможно, так что прилагаю картиночку, написанную замороженной куриной лапой.
45. Столько писанины, а проще взять листочек в клеточку и самому побыть роботом, исполняя команды. Если у меня все верно, то за один цикл получается общее смещение на 1 вверх и 1 вправо. Значит за 5 циклов будет смещение (5,5) и чтоб переместиться в начало надо дать команду (-5,-5)
53. Третья строчка аналогична: a = 2*4 + 7*3. Любой второклассник скажет, что это 29. Четвертая строчка аналогична: b = 30-29 = 1. Таким образом, у нас a = 29, b = 1. А просят найти именно b. В ответ пишем 1