2021-02-28

Создание графического калькулятора на языке программирования Python и создание исполняемого файла.

Создание графического калькулятора на языке программирования Python и создание исполняемого файла. (Доклад)

 

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

“Почему именно Python?”

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

Ну и самое интересное, конечно же - востребованность и актуальность Python на рынке. На данный момент Python-программист востребован вообще везде, практически в любой разработке. Более 3500 тысяч Python-разработчиков сейчас требуются в России и за границей. В Москве новички в этой сфере(Джуниоры) могут рассчитывать на оклад в 50-70 тысяч рублей, в то время как разработчики со стажем работы от 3 лет зарабатывают в среднем от 120-160 тысяч рублей и это не предел. Этот язык используют множество известных компаний, таких как: Google, Facebook, Yahoo, NASA.

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

Для достижения поставленной цели были сформулированы следующие задачи:

  • Задачи:

Первая – Установить среду разработки Python.

Вторая – Изучить основы языка программирования Python.

Третья – Изучить возможности библиотеки Tkinter и использовать их.

Четвертая – Ознакомиться с техническими требованиями к программе-калькулятору и на их основе создать полноценную блок-схему (блок-схемы) работы программы

Пятая – На основе составленной блок-схемы (блок-схем) написать код программы и компилировать его в исполняемый файл формата «EXE»

 

Ход работы

Этап 1.

 Установить среду разработки было легче всего. Зайдя на сайт https://www.python.org/getit/ я установил версию 3.9.0 .

Этап 2

Изучение основ заняло не так много времени, как я думал. Я смог освоить необходимый минимум знаний для написания простого кода, благодаря этому видеоролику: https://www.youtube.com/watch?v=fp5-XQFr_nk (Учим Python за 1 час! #От​ Профессионала -- Хауди Хо™ - Просто о мире IT!).

Этап 3

Библиотеку Tkinter я изучил тоже при помощи видеохостинга Youtube.

Этап 4

Знакомство с техническими требованиями к калькулятору:

Заказчик программы (в моем случае – это учитель информатики) выдвинул следующие требования к будущему калькулятору:

  1. Калькулятор должен осуществлять 4 базовые математические операции: (+,-, *,/)
  2. При запуске калькулятора и после нажатия кнопки «очистка» в поле ввода должна находиться цифра «0»
  3. При вводе цифр ноль пропадает. Цифры добавляются справа от предыдущих цифр.
  4. При нажатии на кнопку операции цифры, находящиеся на экране остаются, и справа приписывается сама операция, после чего возможно ввести следующую цифру для образования бинарной операции. Всё это должно сохраняться в поле ввода.
  5. При нажатии кнопки «=» осуществляется выполнение операции, находящейся в поле ввода, т.е. числа и операция перед нажатием на «=» не исчезают с экрана.
  6. Возможность осуществления унарных операций. Например при если после ввода 5+ нажать кнопку «=», то операция должна превращаться в бинарную: 5+5.
  7. При вводе больше чем одной операции, должно происходить вычисление предыдущей операции, например, если на экране было 5+7 и после этого ввести операцию «-», то должно произойти «схлопывание», т.е. на экране должно быть 12-
  8. Калькулятор не должен принимать никаких других знаков с клавиатуры кроме цифровых, десятичной точки и знаков операций (+-*/).
  9. Калькулятор должен «уметь» работать как от щелчков на графических кнопках программы, так и от нажатия на кнопки клавиатуры.
  10. При делении на «0» должно появляться окно, с сообщением об ошибке: «На ноль делить нельзя!»

 

Анализ технических требований к работе калькулятора привел к построению одной общей блок-схемы и пяти детализированных (функциональных) блок-схем:

Блок-схема общей логики работы калькулятора:

Общий принцип работы калькулятора следующий. После запуска программы создаются экземпляры класса tkinter для создания окна программы, а также экземпляр класса messagegox для возможности вывода сообщения об ощибке. Далее последовательно запускаются функции для создания поля ввода и цифровых кнопок для интерфейса программы. В поле ввода записывается «0».

После этого программа переходит в режим ожидания (На блок-схеме обозначена как «точка ожидания»). В этом режиме программа ждет срабатывания одного из пяти возможных событий: нажатия цифровой кнопки в интерфейсе программы, нажатия клавиши клавиатуры компьютера, нажатия кнопки с операцией на интерфейсе, нажатия кнопки «=» на интерфейсе или нажатия кнопки очистки поля ввода. Каждое из этих пяти событий обрабатывается своей определенной функцией, блок-схемы которых представлены далее.

 

Детализированная блок-схема функции обработки нажатия цифровой кнопки (функция add_digit):

 

