Как решить квадратное уравнение в питоне
Перейти к содержимому

Как решить квадратное уравнение в питоне

  • автор:

Решение квадратного уравнения | Python

Необходимо решить квадратное уравнение Формат ввода Вводится 3 вещественных числа a, b, c — коэффициенты уравнения вида: ax^2+bx+c=0ax Формат вывода Если у уравнения нет решений — следует вывести «No solution». Если корней конечное число — их нужно вывести через пробел в порядке возрастания с точностью до сотых. Если корней неограниченное число — следует вывести «Infinite solutions». Примечание Обратите внимание, что ограничения на значения коэффициентов отсутствуют.

a = float(input()) b = float(input()) c = float(input()) x1 = float(0.00) x2 = float(0.00) if a == 0 and b == 0 and c == 0: print("Infinite solutions") elif a == 0 and b != 0 and c != 0: x1 = -(c / b) print("%.2f" % x1) elif a == 0 and b == 0 and c != 0: print("No solution") # no sol elif a == 0 and b != 0 and c == 0: x1 = 0 print("%.2f" % x1) elif b == 0 and c == 0 and a != 0: x1 = 0 print("%.2f" % x1) elif c == 0 and b != 0 and a != 0: x1 = 0 x2 = -(b / a) print(min("%.2f" % x1, "%.2f" % x2), max("%.2f" % x1, "%.2f" % x2), sep=' ') elif b == 0 and a != 0 and c != 0: if (-(c / a)) < 0: print("No solution") else: x1 = (-c / a) ** 0.5 x2 = -((-c / a) ** 0.5) print(min("%.2f" % x1, "%.2f" % x2), max("%.2f" % x1, "%.2f" % x2), sep=' ') elif a != 0 and b != 0 and c != 0: disc = (b ** 2) - (4 * a * c) # discriminant if disc < 0: print("No solution") elif disc == 0: x1 = (-b / (2 * a)) print("%.2f" % x1) elif disc >0: x1 = (-b - (disc ** 0.5)) / (2 * a) x2 = (-b + (disc ** 0.5)) / (2 * a) print(min("%.2f" % x1, "%.2f" % x2), max("%.2f" % x1, "%.2f" % x2), sep=' ') 

Итог: 13 тестов код проходит, а на 14-ом ловлю ошибку «Wrong answer(WA)» UPD.Итог2.0: Примитивная ликвидация %f форматтера спасла ситуацию и код прошёл все тесты, после чего на пол экрана проявилась табличка с зелёным шрифтом «Решена полностью». Спасибо всем причастным к решению моей проблемы как советами, так и комментариями, задачу требовалось решить зная лишь 3 типа данных, условные и логические операторы — задача выполнена. Рабочий код ниже:

a = float(input()) b = float(input()) c = float(input()) x1 = float(0.00) x2 = float(0.00) if a == 0 and b == 0 and c == 0: print("Infinite solutions") elif a == 0 and b != 0 and c != 0: x1 = -(c / b) print(x1) elif a == 0 and b == 0 and c != 0: print("No solution") # no sol elif a == 0 and b != 0 and c == 0: x1 = 0 print(x1) elif b == 0 and c == 0 and a != 0: x1 = 0 print(x1) elif c == 0 and b != 0 and a != 0: x1 = 0 x2 = -(b / a) print(min(x1, x2), max(x1, x2), sep=' ') elif b == 0 and a != 0 and c != 0: if (-(c / a)) < 0: print("No solution") else: x1 = (-c / a) ** 0.5 x2 = -((-c / a) ** 0.5) print(min(x1, x2), max(x1, x2), sep=' ') elif a != 0 and b != 0 and c != 0: disc = (b ** 2) - (4 * a * c) # discriminant if disc < 0: print("No solution") elif disc == 0: x1 = (-b / (2 * a)) print("%.2f" % x1) elif disc >0: x1 = (-b - (disc ** 0.5)) / (2 * a) x2 = (-b + (disc ** 0.5)) / (2 * a) print(min(x1, x2), max(x1, x2), sep=' ') 

Укороченный код:

a = float(input()) b = float(input()) c = float(input()) x1 = float(0.00) x2 = float(0.00) if a == 0 and b == 0 and c == 0: print("Infinite solutions") elif a == 0 and b != 0 and c != 0: x1 = -(c / b) print(x1) elif a == 0 and b == 0 and c != 0: print("No solution") # no sol elif a == 0 and b != 0 and c == 0: x1 = 0 print(x1) else: disc = (b ** 2) - (4 * a * c) # discriminant if disc == 0: x1 = (-b) / (2 * a) print(x1) elif disc > 0: x1 = (-b - (disc ** 0.5)) / (2 * a) x2 = (-b + (disc ** 0.5)) / (2 * a) print(min(x1, x2), max(x1, x2), sep=' ') elif disc < 0: print("No solution") 

Найти корни квадратного уравнения

Таким образом, программа для нахождения корней квадратного уравнения должна иметь три ветви условного оператора.

Функция float преобразует переданный ей аргумент в вещественное число.

