Как на питоне сделать калькулятор
Как на питоне сделать калькулятор
Простой GUI калькулятор на Python #2. Основной функционал
Импортируем библиотеки, следуя стилю PEP 8:
Напишем дефолтный код для запуска любого Qt приложения с файлом дизайна. Если вам хочется подробнее узнать о работе каждой строчки кода, приглашаю посетить документацию.
Если у вас не установлен в систему шрифт Rubik, то в вашем приложении шрифт будет дефолтным. Для решения этой проблемы не нужно устанавливать шрифт в систему. Импортируем:
Теперь используем метод добавления шрифта приложения, в который передадим файл шрифта. Я сделал это в конструкторе класса.
Добавляем цифры
Метод sender() возвращает Qt объект, который посылает сигнал.
В нашем случае сигнал является нажатием кнопки. Создадим кортеж с именами кнопок-цифр.
По дефолту в поле всегда стоит 0. В этом случае, если нажимается кнопка с цифрой, текст поля заменяется на эту цифру. Получается, что при нажатии на 0 ничего не будет происходить.
Полный код метода добавления цифры
Теперь нужно соединить нажатия кнопок с этим методом. Напишем в конструкторе класса.
Изначально был такой код. Но зачем передавать цифру-аргумент, если можно взять её из кнопки?
Соединения кнопок с методом
Посмотрим на результат.
Если вам режет глаз выход цифр за границы поля, потерпите. Мы решим эту проблему в следующей статье.
Очищаем Line Edit и Label
Сделаем такой же метод для очистки только поля.
Добавляем точку
Почему вообще точка, а не запятая? Просто число с точкой можно сразу конвертировать в вещественное число, а с запятой придется еще менять знак. Да, мне лень.
Логика проста. Если точки нет в поле, значит добавляем.
Соеди что? Правильно, няем.
Добавляем временное выражение
Что вообще оно из себя представляет? Есть два типа временных выражений:
1) Число и математический знак. Грубо говоря, это память калькулятора.
Для начала нам нужно убедиться, что в лейбле нет текста. Затем ставим во временное выражение число из поля ввода + текст кнопки btn.
Еще нужно очистить поле ввода. Полный код метода:
Прикрутим пока одну кнопку сложения для теста.
Точка и незначащие конечные нули не обрезаются.
Убираем незначащие конечные нули
Сделаем статический метод для решения этой проблемы. Передавать в функцию мы будем string число, получать то же самое.
Введем переменную n, которая приводит аргумент сначала к типу float, потом к string.
Теперь добавим обрезку незначащих нулей в метод добавления временного выражения:
Старый код с передачей знака-аргумента
Получаем число из Line Edit
Запишем в переменную текст поля, уберем потенциальную точку с помощью strip().
Возвращаем float, если точка есть в переменной, иначе возвращаем int, то есть целое число.
Добавим type hint к методу. Он может возвращать только целое или вещественное число. Для этого импортируем:
Optional используем позже.
В Python 3.10 не нужно ничего импортировать.
Можно просто написать
Получаем число из Label
Если в лейбле есть текст, получаем его, разделяем по пробелам и берем первый элемент, то есть число.
Получаем знак из Label
Чтобы получить знак, нам нужно удостовериться в наличии текста в лейбле, затем получить текст из него, разделить по пробелам и вытащить последний элемент.
Вычисляем выражение
Так, калькулятор же считать должен, я правильно понимаю? Ну тогда импортируем сложение, вычитание, умножение и деление из стандартной библиотеки operator.
Теперь создадим словарь с операциями. Каждому знаку присвоим его логическую функцию.
Создадим метод вычисления.
Если в лейбле есть текст, вводим переменную результата. Обрезаем конечные нули, приводим к строке. Берем операцию из словаря по знаку, в скобках указываем с какими числами провести операцию. Заметьте, что порядок передачи аргументов важен для деления и вычитания. Сначала мы передаем число из временного выражения, а потом из поля ввода.
Добавляем в лейбл число из поля ввода и знак =
Ставим результат в поле ввода и возвращаем его.
Полный код метода вычисления
Метод математической операции
Если в лейбле нет выражения, мы его добавляем, удивительно.
Если же знак равен знаку нажатой кнопки, то мы считаем выражение и добавляем в конец лейбла этот знак.
Полный код математической операции
Полный код математической операции
Старый код метода вычисления со знаком-аргументом
Помолимся за здравие Гвидо Ван Россума и запустим программу.
Почему-то не хочет дальше считать с равенством. А я вам расскажу почему. В методе добавления временного выражения нужно добавить дополнительное условие. В итоге получится «если временного выражения нет или есть равенство».
И вот еще покажу, как меняется знак, если вы постоянно промахиваетесь по кнопке.
Заключение
Штош, в следующей статье допишем калькулятор. Сделаем отрицание, backspace, несколько шорткатов для одной кнопки и обработаем ошибки. До встречи.
Простой GUI калькулятор на Python #3. Backspace, отрицание и регулировка размера шрифта
Штош. Дописываем калькулятор. Если вы не читали прошлую статью, я вам настоятельно рекомендую это сделать.
Добавляем отрицание
Логика проста: если отрицания нет в поле, значит добавляем. Иначе убираем левый символ с помощью среза [1:]. Не забываем ввести дополнительное условие для нуля.
Возникает такая проблемка: при максимальной длине отрицание вытесняет последнюю цифру. Так работать, конечно же, не должно.
Давайте добавим в конструктор переменную максимальной длины поля ввода. Взять её можно с помощью метода maxLength.
Если длина строки больше этой переменной на единицу и в строке есть отрицание, то ставим максимальную длину поля больше на единицу. Иначе ставим обратно дефолтную максимальную длину.
Backspace
Удаляем равенство из Label
Когда во временном выражении есть равенство, следующая нажатая кнопка должна удалять его из лейбла.
Но удалять должна не любая кнопка, а цифра, точка, отрицание, Backspace и очищение поля ввода.
Обрабатываем исключения
При нажатии на кнопку «равно», когда во временном выражении уже есть равенство, программа выкидывает KeyError.
Напишем метод для показа ошибки, передадим в него текст. Сначала ставим максимальную длину поля, равную длине текста ошибки, а затем уже ставим сам текст.
Если число в лейбле равно нулю, то ставим ошибку «результат не определен». Иначе ставим простое сообщение о делении на ноль.
Убираем ошибки
Если текст в поле равен какой-то ошибке, то ставим максимальную длину поля обратно к дефолтному значению и ставим текст 0
Убирать ошибку нужно в начале методов добавления цифры, backspace и очищения полей. Почему только они? Мы заблокируем кнопки знаков, точки и отрицания.
Блокируем кнопки
Блокируем кнопки в конце метода показа ошибки.
Смотрите, на кнопки нельзя кликнуть, но по интерфейсу так сразу и не скажешь, пока не наведёшь. Нужно сделать текст кнопок серым.
Меняем цвет кнопок
Напишем метод изменения цвета кнопок. Мы будем передавать в него css строку с цветом.
Для блокировки у нас будет серый цвет #888.
Включаем кнопки
Передаем логическую переменную в метод блокировки и ставим её же в setDisabled для кнопок.
Еще нужно вернуть кнопкам белый цвет.
Проставим в методы показа и удаления ошибки.
Регулируем размер шрифта
Для начала введем 2 переменные с размерами шрифтов:
Теперь создадим методы получения ширины текста в пикселях для поля и лейбла:
Регулируем размер шрифта в поле ввода. Пока ширина текста больше ширины окна (-15, так будет лучше), мы уменьшаем размер шрифта на единицу.
Нужно проставить этот метод после любого изменения длины текста в поле ввода.
Ставим после self.ui.le_entry.setText*
Мы только уменьшаем размер шрифта, нужно его еще увеличивать при уменьшении ширины текста и увеличении ширины окна.
Пока ширина текста меньше ширины поля (-60, так будет лучше), увеличиваем размер шрифта, но не больше дефолтного значения.
Как регулировать размер шрифта при изменении ширины окна приложения? Очень просто, нужно использовать встроенный resizeEvent:
Регулируем размер шрифта во временном выражении
То же самое проворачиваем для временного выражения.
Ставим после self.ui.lbl_temp.setText* и self.ui.lbl_temp.clear()
Делаем код немного компактнее
Вообще это можно было сделать в самом начале, но мы сделаем в самом конце.
Заменим во всем коде:
self.ui.le_entry на self.entry
self.ui.lbl_temp на self.temp
Введем 2 переменные для поля и временного выражения в конструкторе класса:
Проблема с вычислениями вещественных чисел
Эта проблема не связана конкретно с питоном, она присутствует и в других языках, вот вам пример в JavaScript.
Все дело в том, что вещественные числа не могут быть точно представлены из-за особенностей их реализации в двоичном виде. Если вы заинтересовались темой, вы можете посмотреть про арифметику вещественных чисел и про стандарт 754.
Ну а как бороться с этой проблемой? Можно использовать модуль decimal, вот пример его работы:
Вот вам и задача со звездочкой, переделайте вычисления калькулятора с этим модулем.
Заключение
Конечно, можно найти еще уйму изъянов в работе калькулятора, но я и не претендую заменить системный. Зачем? Я думаю, получилось вполне неплохо относительно уже существующих туториалов на калькуляторы в интернетах, и надеюсь, что помог вам с изучением этого змеиного языка.
Создаем продвинутый калькулятор на Python с Tkinter
Здравствуйте! В этой публикации я хочу рассказать Вам, как сделать продвинутый калькулятор на Python 3 с Tkinter.
Итак, импортируем модули, которые нам понадобятся для нашей программы.
Библиотека tkinter нам необходима для создания окна, грубо говоря.
Модуль math нам нужен для математических операций.
Следующими двумя строками мы создаем окно и даем ему имя.
Создаем список с именами будущих кнопок калькулятора. Я выбрал все самые интересные функции, чтобы продемонстрировать, как их реализовать.
Следующим отрезком кода мы создаем кнопки для нашего калькулятора.
В каждом калькуляторе есть, так называемое поле ввода, в которое пользователь вводит нужные данные для программы. Это могут быть цифры, функции и математические операции. Их можно вводить, как с клавиатуры, так и при нажатии на кнопку в калькуляторе.
Пример 1. Я нажимаю на кнопку «2» в калькуляторе и в этом поле ввода, отображается цифра 2.
В Python Tkinter поле ввода называется Entry, а, например, в Java Script — input.
Мы подошли к основной задаче калькулятора — его функциям и логике.
До этого момента нами было создан внешний вид программы. Если бы Вы попробовали запустить ее и нажать на кнопку, Вам бы выскочила ошибка, ведь у нас вовсе нет функций калькулятора.
Приступим, пропишем нашему калькулятору логику и способность считать.
В этом блоке кода мы используем функцию eval — это, если можно так сказать, компилятор внутри компилятора. Она будет считать в нашей программе.
По сути, мы обрабатываем функцию, что сработает при нажатии на кнопку «=».
Создаем функцию очищения поля ввода. Она будет срабатывать при нажатии на кнопку «C».
Следующая функция — число pi. При нажатии на кнопку «П» программа выведет нам 3.14159265359, то есть число Pi. Вот тут нам и пригодилась библиотека math.
Функция выхода из программы. При нажатии на кнопку «Exit» окно Tkinter будет уничтожено и процесс остановлен. В этой функции нам нужна была библиотека sys.
Функция возведения в степень. Нужно ввести число, которое нужно возвести в степень. Далее программа выводит **. В Python этот символ означает возведение в степень 2**6 (возведение 2 в степень 6). Мы используем для счета в программе eval, а значит можно выполнить это так же, как и в Питоне. Ну и в конце мы вводим необходимую степень.
Пример 3. Нам нужно 3 возвести в 5 степень. Вводим число 3, нажимаем на кнопку «xⁿ» (3**. ) и вводим необходимую степень, — 5 (3**5). Нажимаем на кнопку «=» и получаем ответ 243.
Опишу сразу две функции, так, как они идентичны.
Функция sin x и cos x.
Все просто, при нажатии на клавишу sin или же cos мы получаем синус или косинус по данному числу.
Следующие две функции — скобки ) и (.
При нажатии на кнопку «)» мы получаем ), аналогично поступаем со второй функцией.
Функция получения факториала из данного числа.
Функция извлечения корня квадратного их данного числа.
Функция, которая отвечает за очищение поля ввода при нажатии на кнопку «=».
И последняя строка нашего кода — это «закрытие» окна tkinter.
Большое спасибо за прочтение данной публикации. Надеюсь она Вам была полезна.
Простой калькулятор на Python
В последние годы цифровой мир всё больше использует облачные системы. Сервисы вроде cloud.timeweb.com доказали своё удобство и надёжность, мгновенно обрабатывая гигантские объёмы информации. Но сегодня мы вспомним основы современных технологий и расскажем вам, как написать программу-калькулятор своими руками.
Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.
В начале работы над калькулятором вспомним, из чего он состоит и как он работает. Мы будем писать аналог простого настольного калькулятора, который есть у каждого школьника. Прочитав эту статью и выполнив все задания, вы получите готовый код на питоне простейшего калькулятора.
У настольного калькулятора есть:
В функции настольного калькулятора входит:
Для понимания принципа написания калькулятора возьмем из этого списка минимальный набор функций:
Код можно писать прямо в онлайн-редакторе.
Примеры кода математических операций
Математические операции, которые будем использовать:
Вывод значения
Чтобы видеть результат, его нужно вывести на экран. Для этого существует функция print(), которая выводит аргументы в скобках в консоль.
Эта функция будет аналогом дисплея нашего калькулятора.
Сохранение результата в переменную
Чтобы не производить вычисления внутри функции print(), будем хранить их в переменной.
Далее мы сможем вывести в консоль значение переменной.
Чтение строк
Выведем результат на экран.
Если передать внутрь функции input() текст, то он выводится на экран перед тем, как начнётся считывание строки.
Объединение и форматирование строк
Чтобы вывод данных стал более дружелюбным, мы можем добавить пояснения к ним. Для этого используем объединение (конкатенацию) строк.
Перевод строк в число
Отредактируем нашу программу.
Обработка некорректных данных
Но что если пользователь введёт не числа, а буквы или другие символы? При попытке перевести такую строку в число Python выдаст ошибку и остановит выполнение программы.
Такие ошибки можно оперативно определять и менять стандартное поведение при их возникновении, например предлагать пользователю ввести число заново. Но это отдельная тема для разговора, поэтому в контексте этой статьи условимся, что пользователь всегда вводит корректные данные.
Создание функций
Итак, у нас есть практически все компоненты для того, чтобы написать полноценный калькулятор. Давайте расширим функционал текущей версии до выполнения всех математических операций, которые мы запланировали:
Чтобы улучшить читаемость кода, разделим эти операции на отдельные функции. Смотрите, как это делается на примере суммы.
Обратите внимание, что тело функции записывается с отступами строки — таковы правила создания функции. В противном случае будет ошибка.
Результат работы функции можно также сохранить в переменную для дальнейшего использования.
Аналогичным образом создадим остальные функции вычисления.
Условные операторы
На месте двоек могут быть переменные, функции, возвращающие значения, строки и даже математические операции. Посмотрим, как это выглядит в коде на примере проверки пароля. Предположим, что верный пароль: qwerty.
Обратите внимание, что блоки кода также пишутся с отступами, как и в функциях. Двоеточие также обязательно.
Сразу же применим полученные знания к нашему калькулятору. Будем спрашивать у пользователя, какую операцию он хочет совершить, и, в зависимости от ввода, вызывать соответствующую функцию вычисления. Для начала просто выведем текст выбранной операции или сообщение, что такой операции не существует. Следующим шагом заменим текст на вызов операции и объединим его с уже существующей логикой калькулятора.
Собираем всё в единое целое
Поместим всю логику вычислений внутрь функции, чтобы мы могли удобно обращаться к ней в коде скрипта.
Также добавим функцию для запроса операции.
Работает! Поздравляем, только что вы написали свой калькулятор.
Расширение функционала и улучшение кода
Добавление операций
Давайте добавим операцию возведения в степень.
Добавляем операцию в функцию вычисления.
Также добавим пояснения в функцию запроса действия.
Проверяем, запустив функцию run_calculator().
Тестирование и обработка ошибок
Сейчас, если мы введём неизвестную операцию, калькулятор выдаст сообщение, что такой операции нет, и оставит всё, как есть. Более того, он выведет сообщения о полученном результате, которого по определению быть не должно. Давайте посмотрим:
Ничего страшного не случилось, но и пользы никакой. Такой процесс, когда мы пробуем ввести в программу некорректные данные и наблюдать, как она реагирует, называется тестированием. Это отдельная профессия, но, так или иначе, элементарные тесты должен уметь делать любой программист-профессионал.
Циклы
Давайте изменим поведение программы и позволим пользователю повторно выбрать требуемую операцию.
Простой пример. Будем выводить в консоль всё, что введёт пользователь, до тех пор, пока не будет введена пустая строка.
Теперь применим это к калькулятору.
Для этого изменим функцию запроса операции ask_operation
Вычисления не производятся до тех пор, пока не будет введена корректная операция. Тест пройден.
Заключение
Простой GUI калькулятор на Python #1. Дизайн приложения
В этой серии статей я научу вас делать простой кроссплатформенный десктопный калькулятор. Здесь не будет тригонометрических функций, процентов, интегралов и других полезных вещей. Вы сможете добавить их по своему желанию.
Мы будем использовать язык Python, фреймворк Qt, библиотеку PySide6, сразу установим её:
pip install PySide6
Qt Designer
Создавать интерфейс мы будем в приложении Qt Designer. Его можно скачать отдельно или найти в папке установленного PySide. Для этого перейдем по пути:
Создаем Main Window, т.е. главное окно приложения.
Сразу убираем ненужные menubar и statusbar.
Название приложения можно изменить в свойстве главного окна windowTitle.
Элементы калькулятора
Перетащим нужные элементы в интерфейс. В нашем калькуляторе будет поле ввода Line Edit.
Label с временным выражением над этим полем ввода.
Grid Layout для кнопок.
Просто закинем эти элементы и выберем Lay Out Vertically для центрального виджета.
Теперь закинем кнопки в Grid Layout, у меня будет 4 колонки и 5 рядов. Чтобы скопировать и вставить элемент, можно перетащить его с зажатой клавишей Ctrl.
Поставим текст во все кнопки. Для Backspace мы позже поставим иконку.
Проставим горячие клавиши для всех кнопок, кроме Clear и отрицания. За это отвечает свойство shortcut. К сожалению, в Qt Designer нельзя указать несколько горячих клавиш для одной кнопки. Хотелось бы, чтобы клавиши «Enter», «Return» и «=» выполняли вычисление. Мы сделаем это позже в коде. А пока поставим для вычисления одинокую клавишу =.
Запишем 0 в Line Edit и выберем правое горизонтальное выравнивание для текста.
Нам нужно сделать так, чтобы пользователь не мог вводить что попало в это поле, чтобы он мог его только читать. Для этого существует свойство readOnly.
Укажем максимальную длину в 16 символов, как в калькуляторе Windows.
Запишем в лейбл какое-нибудь выражение и поставим правое выравнивание.
Чтобы посмотреть превью дизайна используйте сочетание клавиш Ctrl + R.
Давайте назовем элементы, чтобы в коде было проще обращаться к ним.
Размерная политика элементов
Вы спросите: «Почему интерфейс так плохо выглядит?». Все потому, что у элементов не настроена вертикальная политика. Для лейбла и поля поставим Maximum.
Для всех кнопок поставим Expanding.
Стилизация калькулятора
Сначала нужно определиться с цветовой палитрой. Я буду использовать 4 цвета:
Почти черный #121212 для фона.
Белый #FFF для текста кнопок и поля ввода.
Серый #666 для фона кнопок при наведении.
Серый посветлее #888 для текста временного выражения и фона кнопок при нажатии.
В Qt Designer поддерживается язык css. Напишем простенький stylesheet для главного окна. Для всего виджета указываем белый цвет текста и почти черный цвет #121212 для фона.
Я буду использовать бесплатный шрифт Rubik из библиотеки Google Fonts. Он довольно приятный.
Давайте посмотрим, что получается.
Давайте изменим кнопки на плоские с прозрачным фоном.
Посмотрим на результат.
Стили для Line Edit и Label
Сначала разберемся с Line Edit. Поставим размер шрифта 40pt и уберем границы. Я не буду делать какие-то изменения при наведении и нажатии, потому что пользователь не может взаимодействовать с этим полем.
Иконки
Теперь зайдем на Google Icons и возьмем черную иконку калькулятора и белую иконку backspace. Я возьму Sharp иконки с размером 24 пикселя. Формат выбирайте на ваше усмотрение. По опыту скажу, что лучше SVG. И лучше оно не только в том, что оно без труда масштабируется без потери качества (векторная графика), но еще и скачивается одним файлом. При скачивании PNG вам нужно будет распаковать архив, зайти в одну из двух папок и вытащить саму иконку.
В статье я скачивал PNG, не делайте так. Я думал, что Qt Designer не поддерживает иконки с векторной графикой, даже не попробовав.
Создадим файл ресурсов:
Resource Browser > Edit Resources > New Resource File.
Я сохранил файл с названием files.qrc . Добавим префикс для иконок.
Закинем туда наши две иконки.
Поставим иконку Backspace:
icon > choose Resource
Поставим размер 24 x 24 пикселя в свойстве iconSize.
То же самое проделаем для иконки приложения.
Финальные штрихи
Почти готово. Убираем текст из лейбла. Ставим размер главного окна. У меня будет 300 на 500 пикселей. Такой же размер поставлю минимальным для приложения.
Редактируем интерфейс в коде
Файл интерфейса представляет собой файл с xml разметкой. Мы можем найти блок кода с указывающей рукой, введя в поиске по коду Pointing
Заметим, что этот блок кода идет после блока размерной политики. Поэтому нам нужно заменить:
В современных редакторах это сделать очень просто. Например, в VS Code нужно нажать Ctrl + H.
Впишем нужные блоки кода и нажмем Replace All (Ctrl + Alt + Enter).
Проверяем в дизайне.
Дизайн сделан, поздравляю!
Конвертируем файл ресурсов и интерфейса
Для начала нам нужно конвертировать файл ресурсов в питоновский файл. Для этого напишем в терминале:
pyside6-rcc «название файла ресурсов.qrc» > «название файла ресурсов_rc.py»
pyside6-rcc files.qrc > files_rc.py
Теперь конвертируем в Python файл интерфейса. Для этого введем в терминал тот же самый синтаксис, но теперь используем pyside6-uic:
pyside6-uic design.ui > design.py
Если у вас на выходе получаются файлы с кодировкой UTF-16 , конвертируйте их в UTF-8 во избежание дальнейших проблем.
Штош, в следующей статье напишем код для главного функционала калькулятора. До встречи.
Написание простейшего калькулятора в Python 3
Язык программирования Python является отличным инструментом для обработки чисел и математических выражений. На основе этого качества можно создавать полезные программы.
В данном руководстве вам предлагается полезное упражнение: попробуйте написать простую программу командной строки для выполнения вычислений. Итак, в данном руководстве вы научитесь создавать простейший калькулятор в Python 3.
В руководстве используются математические операторы, переменные, условные выражения, функции.
Требования
Для выполнения руководства нужно установить Python 3 на локальную машину и развернуть среду разработки. Все необходимые инструкции можно найти здесь:
1: Строка ввода
Для начала нужно написать строку ввода, с помощью которой пользователи смогут вводить данные для вычислений в калькуляторе.
Для этого используйте встроенную функцию input(), которая принимает сгенерированный пользователем ввод с клавиатуры. В круглых скобках функции input() можно передать строку. Пользовательскому вводу нужно присвоить переменную.
В данной программе пользователь сможет вводить два числа. Запрашивая ввод, нужно добавить пробел в конце строки, чтобы отделить ввод пользователя от строки программы.
number_1 = input(‘Enter your first number: ‘)
number_2 = input(‘Enter your second number: ‘)
Прежде чем запустить программу, сохраните файл. К примеру, назовём программу calculator.py. теперь можно запустить программу в окне терминала в среде разработки с помощью команды:
Программа предложит вам ввести два числа:
Enter your first number: 5
Enter your second number: 7
На данный момент калькулятор принимает любые входные данные, не ограничиваясь числами: слова, символы, пробелы, даже enter. Это происходит потому, что функция input() принимает данные как строки и не знает, что в данном случае нужны только числа.
Чтобы программа могла выполнять математические вычисления, она не должна принимать никаких данных, кроме чисел.
В зависимости от предназначения калькулятора, программа может преобразовывать строки функции input() в целые числа или в числа с плавающей точкой. В данном случае целые числа подходят больше. Функцию input() нужно передать внутри функции int(), чтобы преобразовать ввод в целое число.
Читайте также:
number_1 = int(input(‘Enter your first number: ‘))
number_2 = int(input(‘Enter your second number: ‘))
Теперь попробуйте ввести два целых числа:
Enter your first number: 23
Enter your second number: 674
Все работает без ошибок. Однако если вы введёте символы, пробелы или буквы, программа вернёт ошибку:
Enter your first number: hello
Traceback (most recent call last):
File «testing.py», line 1, in
number_1 = int(input(‘Enter your first number: ‘))
ValueError: invalid literal for int() with base 10: ‘hello’
Итак, вы написали строку для ввода данных в программу.
Примечание: Попробуйте самостоятельно преобразовать входные данные в числа с плавающей точкой.
2: Добавление операторов
Теперь нужно добавить четыре базовых оператора: + (сложение), – (вычитание), * (умножение) и / (деление).
Программу лучше разрабатывать постепенно, чтобы иметь возможность протестировать её на каждом этапе.
Сначала добавьте оператор сложения. Поместите два числа в print, чтобы калькулятор отображал результат.
number_1 = int(input(‘Enter your first number: ‘))
number_2 = int(input(‘Enter your second number: ‘))
print(number_1 + number_2)
Запустите программу и попробуйте сложить два числа:
Enter your first number: 8
Enter your second number: 3
11
Теперь можно немного усложнить программу. Пусть кроме результата калькулятор также отображает числа, введенные пользователем.
number_1 = int(input(‘Enter your first number: ‘))
number_2 = int(input(‘Enter your second number: ‘))
print(‘<> + <> = ‘.format(number_1, number_2))
print(number_1 + number_2)
Снова запустите программу и попробуйте ввести какие-нибудь числа:
Enter your first number: 90
Enter your second number: 717
90 + 717 =
807
Теперь пользователь сможет убедиться, что ввел правильные числа.
На данном этапе можно добавить остальные операторы, используя такой же формат:
3: Добавление условного оператора
Добавьте в начало программы calculator.py небольшое описание с перечнем доступных операций. Выбрав один из операторов, пользователь сообщит программе, что именно ей нужно будет делать.
»’
Please type in the math operation you would like to complete:
+ for addition
— for subtraction
* for multiplication
/ for division
»’
Примечание: На самом деле здесь можно использовать любые символы (например, 1 для сложения, b для вычитания и так далее).
Передайте строку внутри функции input() и присвойте переменную значению ввода (к примеру, это будет переменная operation).
В эту строку пользователь может ввести любой из предложенных символов, но ничего не произойдёт. Чтобы программа работала, нужно добавить условный оператор. Оператор if будет отвечать за сложение, три оператора elif – за остальные операции; оператор else будет возвращать ошибку, если вместо предложенных операторов пользователь ввёл другой символ.
Итак, сначала программа предлагает пользователю ввести символ операции. Затем она запрашивает два числа. После этого она отображает пользовательский ввод и результат вычислений. Например, пользователь вводит *, затем 58 и 40.
Please type in the math operation you would like to complete:
+ for addition
— for subtraction
* for multiplication
/ for division
*
Please enter the first number: 58
Please enter the second number: 40
58 * 40 =
2320
Если же на первый запрос программы пользователь введёт символ %, он получит ошибку.
На данный момент программа выполняет все необходимые вычисления. Однако чтобы выполнить другую операцию, программу придётся перезапустить.
4: Определение функций
Чтобы программу не пришлось перезапускать после каждого обработанного примера, нужно определить несколько функций. Для начала поместим весь существующий код в функцию calculate() и добавим в программу ещё один слой. Чтобы программа запускалась, нужно добавить функцию в конец файла.
Создайте ещё одну функцию, состоящую из условных операторов. Этот блок кода позволит пользователю выбрать: продолжить работу с программой или завершить её. В данном случае операторов будет три: один if, один elif и один else для обработки ошибок.
Пусть функция называется again(). Добавьте её в конец блока def calculate():
.
# Определение функции again()
def again():
# Ввод пользователя
calc_again = input(»’
Do you want to calculate again?
Please type Y for YES or N for NO.
»’)
# Если пользователь вводит Y, программа запускает функцию calculate()
if calc_again == ‘Y’:
calculate()
# Если пользователь вводит N, программа попрощается и завершит работу
elif calc_again == ‘N’:
print(‘See you later.’)
# Если пользователь вводит другой символ, программа снова запускает функцию again()
else:
again()
# Вызов calculate()
calculate()
Также можно устранить чувствительность к регистру: буквы y и n должны восприниматься так же, как Y и N. Для этого добавьте функцию строки str.upper():
.
def again():
calc_again = input(»’
Do you want to calculate again?
Please type Y for YES or N for NO.
»’)
# Accept ‘y’ or ‘Y’ by adding str.upper()
if calc_again.upper() == ‘Y’:
calculate()
# Accept ‘n’ or ‘N’ by adding str.upper()
elif calc_again.upper() == ‘N’:
print(‘See you later.’)
else:
again()
.
Теперь нужно добавить функцию again() в конец функции calculate(), чтобы программа запускала код, который спрашивает пользователя, хочет ли он продолжить работу.
Запустите программу в терминале с помощью команды:
Теперь программу не нужно перезапускать.
5: Дополнительные действия
Написанная вами программа полностью готова к работе. Однако есть ещё много дополнений, которые при желании можно внести в код. Например, вы можете написать приветственное сообщение и добавить его в начало кода:
def welcome():
print(»’
Welcome to Calculator
»’)
.
# Затем нужно вызвать функции
welcome()
calculate()
Также можно добавить в программу больше функций для обработки ошибок. К примеру, программа должна продолжать работу даже если пользователь вводит слово вместо числа. На данный момент это не так: программа выдаст пользователю ошибку и прекратит работу.
Кроме того, если при выборе оператора деления (/) пользователь выбирает знаменатель 0, он должен получить ошибку:
ZeroDivisionError: division by zero
Для этого нужно написать исключение с помощью оператора try … except.
Программа ограничена 4 операторами, но вы можете расширить этот список:
.
operation = input(»’
Please type in the math operation you would like to complete:
+ for addition
— for subtraction
* for multiplication
/ for division
** for power
% for modulo
»’)
.
# Для возведения в степень и обработки модуля нужно добавить в код условные операторы.
Также в программу можно добавить операторы цикла.
Существует много способов для настройки обработки ошибок и улучшения каждого проекта. При этом всегда важно помнить, что не существует единственно правильного способа решить ту или иную проблему.
Заключение
Теперь вы знаете, как написать простейший калькулятор. После выполнения руководства вы можете самостоятельно добавить новые функции программы.
Создаем продвинутый калькулятор на Python с Tkinter
Здравствуйте! В этой публикации я хочу рассказать Вам, как сделать продвинутый калькулятор на Python 3 с Tkinter.
Итак, импортируем модули, которые нам понадобятся для нашей программы.
Библиотека tkinter нам необходима для создания окна, грубо говоря.
Модуль math нам нужен для математических операций.
Следующими двумя строками мы создаем окно и даем ему имя.
Создаем список с именами будущих кнопок калькулятора. Я выбрал все самые интересные функции, чтобы продемонстрировать, как их реализовать.
Следующим отрезком кода мы создаем кнопки для нашего калькулятора.
В каждом калькуляторе есть, так называемое поле ввода, в которое пользователь вводит нужные данные для программы. Это могут быть цифры, функции и математические операции. Их можно вводить, как с клавиатуры, так и при нажатии на кнопку в калькуляторе.
Пример 1. Я нажимаю на кнопку «2» в калькуляторе и в этом поле ввода, отображается цифра 2.
В Python Tkinter поле ввода называется Entry, а, например, в Java Script — input.
Мы подошли к основной задаче калькулятора — его функциям и логике.
До этого момента нами было создан внешний вид программы. Если бы Вы попробовали запустить ее и нажать на кнопку, Вам бы выскочила ошибка, ведь у нас вовсе нет функций калькулятора.
Приступим, пропишем нашему калькулятору логику и способность считать.
В этом блоке кода мы используем функцию eval — это, если можно так сказать, компилятор внутри компилятора. Она будет считать в нашей программе.
По сути, мы обрабатываем функцию, что сработает при нажатии на кнопку «=».
Создаем функцию очищения поля ввода. Она будет срабатывать при нажатии на кнопку «C».
Следующая функция — число pi. При нажатии на кнопку «П» программа выведет нам 3.14159265359, то есть число Pi. Вот тут нам и пригодилась библиотека math.
Функция выхода из программы. При нажатии на кнопку «Exit» окно Tkinter будет уничтожено и процесс остановлен. В этой функции нам нужна была библиотека sys.
Функция возведения в степень. Нужно ввести число, которое нужно возвести в степень. Далее программа выводит **. В Python этот символ означает возведение в степень 2**6 (возведение 2 в степень 6). Мы используем для счета в программе eval, а значит можно выполнить это так же, как и в Питоне. Ну и в конце мы вводим необходимую степень.
Пример 3. Нам нужно 3 возвести в 5 степень. Вводим число 3, нажимаем на кнопку «xⁿ» (3**. ) и вводим необходимую степень, — 5 (3**5). Нажимаем на кнопку «=» и получаем ответ 243.
Опишу сразу две функции, так, как они идентичны.
Функция sin x и cos x.
Все просто, при нажатии на клавишу sin или же cos мы получаем синус или косинус по данному числу.
Следующие две функции — скобки ) и (.
При нажатии на кнопку «)» мы получаем ), аналогично поступаем со второй функцией.
Функция получения факториала из данного числа.
Функция извлечения корня квадратного их данного числа.
Функция, которая отвечает за очищение поля ввода при нажатии на кнопку «=».
И последняя строка нашего кода — это «закрытие» окна tkinter.
Большое спасибо за прочтение данной публикации. Надеюсь она Вам была полезна.
Python + Pyside2 или просто «Калькулятор»
Меня зовут Саша. Я Junior разработчик. Работаю тестировщиком ПО. В основном я пишу тесты при помощи Python+Selenium, но Python стал настолько интересен, что мне захотелось углубиться в него и выучить как можно больше фреймворков! Я захотел написать десктопное приложение, аля простой «Калькулятор». Мой выбор пал на Pyside2. Я не претендую на идеальный код или урок. Просто есть желание поделиться опытом, если кто-то, как и я, хочет начать шарить в Python. Если кому-то помогу — результата я достиг.
Начнем!
Писал свой код я в IDE от JetBrains «PyCharm». ОС — Windows.
Сначала создаем свою форму.
Делаем свой дизайн, называем кнопки справа в подразделе «Инспектор Объектов». Стоит сказать, что QtDesigner поддерживает каскадную таблицу стилей, а если легче, то найдя в свойствах параметр «styleSheet», у вас есть возможность сделать свой дизайн, опираясь на знания CSS.
Что делает команда «pyside2-uic»? Она преобразует ваш файл формата .ui в питонячий файл формата .py и создает из него класс Python. Возможно знающие люди скажут, что ui файл можно подключить и без конвертации в проект, но я буду аккуратен и лучше сделаю, как написано в мануалах по Pyside2.
Далее переходим к коду.
Открываем PyCharm, нашу директорию с проектом и создаем файл «calc_ui.py» или «something_ui.py» в зависимости от того, какую программу вы делайте. Приставка _ui В конце файла поможет нам не запутаться в файлах. В общем виде, должно выглядеть так:
Начнем с редактирования файла, который мы преобразовали из .ui в .py.
Внизу ищем данный код и копируем его, после удаляем из этого файла.
Создаем наш основной файл, где будет прописана логика программы. Я назвал его, как, не удивительно «calc.py» (выше на скрине директории это видно).
Вставляем туда наш скопированный код и начинаем редактировать его.
import sys кидаем в начало, так как это правило хорошего тона.
Импортируем пару необходимых модулей для работы с нашей формой и из нашего файла «calc_ui.py» импортируем основной класс Ui_MainWindow.
Далее редактируем if __name__. Удаляем все не нужное. У вас должно получиться вот так:
Код я прокомментировал надеюсь внятно. Перейдем к созданию класса Calculator.
Далее наша задача стоит так, что бы что-то происходило, когда мы тыкаем на кнопки «1», «2», «3» и т.д.
Там же в конструкторе класса объявляем подключение кнопки к какой-либо функции:
В коде на кнопках уже указана функция self.digit_pressed, давайте взглянем на нее, что же она делает, если пользователь нажал на кнопку с цифрами:
Комментарии к коду так же присутствуют.
Теперь рассмотрим функцию, которая будет реагировать на нажатие операций «+», «-« и т.д
Мы записываем первое значение в переменную self.first_value и чистим наше поле, для того, что бы ввели значение операции, после чего выводим в lineEdit(наше основное поле ввода и результата) все вместе с числом и операцией.
Почему float? Могу ответить так, что я решил все сделать float, а при выводе значения в блок результата, если результат имеет в конце «.0», удалять эту часть, что бы число было целочисленное. Лучше я не придумал.
У нас есть теперь функции для нажатия цифр и для нажатия операций, что дальше? Дальше нам надо выводить результат, это кнопка = (ENTER).
Напомню, что переменная self.first_value сейчас ровна первой переменной, которую мы вводим, а self.equal держит в себе операцию, которую мы нажали. После мы вводим второе число и жмем на =, мы пытаемся узнать, что же это за операция, а потом и определяем 2-ю переменную.
Переходим дальше, к функциям операций. Получилось у меня вот так:
Функция self.determinate_second_value() определяет второе значение переменной, которое мы ввели. Немного не логично и криво, но как есть, постараюсь учесть все ошибки потом в комментариях, когда умные люди скажут как правильно.
Поясню за self.result[-2:]. [-2:] говорит о том, что мы сравниваем последние 2 символа строки с «.0».
Вот и наш результат выводится в главный блок lineEdit, поздравляю.
Так же приложу здесь код, который удаляет один символ из строки или полностью все число или добавляет «.» (точку) для создания дробного числа:
Весь код под спойлером:
Да, калькулятор не вычисляет большие функции и выражения, я над этим работаю!
Спасибо вам большое за внимание. Удачи вам и развивайтесь! Это круто.
Так же хотелось бы пригласить вас в свой Telegram-канал JuniorProger, где я рассказываю о жизни Junior программиста и его тернистый, но очень интересный путь становления It-специалистом.
Калькулятор
Многие программисты стараются изучать языки программирования с помощью написания достаточно простых программ. Один из вариантов – написание калькулятора. Конечно, можно посчитать в отладчике Python или запустив консоль. Но гораздо лучше написать на python свой калькулятор с графическим интерфейсом.
Считаем в консоле
Чтобы посчитать математические выражения можно запустить консоль. Запустить python. После этого набираем математические выражения и получаем ответ. Для этого даже не надо уметь программировать.
Делаем простой калькулятор
Лучше всего закреплять свои знания по программированию с помощью написания простых программ. Таких приложений можно придумать много – календарь, программа для хранения заметок, получение прогноза погоды.
Можно написать программу, которая делает скриншоты и сохраняет полученные изображения в папку. В любом случае, надо выбрать какое-нибудь не сложное задание, чтобы не закопаться в нем. Потом его можно будет расширить и сделать по-настоящему полезное приложение.
В нашем случае мы разберем, как создать простой графический калькулятор на Python 3. Для реализации графического интерфейса воспользуемся стандартным пакетом Tkinter. Он входит в состав Python 3. Соответственно, если у вас установлен Python, то дополнительно не надо ничего устанавливать.
В первых строках файла calculator.py подключаем библиотечные функции:
Импорт библиотек и исходные данные
Создаем окно приложения — объект Tk с заголовком Calculator. Во вложенном кортеже buttons будут храниться обозначения для кнопок. В список stack будем добавлять введенные числа и операции, которые надо совершить. activeStr предназначен для хранения набираемого числа.
Вычисление результата
Функция calculate получает из списка stack операнды и операцию которую над ними надо произвести. Результат отображается в надписи label. Получать из списка строки будем с помощью метода pop.
Обработка нажатия
В функции click выполняется обработка нажатой клавиши. В качестве ее аргумента передается текст, отображаемый на кнопке, которую нажали. Хотелось бы хранить вводимое значение прямо в надписи, а не создавать для этого отдельную переменную. Но так не получается из-за алгоритма работы. После того как посчитан результат, он записывается в надписи. При попытке после этого начать вводить новое число, оно бы дописывало прежний результат.
В списке с операторами и командами для калькулятора не обязательно их будет 3. Но при обработке с помощью метода pop, будут рассматриваться 3 последних введенных значения. А после проведения расчета список очистится. Далее в него добавляется полученный результат, на случай если пользователь нажмет на калькуляторе клавишу операции сразу, а не будет вводить новое число.
Внешний вид
Теперь займемся оформлением внешнего вида калькулятора и зададим обработку нажатия кнопок. Создаем надпись для вывода набираемых значений и результатов. В цикле создаем кнопки. Расположение кнопок и надписи осуществляется в табличном виде с помощью упаковщика grid. И в завершении запускаем цикл обработки событий mainloop.
У надписи выставлена ширина 35, для того, чтобы оформление кнопок подстраивалось под надпись. И в результате кнопки при этом значении лучше выглядят.
Для того, чтобы кнопки правильно работали, пришлось для каждой из кнопок создать свою функцию с помощью lambda.
По аналогии приведенного кода python калькулятора можно сдель, допустим, календарь. Для этого надо будет запрашивать текущую дату у операционной системы. Открывать нужный месяц, рассчитывать какие числа выпадут на понедельники, какой год високосный. Сделать возможность менять год и месяцы.
How to make a calculator in Python + Python Tkinter Calculator
In this Python tutorial, we will make a calculator in python, which can add, subtract, divide, and multiply depending upon the user-entered input.
Also, we will discuss how to create a Python Calculator using Tkinter.
Make a calculator in Python
Let us see how we can create a calculator in python using functions.
As you can see that we have created a simple calculator in python, which can perform different arithmetical operations like add, subtract, multiply, and divide. The user-defined function is add(), subtract(), multiply() and divide() will evaluate respective operation and display the output.
Example:
You can refer to the below screenshot to make a calculator in Python.
Output:
Here, we ask the user to choose an operation of their choice. If the option is 1,2,3, and 4 then it will be valid else it will display “Invalid input”. If the option is valid then we have to enter the two numbers and according to the user entered choice, it will perform the operation.
Calculator in python using class
Let’s see step by step how we can create a class which will perform basic calculator operation.
Example:
Now, you can see code with the output.
Output:
Calculator in python without function
We have created a simple calculator in python without a function that can perform different arithmetical operations like add, subtract, multiply, and divide.
Example:
Below screenshot shows how we can create a calculator without function.
Calculator in python code
In this, we will see the code for a calculator in python. Here, we create an individual function to perform the operation like add, subtract, multiply, and divide. It will accept the user’s input along with the choice of operator and return the result.
Example:
You can see the below screenshot for calculator in python code and the output.
Output:
This is how we can make a calculator in Python.
Python Tkinter Calculator
Let us see how to create a simple calculator using Python Tkinter. I hope this Python Tkinter calculator example will help you to create a simple calculator in Python.
If you are new to Python GUI programming or Python Tkinter, check out Python GUI Programming (Python Tkinter)
Create a Simple Calculator using Python Tkinter
Planning for Python Tkinter Calculator
In this section, we will discuss the secret of training yourself before writing a code for the python Tkinter calculator. We will discuss the look of an application, functions it is going to perform, and source of inspiration.
After observing the entire windows 10 calculator application, now it’s time to write things we are going to use or implement in our application.
Algorithm to Create Python Tkinter Calculator
In this section, we will discuss the algorithm for creating a python Tkinter calculator. Also, we will provide the data-flow diagram (DFD) for the same.
frame_1 = Frame(ws)
frame_1.pack(expand=True, fill=BOTH)
key_1 = Button(
frame_1,
text=’1′,
font=(‘Arial’, 22),
border = 0,
relief = GROOVE,
bg = ‘#2E2E2B’,
fg = ‘white’,
command = lambda: display(1)
)
In this code, we are creating a button. To understand the button please refer to our button section. Here, under the command, we can call a function but we cannot pass an argument to a function. That is why we have used the anonymous function lambda here. To know more about the anonymous function please refer to our section on the anonymous function.
Here is the DFD of calculator
equal_btn()
def clear_scr(number)
def display(number)
Code:
Output:
So in this tutorial we have learned about how to create calculator using python tkinter.
You may like the following Python tutorials:
In this Python tutorial, we have learned how to make a calculator in Python. Also, we have covered these below topics:
Entrepreneur, Founder, Author, Blogger, Trainer, and more. Check out my profile.
Источники информации:
- http://habr.com/ru/post/589847/
- http://habr.com/ru/sandbox/115348/
- http://cloud.timeweb.com/blog/prostoj-kalkulyator-na-python
- http://habr.com/ru/post/586730/
- http://www.8host.com/blog/napisanie-prostejshego-kalkulyatora-v-python-3/
- http://habr.com/en/sandbox/115348/
- http://habr.com/ru/post/458536/
- http://all-python.ru/primery/kalkulyator.html
- http://pythonguides.com/make-a-calculator-in-python/