При нажатии цифровой кнопки на интерфейсе программы или нажатии цифровой клавиши на клавиатуре вызывается функция add_digit, при этом в эту функцию передается строка, содержащая соответствующую цифру: «1», «2», «3», и т.д. Попадая в эту функцию переданная строка записывается в локальную переменную value, которая затем анализируется в условном операторе. Если переменная value целиком состоит только из одного знака «0», то этот знак из переменной убирается оператором выборки среза списка:

            value = value[1:] – т.е. из строки value извлекается всё, кроме символа на первой позиции, а т.к. там был единственный «0», то строка value после этого оказывается пустой.

Если же в строке value имелись другие цифры, отличные от «0», то ничего не происходит и осуществляется для обоих случаев конкатенация старого значения value с вновь полученной цифрой :

            value = value + digit

После этого происходит очистка поля ввода от старой записи и, тут же вносится новое значение переменной value.

 

Блок-схема функции обработки нажатия клавиш на клавиатуре (функция press_key):

 

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

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

            Если нажата кнопка операции (+-*/), то вызывается функция add_operation, блок-схема которой будет описана несколько ниже. При этом в эту функцию передается строка, содержащая соответствующую операцию («+», «-», «*» или «/»).

            Если была нажата кнока «=», то вызывается функция calculate, код которой также будет описан ниже. Функция calculate сама прочитает содержимое поля ввода и произведет необходимые вычисления.

 

Детализированная блок-схема функции обработки нажатия кнопки с операцией (функция add_operation)

 

Функция add_operation вызывается при нажатии кнопки операции на графическом интерфейсе программы либо при нажатии кнопки операции на клавиатуре. При вызове этой функции происходит передача строки, содержащей одну из математических операций: («+», «-», «*» или «/») Логика данной функции состоит в следующем. Сначала в локальную переменную value считывается текущее состояние поля ввода, после чего эта переменная анализируется в условном операторе. Если в крайней позиции переменной value оказывается символ операции, что может произойти, например, при таком виде строки: «45+», то последнюю операцию, в данном случае «+» следует удалить, а на ее место поставить «вновь прибывшую» операцию. Это осуществляется командой среза из списка строки за исключением символа в крайней правой позиции:

            value = value[:-1]

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

            calc.insert(0,value+operation)

Если операция не была найдена внутри значения value, то, минуя функцию calculate, происходит очистка поля ввода и в него записывается конкатенация строки value c «вновь прибывшей операцией»:

            calc.insert(0,value+operation).

 

 

Блок-схема функции обработки нажатия клавиши «=» (функция calculate)

Функция calculate вызывается в момент нажатия кнопки «=» на цифровом интерфейсе либо клавиши «=» на компьютерной клавиатуре. Также эта функция вызывается как промежуточная внутри функции add_operation для выполнения так называемого «схлопывания» предыдущей операции. Как и предыдущие функции в начале работы этой функции происходит считывание содержимого поля ввода в переменную value, которая проходит промежуточный анализ на предмет наличия в ней унарной операции (например такой строки: «5+»). В таком случае унарная операция превращается в бинарную путем конкатенирования переменной value той же переменной value, но без последнего символа:

value = value + value[:-1]

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

Причем вычисление производится не в виде реальных математических операций (+_*/), а внутри функции eval, которая получает на вход строку, разбивает ее на цифры и операции и производит математическую операцию внутри себя.

calc.insert(0, eval(value))

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

 

Блок-схема функции обработки нажатия клавиши «С» (очистка поля ввода функцией Clear):

 

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

Этап 5.

Написание кода программы.

Код программы составлен в строгом соответствии с приведенными выше блок-схемами программы и имеет следующий окончательный вид:

 

Для возможности запускать программу вне среды разработки Python было принято решение о компиляции программного кода в исполнимый (exe) файл. Эта работа была проведена в консоли операционной системы, в режиме командной строки:

В консоли Windows была дана команда:

            pyinstaller –F  calc.py

Эта команда запустила инсталлятор Питона, который в указанной папке нашел файл calc.py, скомпилировал его в исполняемый exe-файл и поместил в папку dist.

 

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

            Кроме того, данный файл распознается как вредоносный и регулярно удаляется из любых папок на системном диске С. Вопрос о том, как «подружить» данный файл с системой безопасности ‘Windows на данный момент для меня, к сожалению, остается открытым.

Выводы по проекту:

В ходе работы над проектом были выполнены все поставленные цели и задачи.

Я познакомился с новым для себя языком программирования – Python, укрепил свои навыки в предварительной разработке логики работы программы перед написанием самого кода. Этот подход позволил избежать многих ошибок при работе над кодом, а также помог существенно оптимизировать сам код.

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

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

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

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

 

Спасибо за внимание!

Презентация:


article

Авторизация
Логин:
Пароль:

Добро пожаловать,
гость сайта!

Статистика по сайту:

Сегодня сайт уже посетили 119 чел.

Количество всех статей на сайте: 498.

Количество online-тестов: 211.