import math print("Введите коэффициенты для уравнения") print("ax^2 + bx + c = 0:") a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) discr = b ** 2 - 4 * a * c print("Дискриминант D = %.2f" % discr) if discr > 0: x1 = (-b + math.sqrt(discr)) / (2 * a) x2 = (-b - math.sqrt(discr)) / (2 * a) print("x1 = %.2f \nx2 = %.2f" % (x1, x2)) elif discr == 0: x = -b / (2 * a) print("x = %.2f" % x) else: print("Корней нет")

Примеры выполнения кода:

Введите коэффициенты для уравнения ax^2 + bx + c = 0: a = 2 b = 4 c = 2 Дискриминант D = 0.00 x = -1.00
Введите коэффициенты для уравнения ax^2 + bx + c = 0: a = 3.2 b = -7.8 c = 1 Дискриминант D = 48.04 x1 = 2.30 x2 = 0.14
Введите коэффициенты для уравнения ax^2 + bx + c = 0: a = 8 b = 4 c = 2 Дискриминант D = -48.00 Корней нет

Обратите внимание, что для данной программы коэффициент a не должен быть равен нулю. Иначе в теле условного оператора будет происходить попытка деления на 0, что приведет к аварийному завершению программы.

Если a = 0, то квадратное уравнение превращается в линейное, которое решается иным способом. Оно всегда имеет один корень.

X Скрыть Наверх

Решение задач на Python

Графический калькулятор квадратных уравнений на Py

Рассмотрим пример создания графического интерфейса (GUI) на Python. В качестве "жертвы" напишем простенькую программу - решатель квадратных уравнений. Наше задание мы разобъем на несколько частей.

Часть первая: функция решения квадратного уравнения.

Напомним, что квадратным является уравнение вида:

Есть несколько способов решить квадратное уравнение, мы выберем решение через дискриминант.

Используя эту формулу мы можем вывести решение. Если дискриминант больше или равен нулю, то корни уравнения высчитываются по формуле:

Если же дискриминант меньше нуля, то уравнение не имеет решений.

Превратим данные формулы в код:

def solver(a,b,c): """ Решает квадратное уравнение и выводит отформатированный ответ """ # находим дискриминант D = b*b - 4*a*c if D >= 0: x1 = (-b + sqrt(D)) / (2*a) x2 = (-b - sqrt(D)) / (2*a) text = "The discriminant is: %s \n X1 is: %s \n X2 is: %s \n" % (D, x1, x2) else: text = "The discriminant is: %s \n This equation has no solutions" % D return text

Чтобы все работало не забудьте импортировать функцию sqrt из модуля math.

from math import sqrt

Поскольку мы будем выводить результат в специально созданном виджете - мы сразу же вставляем полученный ответ в отформатированную строку и возвращаем ее.

Теперь пора переходить к созданию графической оболочки для нашего приложения.

Часть вторая: создаем GUI для программы

Для простоты будем создавать GUI встроенными средствами Python, поэтому импортируем все из библиотеки Tkinter:

from Tkinter import *

В Python версии 3.х название модуля следует писать с маленькой буквы - tkinter.

Далее создаем само окно и размещаем на нем необходимые виджеты:

# родительский элемент root = Tk() # устанавливаем название окна root.title("Quadratic calculator") # устанавливаем минимальный размер окна root.minsize(325,230) # выключаем возможность изменять окно root.resizable(width=False, height=False) # создаем рабочую область frame = Frame(root) frame.grid() # поле для ввода первого аргумента уравнения (a) a = Entry(frame, width=3) a.grid(row=1,column=1,padx=(10,0)) # текст после первого аргумента a_lab = Label(frame, text="x**2+").grid(row=1,column=2) # поле для ввода второго аргумента уравнения (b) b = Entry(frame, width=3) b.grid(row=1,column=3) # текст после второго аргумента b_lab = Label(frame, text="x+").grid(row=1, column=4) # поле для ввода третьего аргумента уравнения (с) c = Entry(frame, width=3) c.grid(row=1, column=5) # текст после третьего аргумента c_lab = Label(frame, text="= 0").grid(row=1, column=6) # кнопка решить but = Button(frame, text="Solve").grid(row=1, column=7, padx=(10,0)) # место для вывода решения уравнения output = Text(frame, bg="lightblue", font="Arial 12", width=35, height=10) output.grid(row=2, columnspan=8) # запускаем главное окно root.mainloop()

Если вы в точности повторили указанный код, то после запуска скрипта у вас получится примерно следующее окно:

окно калькулятора квадратных уравнений с Python и Tkinter

Отлично, программа работает. Осталось объяснить Python как связать эти две части.

Часть третья: объединяем все воедино

Задача перед нами стоит следующая - написать функцию, которая будет брать числа из полей для ввода, передавать их функции решения квадратного уравнения и выводить результат в поле для вывода. Конечно, все это можно реализовать в одной функции, но лучше разделить на несколько:

Функция вставки информации:

def inserter(value): """ Inserts specified value into text widget """ output.delete("0.0","end") output.insert("0.0",value)

