Графический калькулятор квадратных уравнений на Python и Tkinter
Рассмотрим пример создания графического интерфейса (GUI) на Python. В качестве «жертвы» напишем простенькую программу — решатель квадратных уравнений. Наше задание мы разобъем на несколько частей.
Часть первая: функция решения квадратного уравнения.
Напомним, что квадратным является уравнение вида:
Есть несколько способов решить квадратное уравнение, мы выберем решение через дискриминант.
Используя эту формулу мы можем вывести решение. Если дискриминант больше или равен нулю, то корни уравнения высчитываются по формуле:
Если же дискриминант меньше нуля, то уравнение не имеет решений.
Превратим данные формулы в код:
Чтобы все работало не забудьте импортировать функцию sqrt из модуля math.
Поскольку мы будем выводить результат в специально созданном виджете — мы сразу же вставляем полученный ответ в отформатированную строку и возвращаем ее.
Теперь пора переходить к созданию графической оболочки для нашего приложения.
Умение парсить на Python — изменит твою жизнь
Часть вторая: создаем GUI для программы
Для простоты будем создавать GUI встроенными средствами Python, поэтому импортируем все из библиотеки Tkinter:
В Python версии 3.х название модуля следует писать с маленькой буквы — tkinter.
Далее создаем само окно и размещаем на нем необходимые виджеты:
Если вы в точности повторили указанный код, то после запуска скрипта у вас получится примерно следующее окно:
Отлично, программа работает. Осталось объяснить Python как связать эти две части.
Часть третья: объединяем все воедино
Задача перед нами стоит следующая — написать функцию, которая будет брать числа из полей для ввода, передавать их функции решения квадратного уравнения и выводить результат в поле для вывода. Конечно, все это можно реализовать в одной функции, но лучше разделить на несколько:
Функция вставки информации:
Функция inserter предельно проста: очищает поле для ввода и вставляет туда переданный ей аргумент value.
Напишем функцию обработки введенной информации. Назовем ее handler:
В зависимости от данных введенных в поля для ввода передает функции inserter либо результат решения уравнения, либо сообщение о неверно введенных данных.
Чтобы все работало, следует изменить строку создания виджета Button следующим образом:
Теперь можно спокойно пользоваться нашей программой:
Дискриминант больше нуля | Дискриминант равен нулю |
Дискриминант меньше нуля. Решений нет | Введены не все аргументы |
Часть четвертая: необязательная
Можно добавить немного удобства для нашей программы. Проблема в том, что каждый раз вводя новые значения нам приходится удалять старые, что не очень комфортно. Напишем функцию, которая будет очищать поле для ввода после клика по нему.
Таким образом мы очищаем виджет, вызвавший данную функцию. Чтобы все работало, добавьте следующие строки после создания виджетов, но до размещения. Например, после строки a = Entry(. , но до строки a.grid(.
Простая анимация на питоне #программирование #python
Готово. Программа работает, Вы великолепны!
Исходный код калькулятора квадратных уравнений с GUI на GitHub
Найти корни квадратного уравнения
Квадратное уравнение имеет вид
При его решении сначала вычисляют дискриминант по формуле
Если D > 0, то квадратное уравнение имеет два корня; если D = 0, то 1 корень; и если D
Примеры выполнения кода:
Обратим внимание, что для данной программы коэффициент a не должен быть равен нулю. Иначе в первой ветке условного оператора будет происходить попытка деления на 0.
Если a = 0 , то квадратное уравнение превращается в линейное, которое решается иным способом. Оно всегда имеет один корень.
Квадратное уравнение
Программа, позволяющая находить корни квадратного уравнения, – это один из примеров простых программ, которые можно написать на 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 можно прочитать здесь.
- Сделать проверку корректности ввода. Ведь пользователь вместо числа может ввести какую-нибудь строку, которая не будет корректно обработана. Про проверку на число описано в отдельной статье.
Источник: all-equa.ru
Читаем онлайн «Укус Питона» 11 cтраница
которые одновременно претендуют на звание простых и мощных. Вас приятно удивит то, как легко можно сосредоточиться на решении поставленной задачи, а не на синтаксисе и структуре языка, на
котором вы программируете.
Официально Python представляют так:
Python – это простой в освоении и мощный язык программирования. Он
предоставляет эффективные высокоуровневые структуры данных, а также
простой, но эффективный подход к объектно-ориентированному программированию. Его элегантный синтаксис и динамическая типизация наряду с тем,
что он является интерпретируемым, делают его идеальным языком для написания сценариев и быстрой разработки приложений в различных областях и
на большинстве платформ.
В следующем разделе мы рассмотрим эти особенности более детально.
История названия
Гвидо ван Россум, создатель языка Python, назвал его так в честь телешоу на
BBC под названием «Летающий цирк Монти Пайтона»1 , а вовсе не потому,
что он любит змей, убивающих животных обвиванием своего длинного тела
вокруг них и задавливанием.
4.1 Особенности Python
4.1.1 Простой
Python – простой и минималистичный язык. Чтение хорошей программы на Python
очень напоминает чтение английского текста, хотя и достаточно строгого! Такая псевдокодовая природа Python является одной из его самых сильных сторон. Она позволяет вам
сосредоточиться на решении задачи, а не на самом языке.
1
«Monty Python’s Flying Circus» (прим.перев.)
19
A Byte of Python (Russian), Версия 2.01
4.1.2 Лёгкий в освоении
Как вы увидите, на Python чрезвычайно легко начать программировать. Python обладает
исключительно простым синтаксисом, как уже отмечалось выше.
4.1.3 Свободный и открытый
Python – это пример свободного и открытого программного обеспечения – FLOSS
(Free/Libré and Open Source Soware). Проще говоря, вы имеете право свободно распространять копии этого программного обеспечения, читать его исходные тексты, вносить
изменения, а также использовать его части в своих программах. В основе свободного ПО
лежит идея сообщества, которое делится своими знаниями. Это одна из причин, по которым Python так хорош: он был создан и постоянно улучшается сообществом, которое
просто хочет сделать его лучше.
4.1.4 Язык высокого уровня
При написании программы на Python вам никогда не придётся отвлекаться на такие низкоуровневые детали, как управление памятью, используемой вашей программой, и т.п.
4.1.5 Портируемый
Благодаря своей открытой природе, Python был портирован на много платформ (т.е. изменён таким образом, чтобы работать на них). Все ваши программы смогут запускаться
на любой из этих платформ без каких-либо изменений, если только вы избегали использования системно-зависимых функций.
Python можно использовать в GNU/Linux, Windows, FreeBSD, Macintosh, Solaris, OS/2,
Amiga,AROS, AS/400, BeOS, OS/390, z/OS, Palm OS, QNX, VMS, Psion, Acorn RISC OS, VxWorks,
PlayStation, Sharp Zaurus, Windows CE и даже на PocketPC!
Вы можете даже использовать такую платформу, как Kivy для создания игр для iOS
(iPhone, iPad) и Android.
4.1.6 Интерпретируемый
Это требует некоторого пояснения.
Программа, написанная на компилируемом языке программирования, как например, C
или C++, преобразуется из исходного языка (т.е. C или C++) в язык, понятный компьютеру (бинарный код, т.е. нули и единицы) при помощи компилятора с применением
разнообразных флагов и параметров. Когда вы запускаете такую программу, компоновщик/загрузчик копирует программу с диска в оперативную память и запускает её.
Python же, напротив, не требует компиляции в бинарный код. Программа просто выполняется из исходного текста. Python сам преобразует этот исходный текст в некоторую
20
Глава 4. Введение
A Byte of Python (Russian), Версия 2.01
промежуточную форму, называемую байткодом, а затем переводит его на машинный
язык и запускает. Всё это заметно облегчает использование Python, поскольку нет необходимости заботиться о компиляции программы, подключении и загрузке нужных библиотек и т.д. Вместе с тем, это делает программы на Python намного более переносимыми, так как достаточно их просто скопировать на другой компьютер, и они работают!
4.1.7 Объектно-ориентированный
Python поддерживает как процедурно-ориентированное, так и объектноориентированное программирование. В процедурно-ориентированных языках программы строятся на основе процедур или функций, которые представляют собой
просто-напросто многократно используемые фрагменты программы. В объектноориентированных языках программирования программы строятся на основе объектов,
объединяющих в себе данные и функционал. Python предоставляет простые, но мощные
средства для ООП, особенно в сравнении с такими большими языками программирования, как C++ или Java.
4.1.8 Расширяемый
Если вам нужно, чтобы некоторая критическая часть программы работала очень быстро
или вы вынуждены скрыть часть алгоритма, вы можете написать эту часть программы
на C или C++, а затем вызывать её из программы на Python.
4.1.9
Источник: rulib.pro
Полезные программы на пайтоне
Базовые конструкции языка
- Переменные, оператор присваивания, функции type и id
- Числовые типы, арифметические операции
- Математические функции и работа с модулем math
- Функции print() и input(). Преобразование строк в числа int() и float()
- Логический тип bool. Операторы сравнения и операторы and, or, not
Строки и списки
- Введение в строки. Базовые операции над строками
- Знакомство с индексами и срезами строк
- Основные методы строк
- Спецсимволы, экранирование символов, raw-строки
- Форматирование строк: метод format и F-строки
- Списки — операторы и функции работы с ними
- Срезы списков и сравнение списков
- Основные методы списков
- Вложенные списки, многомерные списки
Условные операторы, циклы, генераторы списков
- Условный оператор if. Конструкция if-else
- Вложенные условия и множественный выбор. Конструкция if-elif-else
- Тернарный условный оператор. Вложенное тернарное условие
- Оператор цикла while
- Операторы циклов break, continue и else
- Оператор цикла for. Функция range()
- Примеры работы оператора цикла for. Функция enumerate()
- Итератор и итерируемые объекты. Функции iter() и next()
- Вложенные циклы. Примеры задач с вложенными циклами
- Треугольник Паскаля как пример работы вложенных циклов
- Генераторы списков (List comprehensions)
- Вложенные генераторы списков
Словари, кортежи и множества
- Введение в словари (dict). Базовые операции над словарями
- Методы словаря, перебор элементов словаря в цикле
- Кортежи (tuple) и их методы
- Множества (set) и их методы
- Операции над множествами, сравнение множеств
- Генераторы множеств и генераторы словарей
- Функции: первое знакомство, определение def и их вызов
- Оператор return в функциях. Функциональное программирование
- Алгоритм Евклида для нахождения НОД
- Именованные аргументы. Фактические и формальные параметры
- Функции с произвольным числом параметров *args и **kwargs
- Операторы * и ** для упаковки и распаковки коллекций
- Рекурсивные функции
- Анонимные (lambda) функции
- Области видимости переменных. Ключевые слова global и nonlocal
- Замыкания в Python
- Введение в декораторы функций
- Декораторы с параметрами. Сохранение свойств декорируемых функций
Модули и пакеты. Работа с файлами
- Импорт стандартных модулей. Команды import и from
- Импорт собственных модулей
- Установка сторонних модулей (pip install). Пакетная установка
- Пакеты (package) в Python. Вложенные пакеты
- Функция open. Чтение данных из файла
- Исключение FileNotFoundError и менеджер контекста (with) для файлов
- Запись данных в файл в текстовом и бинарном режимах
Генераторы. Некоторые полезные функции
- Выражения генераторы
- Функция-генератор. Оператор yield
- Функция map. Примеры ее использования
- Функция filter для отбора значений итерируемых объектов
- Функция zip. Примеры использования
- Особенности сортировки через sort() и sorted()
- Аргумент key для сортировки коллекций по ключу
- Функции isinstance и type для проверки типов данных
- Функции all и any. Примеры их использования
- Расширенное представление чисел. Системы счисления
- Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы
- Модуль random стандартной библиотеки
- Аннотация базовыми типами
- Аннотации типов коллекций
- Аннотации типов на уровне классов
- Конструкция match/case. Первое знакомство
- Конструкция match/case с кортежами и списками
- Конструкция match/case со словарями и множествами
- Конструкция match/case. Примеры и особенности использования
Python ООП
Свойства и методы класса
Магические методы классов
- Магический метод __call__. Функторы и классы-декораторы
- Магические методы __str__, __repr__, __len__, __abs__
- Магические методы __add__, __sub__, __mul__, __truediv__
- Методы сравнений __eq__, __ne__, __lt__, __gt__ и другие
- Магические методы __eq__ и __hash__
- Магический метод __bool__ определения правдивости объектов
- Магические методы __getitem__, __setitem__ и __delitem__
- Магические методы __iter__ и __next__
Наследование и полиморфизм
- Наследование в объектно-ориентированном программировании
- Функция issubclass(). Наследование от встроенных типов и от object
- Наследование. Функция super() и делегирование
- Наследование. Атрибуты private и protected
- Полиморфизм и абстрактные методы
- Множественное наследование
- Коллекция __slots__
- Как работает __slots__ с property и при наследовании
Исключения и менеджеры контекста
- Введение в обработку исключений. Блоки try / except
- Обработка исключений. Блоки finally и else
- Распространение исключений (propagation exceptions)
- Инструкция raise и пользовательские исключения
- Менеджеры контекстов. Оператор with
Метаклассы, вложенные классы, Data Classes
- Вложенные классы
- Метаклассы. Объект type
- Пользовательские метаклассы. Параметр metaclass
- Метаклассы в API ORM Django
- Введение в Python Data Classes (часть 1)
- Введение в Python Data Classes (часть 2)
- Python Data Classes при наследовании
Меню, тулбары, сайзеры
- Почему именно wxPython
- Общая структура интерфейса
- Создание меню и подменю
- Контекстное меню и панель инструментов
- Схемы размещения виджетов, BoxSizer
- Виды сайзеров
События, диалоги, виджеты
- Механизм обработки событий
- Примеры событий, назначение id виджетам
- Стандартные диалоговые окна
- Собственные диалоговые окна, класс Dialog
- Базовые виджеты wxPython
- Продвинутая работа с виджетами
- Основы работы с графикой
- Виды примитивов, система координат, единицы измерений
- Регионы и операции с ними
- Буферизация графических данных
- Демонстрация программы wxFormBuilder
- Литералы и символьный класс
- Квантификаторы регулярных выражений
- Сохраняющие скобки и группировка
- Флаги и проверки в регулярных выражениях
- Объект re.Match, методы re.search, re.finditer, re.findall
- Методы re.match, re.split, re.sub, re.subn, re.compile
- Что такое СУБД и реляционные БД
- Подключение к БД, создание и удаление таблиц
- Команды SELECT и INSERT
- Команды UPDATE и DELETE
- Агрегирование и группировка GROUP BY
- Оператор JOIN для формирования сводного отчета
- Оператор UNION объединения нескольких таблиц
- Вложенные SQL-запросы
- Методы execute, executemany, executescript, commit, rollback
- методы fetchall, fetchmany, fetchone, iterdump
- Что это? Использование > в шаблонах
- Экранирование и блоки raw, for, if
- Фильтры и макросы: macro, call
- Загрузчики: FileSystemLoader, PackageLoader, FunctionLoader и другие
- Конструкции include и import
- Наследование расширение шаблонов
- Что такое Pygame? Каркас приложения, FPS
- Рисование графических примитивов
- Как обрабатывать события от клавиатуры
- Как обрабатывать события от мыши
- Создание поверхностей (Surface), их анимация, метод blit
- Класс Rect. Его роль, свойства и методы
- Как рисовать текст различными шрифтами
- Как работать с изображениями. Модули image и transform
- Что такое спрайты и как с ними работать
- Как делать контроль столкновений
- Добавляем звук в игровой процесс. Модули mixer и music
- Установка и первое знакомство
- Основные типы данных. Создание массивов функцией array()
- Функции автозаполнения, создания матриц и числовых диапазонов
- Свойства и представления массивов, создание их копий
- Изменение формы массивов, добавление и удаление осей
- Объединение и разделение массивов
- Индексация, срезы, итерирование массивов
- Базовые математические операции над массивами
- Булевы операции и функции, значения inf и nan
- Базовые математические функции
- Произведение матриц и векторов, элементы линейной алгебры
- Множества (unique) и операции над ними
- Транслирование массивов
- Установка пакета и основные возможности
- Функция plot для построения и оформления двумерных графиков
- Отображение нескольких координатных осей в одном окне
- Граничные значения осей и локаторы для расположения меток на них
- Настраиваем формат отображения меток у координатных осей
- Делаем логарифмический масштаб у координатных осей
- Размещаем стандартные текстовые элементы на графике
- Добавляем легенду и рисуем геометрические фигуры на графиках
- Рисуем ступенчатые, стековые, stem и точечные графики
- Рисуем гистограммы, столбчатые и круговые диаграммы
- Показ изображений и цветовых сеток
- Как строить трехмерные графики
- Рисуем линии уровня функциями contour, contourf и tricontour, tricontourf
- Создаем анимацию графиков Классы FuncAnimation и ArtistAnimation
- Что это такое? Простое WSGI-приложение
- Использование шаблонов страниц сайта
- Контекст приложения и контекст запроса
- Функция url_for и переменные URL-адреса
- Подключение внешних ресурсов и работа с формами
- Мгновенные сообщения — flash, get_flashed_messages
- Декоратор errorhandler, функции redirect и abort
Использование БД, cookies и сессии
- Создание БД, установление и разрыв соединения при запросах
- Добавление и отображение статей из БД
- Представление полноценных HTML-страниц на сервере
- Формирование ответа сервера, декораторы перехвата запроса
- Порядок работы с cookies
- Порядок работы с сессиями (session)
- Регистрация пользователей и шифрование паролей
- Авторизация пользователей на сайте через Flask-Login
- Улучшение процесса авторизации (Flask-Login)
- Загрузка файлов на сервер и сохранение в БД
Blueprint и полезные расширения
- Применение WTForms для работы с формами сайта
- Обработка ошибок во Flask-WTF
- Blueprint — что это такое, где и как использовать
- Blueprint — подключение к БД и работа с ней
- Flask-SQLAlchemy: установка, создание таблиц, добавление записей
- Операции с таблицами через Flask-SQLAlchemy
- Django — что это такое, порядок установки
- Модель MTV. Маршрутизация. Функции представления
- Маршрутизация, обработка исключений запросов, перенаправления
- Определение моделей. Миграции: создание и выполнение
- CRUD — основы ORM по работе с моделями
Шаблоны, модели, формы
- Шаблоны (templates). Начало
- Подключение статических файлов. Фильтры шаблонов
- Формирование URL-адресов в шаблонах
- Создание связей между моделями через класс ForeignKey
- Начинаем работу с админ-панелью
- Пользовательские теги шаблонов
- Добавляем слаги (slug) к URL-адресам
- Использование форм, не связанных с моделями
- Формы, связанные с моделями. Пользовательские валидаторы
Классы представлений, регистрация, оптимизация
- Классы представлений: ListView, DetailView, CreateView
- Основы ORM Django за час
- Mixins — убираем дублирование кода
- Постраничная навигация (пагинация)
- Регистрация пользователей на сайте
- Делаем авторизацию пользователей на сайте
- Оптимизация сайта с Django Debug Toolbar
- Включаем кэширование данных
- Использование капчи captcha
- Тонкая настройка админ панели
- Начинаем развертывание Django-сайта на хостинге
- Завершаем развертывание Django-сайта на хостинге
Django REST Framework
- Django REST Framework — что это такое
- Установка Django Rest Framework
- Базовый класс APIView для представлений
- Введение в сериализацию. Класс Serializer
- Методы save(), create() и update() класса Serializer
- Класс ModelSerializer и представление ListCreateAPIView
- Представления UpdateAPIView и RetrieveUpdateDestroyAPIView
- Viewsets и ModelViewSet
- Роутеры: SimpleRouter и DefaultRouter
- Ограничения доступа (permissions)
- Авторизация и аутентификация. Session-based authentication
- Аутентификация по токенам. Пакет Djoser
- Идея авторизации по JWT-токенам
- Делаем авторизацию по JWT-токенам
- Добавляем пагинацию (pagination)
Источник: proproprogs.ru