Программа «Простейший калькулятор»
Написать программу, которая выполняет над двумя вещественными числами одну из четырех арифметических операций (сложение, вычитание, умножение или деление). Программа должна завершаться только по желанию пользователя.
Решение задачи на языке программирования Python
Чтобы программа самопроизвольно не завершалась, в ней надо запустить бесконечный цикл. Выход из него будем осуществлять с помощью оператора break , если пользователь вводит определенный символ вместо знака арифметической операции.
Если пользователь ввел знак, который не является ни знаком арифметической операции, ни символом-«прерывателем» работы программы, то вывести сообщение о некорректном вводе.
Если был введен один из четырех знаков операции, запросить ввод двух чисел.
В зависимости от знака операции выполнить соответствующее арифметическое действие.
Если было выбрано деление, необходимо проверить не является ли нулем второе число. Если это так, то сообщить о невозможности деления.
print("0 в качестве знака операции" "\nзавершит работу программы\n") while True: s = input("Знак (+, -, *, /): ") if s == '0': break if s in ('+', '-', '*', '/'): a = float(input("a = ")) b = float(input("b = ")) if s == '+': print("%.2f" % (a + b)) elif s == '-': print("%.2f" % (a - b)) elif s == '*': print("%.2f" % (a * b)) elif s == '/': if b != 0: print("%.2f" % (a / b)) else: print("Деление на ноль!") else: print("Неверный знак операции!")
Пример выполнения программы:
0 в качестве знака операции завершит работу программы Знак (+, -, *, /): / a = -9.34 b = 3.215 -2.91 Знак (+, -, *, /): & Неверный знак операции! Знак (+, -, *, /): - a = 4005 b = 1358 2647.00 Знак (+, -, *, /): 0
Вариант решение задачи с помощью оператора match (появился в Python 3.10):
print("0 в качестве знака - выход из программы\n") while True: s = input("Знак (+, -, *, /): ") if s in ('+', '-', '*', '/'): a = float(input("a = ")) b = float(input("b = ")) match s: case '+': print("%.2f" % (a + b)) case '-': print("%.2f" % (a - b)) case '*': print("%.2f" % (a * b)) case '/': if b != 0: print("%.2f" % (a / b)) else: print("Деление на ноль!") case '0': break case _: print("Неверный знак операции!")
X Скрыть Наверх
Решение задач на Python
Кнопка возведения в корень в калькуляторе
Есть программа, это калькулятор. Задача добавить кнопку которая будет извлекать корень из введеного. Кнопку я добавил, но как извлечь корень — не могу понять, пробую при помощи функцию math и math.sqrt() но не выходит, пробовал просто оператор извлечения ** — тоже не хочет. Кнопка 17. Подскажите как сделать. UPD: пытаюсь функцией сделать которая по кнопке вызывается, тоже не хочет, Вот код калькулятора:
from tkinter import * import math #from tkinter.ttk import Radiobutton window = Tk() oper=["+","-","*","/"] number = IntVar() window.geometry('200x250') global operand1, lastop, lastres lastop=0 operand1=0 lastres=0 def add(): label1["text"] = label1["text"] + str(number.get()) label2["text"] = label2["text"] + str(number.get()) def op(): global operand1 global lastop operand1=int(label1["text"]) label1["text"] = "" lastres=operand1 lastop=number.get() label2["text"] = label2["text"] + label1["text"] label2["text"] = label2["text"] + oper[lastop-11] #if lastres!=0: #operand1+=lastres #print("Увеличили операнд1", operand1) #lastres=0 if lastop==11: print("lastres= ",lastres,"operand1= ",operand1) lastres+=operand1 operand1+=int(label1["text"]) print("lastres= ",lastres,"operand1= ",operand1) def vyvod(): global operand1 global lastop global lastres if lastop==11: operand1+=int(label1["text"]) label1["text"] = str(operand1) label2["text"] = label2["text"] + " = " + label1["text"] if lastop==12: operand1-=int(label1["text"]) label1["text"] = str(operand1) label2["text"] = label2["text"] + " = " + label1["text"] elif lastop==13: operand1*=int(label1["text"]) label1["text"] = str(operand1) label2["text"] = label2["text"] + " = " + label1["text"] elif lastop==14: operand1/=int(label1["text"]) label1["text"] = str(operand1) label2["text"] = label2["text"] + " = " + label1["text"] elif lastop==17: operand1**=int(label1["text"]) label1["text"] = str(operand1) label2["text"] = label2["text"] + " = " + label1["text"] else: print("Ошибка в операции") def koren(): operand1=int(label1(math.sqrt(["text"]))) label1["text"] = str(operand1) label2["text"] = label2["text"] + " = " + label1["text"] def clean(): global operand1 global lastop global lastres operand1=0 lastop=0 lastres=0 label1["text"] = "" label2["text"] = "" btn1=Radiobutton(window,indicatoron=0,text="1",width=2,variable=number,value=1,command=add,bg="lightgreen") btn2=Radiobutton(window,indicatoron=0,text="2",width=2,variable=number,value=2,command=add,bg="lightgreen") btn3=Radiobutton(window,indicatoron=0,text="3",width=2,variable=number,value=3,command=add,bg="lightgreen") btn4=Radiobutton(window,indicatoron=0,text="4",width=2,variable=number,value=4,command=add,bg="lightgreen") btn5=Radiobutton(window,indicatoron=0,text="5",width=2,variable=number,value=5,command=add,bg="lightgreen") btn6=Radiobutton(window,indicatoron=0,text="6",width=2,variable=number,value=6,command=add,bg="lightgreen") btn7=Radiobutton(window,indicatoron=0,text="7",width=2,variable=number,value=7,command=add,bg="lightgreen") btn8=Radiobutton(window,indicatoron=0,text="8",width=2,variable=number,value=8,command=add,bg="lightgreen") btn9=Radiobutton(window,indicatoron=0,text="9",width=2,variable=number,value=9,command=add,bg="lightgreen") btn0=Radiobutton(window,indicatoron=0,text="0",width=2,variable=number,value=0,command=add,bg="lightgreen") btn11=Radiobutton(window,indicatoron=0,width=2,text="+",variable=number,value=11,command=op,bg="lightblue") btn12=Radiobutton(window,indicatoron=0,width=2,text="-",variable=number,value=12,command=op,bg="lightblue") btn13=Radiobutton(window,indicatoron=0,width=2,text="*",variable=number,value=13,command=op,bg="lightblue") btn14=Radiobutton(window,indicatoron=0,width=2,text="/",variable=number,value=14,command=op,bg="lightblue") btn15=Radiobutton(window,indicatoron=0,width=2,text="=",variable=number,value=15,command=vyvod) btn16=Radiobutton(window,indicatoron=0,width=2,text="C",variable=number,value=16,command=clean,bg="red") btn17=Radiobutton(window,indicatoron=0,width=2,text="√",variable=number,value=17,command=koren,bg="lightblue") btn18=Radiobutton(window,indicatoron=0,width=2,text="DL",variable=number,value=18,command=clean,bg="red") btn1.grid(row=0, column=0) btn2.grid(row=0, column=1) btn3.grid(row=0, column=2) btn4.grid(row=1, column=0) btn5.grid(row=1, column=1) btn6.grid(row=1, column=2) btn7.grid(row=2, column=0) btn8.grid(row=2, column=1) btn9.grid(row=2, column=2) btn0.grid(row=3, column=1) btn11.grid(row=0, column=3) btn12.grid(row=1, column=3) btn13.grid(row=2, column=3) btn14.grid(row=3, column=3) btn15.grid(row=3, column=4) btn16.grid(row=3, column=0) btn17.grid(row=3, column=4) btn18.grid(row=3, column=2) frame = Frame(master=window, height=1, borderwidth=5,bg="red") frame.grid(row=4, column=0,columnspan=3) label1 = Label(master=window, width=15, height=1,text="", bg="yellow") label1.grid(row=4, column=0,columnspan=3,pady=10) label2 = Label(master=window, width=30, height=1,text="", bg="yellow") label2.grid(row=5, column=0,columnspan=6,sticky = W) window.mainloop()
Как извлечь корень в Python
Квадратный корень из числа — это значение, которое при умножении само на себя дает исходное число. Каждое положительное число имеет два квадратных корня (то же значение с положительным и отрицательным знаками). Ниже приводится запись квадратного корня:
√25 = ±5
Для отрицательного числа результат извлечения квадратного корня включает комплексные числа, обсуждение которых выходит за рамки данной статьи.
Математическое представление квадрата числа
Все мы в детстве узнали, что, когда число умножается само на себя, мы получаем его квадрат. Также квадрат числа можно представить как многократное умножение этого числа. Попробуем разобраться в этом на примере.
Предположим, мы хотим получить квадрат 5. Если мы умножим число (в данном случае 5) на 5, мы получим квадрат этого числа. Для обозначения квадрата числа используется следующая запись:
5 2 = 25
При программировании на Python довольно часто возникает необходимость использовать функцию извлечения квадратного корня. Есть несколько способов найти квадратный корень числа в Python.
1. Используя оператор возведения в степень
num = 25 sqrt = num ** (0.5) print("Квадратный корень из числа "+str(num)+" это "+str(sqrt))Квадратный корень из числа 25 это 5.0Объяснение: Мы можем использовать оператор «**» в Python, чтобы получить квадратный корень. Любое число, возведенное в степень 0.5, дает нам квадратный корень из этого числа.
2. Использование math.sqrt()
Квадратный корень из числа можно получить с помощью функции sqrt() из модуля math , как показано ниже. Далее мы увидим три сценария, в которых передадим положительный, нулевой и отрицательный числовые аргументы в sqrt() .
a. Использование положительного числа в качестве аргумента.
import math num = 25 sqrt = math.sqrt(num) print("Квадратный корень из числа " + str(num) + " это " + str(sqrt))Вывод: Квадратный корень из числа 25 это 5.0 .
b. Использование ноля в качестве аргумента.
import math num = 0 sqrt = math.sqrt(num) print("Квадратный корень из числа " + str(num) + " это " + str(sqrt))Вывод: Квадратный корень из числа 0 это 0.0 .
c. Использование отрицательного числа в качестве аргумента.
import math num = -25 sqrt = math.sqrt(num) print("Квадратный корень из числа " + str(num) + " это " + str(sqrt))Traceback (most recent call last): File "C:\wb.py", line 3, in sqrt = math.sqrt(num) ValueError: math domain errorОбъяснение: Когда мы передаем отрицательное число в качестве аргумента, мы получаем следующую ошибку «math domain error». Из чего следует, что аргумент должен быть больше 0. Итак, чтобы решить эту проблему, мы должны использовать функцию sqrt() из модуля cmath .
3. Использование cmath.sqrt()
Ниже приведены примеры применения cmath.sqrt() .
а. Использование отрицательного числа в качестве аргумента.
Как извлечь корень в Python (sqrt)
Если вам нужно найти сторону квадрата, когда известна одна лишь его площадь, или вы намерены рассчитать расстояние между двумя точками в декартовых координатах, то без особого инструмента не обойтись. Математики прошлого придумали для этих вычислений квадратный корень, а разработчики Python воплотили его в функции sqrt() .
Но обо всём по порядку.
Что такое квадратный корень
Корнем квадратным из числа "X" называется такое число "Y", которое при возведении его во вторую степень даст в результате то самое число "X".
Операция нахождения числа "Y" называется извлечением квадратного корня из "X". В математике для её записи применяют знак радикала:
Нотация питона отличается в обоих случаях, и возведение в степень записывается при помощи оператора " ** ":
a = 2 b = a ** 2 print(b) > 4
А квадратный корень в питоне представлен в виде функции sqrt() , которая существует в рамках модуля math . Поэтому, чтобы начать работу с корнями, модуль math нужно предварительно импортировать:
Функция sqrt() принимает один параметр — то число, из которого требуется извлечь квадратный корень. Тип данных возвращаемого значения — float .
import math import random # пример использования функции sqrt() # отыщем корень случайного числа и выведем его на экран rand_num = random.randint(1, 100) sqrt_rand_num = math.sqrt(rand_num) print('Случайное число = ', rand_num) > Случайное число = 49 print('Корень = ', sqrt_rand_num) > Корень = 7.0
Квадратный корень
Положительное число
Именно на работу с неотрицательными числами "заточена" функция sqrt() . Если число больше или равно нулю, то неважно, какой у него тип. Вы можете извлекать корень из целых чисел:
import math print(math.sqrt(100)) > 10.0
А можете — из вещественных:
import math print(math.sqrt(111.5)) > 10.559356040971437
Легко проверить корректность полученных результатов с помощью обратной операции возведения в степень:
print(math.sqrt(70.5)) > 8.396427811873332 # возвести в степень можно так print(8.396427811873332 ** 2) > 70.5 # а можно с помощью функции pow() print(pow(8.396427811873332, 2)) > 70.5
Отрицательное число
Функция sqrt() не принимает отрицательных аргументов. Только положительные целые числа, вещественные числа и ноль.
Такая работа функции идёт вразрез с математическим определением. В математике корень спокойно извлекается из чисел меньше 0. Вот только результат получается комплексным, а таким он нужен для относительно узкого круга реальных задач, вроде расчетов в сфере электроэнергетики или физики волновых явлений.
Поэтому, если передадите отрицательное число в sqrt() , то получите ошибку:
print(math.sqrt(-1)) > ValueError: math domain error
Ноль
Функция sqrt() корректно отрабатывает с нулём на входе. Результат тривиален и ожидаем:
Кубический корень
Само название функции sqrt() намекает нам на то, что она не подходит для извлечения корня степени отличной от двойки. Поэтому для извлечения кубических корней, сначала необходимо вспомнить связь между степенями и корнями, которую продемонстрируем на корне квадратном:
Вышеуказанное соотношение несложно доказать и для других степеней вида 1/n .
# Квадратный корень можно извлечь с помощью операции возведения в степень "**" a = 4 b = a ** 0.5 print(b) > 2.0
В случае с квадратным или кубическим корнем эти операции действительно эквивалентны, но, вообще говоря, в математике извлечение корня и возведение в дробную степень имеют существенные отличия при рациональных степенях вида m/n, где m != 1. Формально, в дробно-рациональную степень можно возводить только положительные вещественные числа. В противном случае возникают проблемы:
Таким образом, извлечь кубический корень в Python можно следующим образом:
print(pow(8, 1/3)) > 2.0
Корень n-степени
То, что справедливо для корня третьей степени, справедливо и для корней произвольной степени.
# извлечём корень 17-й степени из числа 5600 x = 5600 y = 17 z = pow(x, (1/y)) print(z) > 1.6614284717080507 # проверяем корректность результата print(pow(z, y)) > 5600.0
Но раз уж мы разбираемся с математической темой, то попытаемся мыслить более обобщённо. С помощью генератора случайных чисел с заданной точностью будем вычислять корень случайной степени из случайного числа:
import random # точность можно задать на ваше усмотрение x = random.randint(1, 10000) y = random.randint(1, 100) z = pow(x, (1 / y)) print('Корень степени', y, 'из числа', x, 'равен', z) # при проверке вероятны незначительные расхождения из-за погрешности вычислений print('Проверка', pow(z, y)) # но специально для вас автор накликал целочисленный результат > Корень степени 17 из числа 6620 равен 1.6778624404513571 > Проверка 6620.0
Решение реальной задачи с использованием sqrt
Корень — дитя геометрии. Когда Пифагор доказал свою знаменитую теорему, людям тут же захотелось вычислять стороны треугольников, проверять прямоту внешних углов и сооружать лестницы нужной длины.
Соотношение a2 + b2 = c2, где "a" и "b" — катеты, а "c" — гипотенуза — естественным образом требует извлекать корни при поиске неизвестной стороны. Python-а под рукой у древних греков и вавилонян не было, поэтому считать приходилось методом приближений. Жизнь стала проще, но расчет теоремы Пифагора никто не отменял и в XXI веке.
Решим задачку про вышку сотовой связи. Заказчик требует рассчитать высоту сооружения, чтобы радиус покрытия был 23 километра. Мы неспешно отходим на заданное расстояние от предполагаемого места строительства и задумчиво смотрим под ноги. В голове появляются очертания треугольника с вершинами:
- Ваше местоположение;
- Центр Земли;
- Пиковая высота вышки.
Модель готова, приступаем к написанию кода:
import math # расстояние от вас до вышки from_you_to_base_station = 23 # радиус земли earth_radius = 6371 # расчет расстояния от центра земли до пика сооружения по теореме Пифагора height = math.sqrt(from_you_to_base_station ** 2 + earth_radius ** 2) # расчет высоты вышки(км) base_station_height = height - earth_radius print('Требуемая высота(м): ', round(base_station_height * 1000)) > Требуемая высота(м): 42
Расчёт выполнен, результат заказчику предоставлен. Можно идти пить чай и радоваться тому, что теперь ещё больше людей смогут звонить родным и сидеть в интернете.