Функция inserter предельно проста: очищает поле для ввода и вставляет туда переданный ей аргумент value.

Напишем функцию обработки введенной информации. Назовем ее handler:

def handler(): """ Get the content of entries and passes result to the output area """ try: # make sure that we entered correct values a_val = float(a.get()) b_val = float(b.get()) c_val = float(c.get()) inserter(solver(a_val, b_val, c_val)) except ValueError: inserter("Make sure you entered 3 numbers")

В зависимости от данных введенных в поля для ввода передает функции inserter либо результат решения уравнения, либо сообщение о неверно введенных данных.

Чтобы все работало, следует изменить строку создания виджета Button следующим образом:

but = Button(frame, text="Solve", command=handler).grid(row=1, column=7, padx=(10,0))

Теперь можно спокойно пользоваться нашей программой:

Пример программы с GUI на Python и Tkinter #1 Пример программы с GUI на Python и Tkinter #2
Дискриминант больше нуля Дискриминант равен нулю
Пример программы с GUI на Python и Tkinter #3 Пример программы с GUI на Python и Tkinter #4
Дискриминант меньше нуля. Решений нет Введены не все аргументы

Часть четвертая: необязательная

Можно добавить немного удобства для нашей программы. Проблема в том, что каждый раз вводя новые значения нам приходится удалять старые, что не очень комфортно. Напишем функцию, которая будет очищать поле для ввода после клика по нему.

def clear(event): """ Clears entry form """ caller = event.widget caller.delete("0", "end")

Таким образом мы очищаем виджет, вызвавший данную функцию. Чтобы все работало, добавьте следующие строки после создания виджетов, но до размещения. Например, после строки a = Entry(. , но до строки a.grid(.

a.bind("", clear) b.bind("", clear) c.bind("", clear)

Готово. Программа работает, Вы великолепны!

Исходный код калькулятора квадратных уравнений с GUI на GitHub

Решение квадратного уравнения в Python

Квадратное уравнение образовано от латинского термина «quadrates», что означает «квадрат». Это специальный тип уравнения, имеющий форму:

Здесь «x» неизвестное, которое вы должны найти, «a», «b», «c» задает числа, такие что «a» не равно 0. Если a = 0, то уравнение становится линейным, а не квадратным. В уравнении a, b и c называются коэффициентами.

Возьмем пример решения квадратного уравнения 8x 2 + 16x + 8 = 0.

# import complex math module import cmath a = float(input('Enter a: ')) b = float(input('Enter b: ')) c = float(input('Enter c: ')) # calculate the discriminant d =(b**2) -(4*a*c) # find two solutions sol1 =(-b-cmath.sqrt(d))/(2*a) sol2 =(-b+cmath.sqrt(d))/(2*a) print('The solution are and '.format(sol1,sol2))
Enter a: 8 Enter b: 5 Enter c: 9 The solution are(-0.3125-1.0135796712641785j) and(-0.3125+1.0135796712641785j)

В первой строке мы импортировали модуль cmath и определили три переменные с именами a, b и c, которые получают ввод от пользователя. Затем вычисляем дискриминант по формуле. С помощью метода cmath.sqrt() мы вычислили два решения и распечатали результат.

Второй метод

Мы можем получить решение квадратного уравнения, используя прямую формулу. Давайте разберем следующий пример.

Вышеприведенная формула состоит из следующих случаев.

  • Если b 2 < 4ac, то корни комплексные (не вещественные). Например – x 2 + x + 1, корни -0,5 + i1,73205 и +0,5 – i1,73205.
  • Если b 2 == 4ac, то оба корня одинаковы. Например – x 2 + x + 1, корни равны -0,5 + i1,73205 и +0,5 – i1,73205.
  • Если b 2 > 4ac, то корни действительны и различны. Например – х 2 – 7 х – 12, корни 3 и 4.
# Python program to find roots of quadratic equation import math # function for finding roots def findRoots(a, b, c): dis_form = b * b - 4 * a * c sqrt_val = math.sqrt(abs(dis_form)) if dis_form > 0: print(" real and different roots ") print((-b + sqrt_val) /(2 * a)) print((-b - sqrt_val) /(2 * a)) elif dis_form == 0: print(" real and same roots") print(-b /(2 * a)) else: print("Complex Roots") print(- b /(2 * a), " + i", sqrt_val) print(- b /(2 * a), " - i", sqrt_val) a = int(input('Enter a:')) b = int(input('Enter b:')) c = int(input('Enter c:')) # If a is 0, then incorrect equation if a == 0: print("Input correct quadratic equation") else: findRoots(a, b, c)
Enter a:7 Enter b:5 Enter c:2 Complex Roots -0.35714285714285715 + i 5.5677643628300215 -0.35714285714285715 - i 5.5677643628300215

В приведенном выше коде мы импортировали математический модуль и определили формулу для вычисления дискриминанта. Затем мы определили функцию findRoots, которая принимает три целых значения в качестве аргументов. Затем мы проверили корни с помощью оператора if-elif-else.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *