Меню

Вывести корни квадратного уравнения питон

Введение в Python

Поиск

Новое на сайте

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дискриминант больше нуля Дискриминант равен нулю
Дискриминант меньше нуля. Решений нет Введены не все аргументы

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

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

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

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

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

Источник

Квадратное уравнение

Программа, позволяющая находить корни квадратного уравнения, – это один из примеров простых программ, которые можно написать на Python 3. Она хорошо подойдет для начинающих изучать этот язык программирования.

Постановка задачи

Уравнение, которое будем решать, выглядит следующим образом: a·x²+b·x+c=0. Пользователю предлагается ввести значения a, b и с в терминале. После этого программа посчитает дискриминант. На его основе найдем решения уравнения – значения x, для которых будет выполняться равенство.

Вот пример работы программы, которая будет написана.

Программа

Для решения квадратных уравнений на Python 3 напишем код, приведенный ниже. Разберем некоторые моменты, которые мы использовали в этой простой программе:

  • print — эта функция выводит на экран информацию.
  • input — выводит информацию и предлагает пользователю ввести данные.
  • b**2 — это возведение в степень, в данном случае переменная b возводится в квадрат.
  • str — эта функция приводит данные к строковому виду.
  • if-elif-else — это условные операторы в языке Python. Исходя из значения discriminant мы определяем количество корней квадратного уравнения.
  • discriminant ** 0.5 — с помощью такого способа извлекаем квадратный корень. В Python есть несколько способов извлечения корней, например, с помощью функции sqrt из библиотеки math. Про способы извлечения корней в Python описано в отдельной статье.
Читайте также:  Беседа зачем мы чистим зубы

Запустим программу и введём нужные коэффициенты.

Все посчитано, найдены два корня, которые будут являться решением квадратного уравнения.

Дополнительно

Хотелось бы уделить внимание ещё одному моменту. Если дискриминант отрицательный, то действительных корней нет. Но будут комплексные корни. Если мы хотим их обрабатывать, то следует изменить конструкцию условных операторов следующим образом:

Тогда пример решения уравнения будет выглядеть следующим образом:

Как видим, получили два комплексных корня.

Этот простой код написанный на Python 3 можно для обучения программированию немного усложнить:

  • Предлагать запрос в конце программы «Решить ещё одно уравнение (y/n): ». И если пользователь введет «y», то заново запросить коэффициенты. Это нужно делать в цикле. Подробнее о циклах в Python можно прочитать здесь.
  • Сделать проверку корректности ввода. Ведь пользователь вместо числа может ввести какую-нибудь строку, которая не будет корректно обработана. Про проверку на число описано в отдельной статье.

Источник

Как решать квадратные уравнения в Python

Если квадратные уравнения являются классической задачей в математике, то они также являются классической задачей в программировании. Их решение – идеальное упражнение для тех, кто только начинает программировать, поскольку оно включает ввод с клавиатуры, вывод на экран, арифметические и условные вычисления. Вы хотите узнать, как решать уравнения второй степени в Python?

Об этом я подробно расскажу в этой статье.

Итак, представьте уравнение ax² + bx + c = 0:

  • Вычисляем дискриминант: disc = b * b – 4 * a * c
  • Если он отрицательный, то уравнение не имеет решения.
  • Если disc больше нуля, вычисляем его корень: root = srqt(disc).
  • Вычислим решения: x_1 = (-b + root) / (2 * a) и x_2 = (-b – root) / (2 * a).

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

Получение значений коэффициентов

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

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

В этом случае мы должны запросить у пользователя три значения, так как три – это коэффициенты, которые обрабатываются в уравнении второй степени, которое, как вы помните, имеет следующий вид: ax² + bx + c = 0, где x – неизвестное, которое нужно вычислить, а a, b и c – коэффициенты.

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

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

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

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

Если вы заметили, этот код немного повторяется, так что мы будем использовать специальные возможности Python, чтобы избежать повторений. Эта часть необязательна, поэтому, если вы хотите, вы можете продолжить в следующем разделе, где мы начнем выполнять вычисления, но имейте в виду, что позже, когда я представлю полный код, я буду использовать эти оптимизации.

Чтобы улучшить этот код, я собираюсь использовать функции сжатия и распаковки списков.

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

Читайте также:  Pinedalntl trader как вывести

Итак, я могу создать список с тремя значениями (три коэффициента), используя следующий код:

В предыдущем коде я прохожу по кортежу (‘a’, ‘b’, ‘c’), делая вызов input (и соответствующего вызова float) для каждого из его значений. В итоге полученные значения сохраняются в списке.

Теперь настала очередь распаковки.

Так, если, например, я сделаю следующее a, b, c = [1, 2, 3], то легко увидеть, что значения 1, 2 и 3 будут соответствовать переменным a, b и c и именно в таком порядке.

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

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

Вычисление дискриминанта

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

Если вы остановитесь и проанализируете ее, то увидите, что вам нужно вычислить квадратный корень из выражения b² – 4ac.

Квадратный корень не определен для отрицательных чисел. По этой причине, если это выражение, которое мы будем называть дискриминантом, имеет отрицательное значение, корень не может быть вычислен, и квадратное уравнение не имеет реального решения (хотя оно имеет одно решение в области комплексных чисел, что выходит за рамки данной статьи).

Это ситуация, с которой мы должны справиться, поэтому первое, что мы должны сделать, это вычислить значение дискриминанта, что мы сделаем очень простым способом:

Вычислить квадрат величины очень легко, умножив эту величину на саму себя. Поэтому, если мы хотим получить значение b в квадрате, то есть b², мы можем сделать b * b, как показано в коде выше.

В Python также есть оператор для вычисления степени, который представляет собой двойную звездочку **, поэтому вы также можете вычислить квадрат b следующим образом: b ** 2.

Уравнения второй степени не имеющие решения

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

Необходимо выполнить эту проверку, которая заставит нас показать пользователю сообщение об ошибке, указывающее на то, что представленное уравнение не имеет решения.

Это делается очень простым способом с помощью условия:

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

Вычисление решений (или решения)

Бывает, что квадратное уравнение имеет два разных решения. Это возможно потому, что квадрат любого числа всегда является положительным числом, поскольку отрицательное число, умноженное на другое отрицательное число, дает положительное число. То есть существуют различные числа, которые при возведении в квадрат дают одно и то же число.

Другими словами, результат квадратного корня на самом деле всегда равен двум, что является величиной, полученной в результате операции с положительным знаком и с отрицательным знаком.

Чтобы было понятно, если сделать квадратный корень из 4, то получится 2. Но результат корня не только 2, но и -2, так как 2² = 4 и (-2)² = 4.

Мы также должны учесть это при вычислении решения уравнения, так что нам придется получить два разных значения: одно с учетом положительного результата корня, а другое – с учетом отрицательного.

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

Обратите внимание, что сначала я вычисляю положительное значение корня с помощью функции sqrt, которая находится в модуле math. Не забудьте выполнить from math import sqrt, чтобы иметь возможность использовать его. Причина вычисления его заранее, поскольку я также ранее сохранил значение дискриминанта в переменной, заключается в том, чтобы избежать повторения кода при вычислении двух решений x_1 и x_2. Это также делает код более четким, легко читаемым и менее склонным к ошибкам.

Читайте также:  Вскрытый зуб как чистить зубы

Однако может случиться так, что x_1 и x_2 имеют одинаковое значение. То есть уравнение имеет только одно решение (иногда его называют двойным решением). Это происходит, когда дискриминант равен 0, потому что результат корня также будет равен 0, и между выражениями для вычисления x_1 и x_2 не будет разницы, то есть они будут одинаковыми.

Интересно также выделить такую ситуацию. Для этого достаточно проверить, что дискриминант равен 0, и таким образом вычислить единственное решение в этом случае. Это можно сделать следующим образом:

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

Полный код

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

Вы видите, что после предыдущих объяснений полный код получился простым и лаконичным. Давайте посмотрим результаты выполнения некоторых операций, чтобы вы могли увидеть, как это работает. Первый – это прогон, в котором решаемое уравнение второй степени имеет два различных решения (т.е. дискриминант больше 0):

Теперь рассмотрим случай, когда существует только одно решение (или двойное решение, когда дискриминант равен 0):

И, наконец, вариант, в котором не существует реального решения, потому что дискриминант отрицательный:

Создание функции для решения квадратных уравнений

Теперь мы поместим наш код в функцию, которая получает коэффициенты a, b и c и возвращает решение или решения уравнения. Это удобно, если нам нужно решить несколько уравнений в нашей программе.

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

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

Кроме того, поскольку наша функция уже получает значения коэффициентов в качестве параметров, нам не нужно делать вызовы input внутри нее. Давайте посмотрим на код:

Обратите внимание, что, хотя мы могли бы запросить у пользователя значения коэффициентов, как мы делали это ранее, в данном случае мы собираемся предоставить их напрямую:

Если мы непосредственно выведем содержимое списка решений, предоставленного нашей функцией, то получим следующее, где видно, что для первого случая у нас есть два решения, для второго нет решения, а для третьего два решения:

Проверка решений

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

Для этого нам нужно определить функцию, которая принимает четыре различных параметра, где три из них будут коэффициентами a, b и c, а другой – значением проверяемого x.

Эта функция должна будет подставить эти четыре значения в общее выражение квадратного уравнения ax² + bx + c = 0 и проверить, что равенство выполняется.

Обратите внимание, что мы должны провести сравнение вещественных чисел. Всякий раз, когда нам приходится это делать, мы должны определить небольшой предел допустимой погрешности, в пределах которого мы можем считать два действительных числа равными. Это связано с тем, что, например, два числа 1.000000 и 1.000001 различны, если сравнивать их с помощью компаратора равенства ==, но в нашем случае мы можем захотеть считать их равными числами.

Таким образом, определив переменную margin как небольшую погрешность, например, 0,0001 (одна десятитысячная), наш код должен будет считать, что два числа, вычитание которых по абсолютной величине (для устранения отрицательного знака результата) меньше этой погрешности, равны. Таким образом, если взять числа d и e, то наше сравнение будет уже не d == e, а abs(d – e) Сохраните статью в социальных сетях, чтобы не потерять.

Источник