Разработка калькулятора на языке программирования Python.

XV Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

Разработка калькулятора на языке программирования Python.

Полищук Владимир Владиславович 1
1Муниципальное бюджетное общеобразовательное учреждение гимназия №6 имени дважды Героя Советского Союза Д.А. Драгунского
Колдоркина Ольга Александровна 1
1Муниципальное бюджетное общеобразовательное учреждение гимназия №6 имени дважды Героя Советского Союза Д.А. Драгунского
Автор работы награжден дипломом победителя II степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

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

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

Задачи:

Составить шаблон (основу) и спроектировать основные элементы программы.

Устранить ошибки и исправить недочеты программы.

Доработать программу и добавить дополнительные функции.

Основная часть

2.1 Импортирование модулей

Для начала нам нужно импортировать нужные нам модули и библиотеки. Библиотека tkinter – основная для нашей программы, потому что с её помощью и создаётся весь интерфейс калькулятора. Messagebox нужен для показа всплывающих уведомлений, а math для различных выражений с числами. (см. приложение 1)

Всё что нам нужно мы импортировали. Теперь можно писать код.

2.2 Функции

__init__

В этой функции программа создаёт основные для её работы объекты: все переменные, которые нам нужны, все кнопки и поля ввода, задаёт элементам параметры и запускает другие функции, нужные для старта программы. Так же в этой функции задаётся размер окна, минимальный размер окна, заголовок окна, цвет заднего фона и прочие параметры. Весь этот процесс называется инициализацией. (см. приложение 2)

Функции, нужные для изменения поля ввода

add_number(цифра)

Эта функция вызывается при нажатии на кнопки цифр от 0 до 9. Она не просто добавляет цифры в конец строки ввода, но и проверяет, можно ли их добавить и соблюдаются ли для этого определённые условия. Например, при нажатии на цифру мы проверяем, равно ли всё что находится в поле ввода нулю, и если это так, то перед добавлением цифры мы очищаем поле ввода. (см. приложение 3)

add_operation(операция)

Функция работает на подобии предыдущей, но добавляет не цифры, а знаки операций (плюс, минус, умножение, деление), и у этой функции тоже есть ряд условий, которые в свою очередь, отличаются от условий добавление цифр. Так как при добавлении операции мы переносим число наверх, в поле где находится наш пример целиком, мы должны привести число в привычное для нас состояние. Например, эта функция при нажатии на любую кнопку операции, заменит 0.; -0; 0.0; -0.0 на 0, ведь эти все числа абсолютно не отличаются, но понятнее всего они станут для человека в виде нуля. (см. приложение 4)

calculate

По названию можно понять, для чего нужна эта функция. Она просто считает весь готовый пример и возвращает ответ. Но даже здесь есть условия, при которых она не работает так, как должна. Самый простой и понятный пример – деление на ноль. Если оно есть в примере, функция использует ранее импортированный модуль messagebox для сообщения пользователю о том, что данный пример нельзя посчитать, так как на ноль делить нельзя. (см. приложение 5)

clear_all

Эта функция работает намного проще предыдущих, да и размер её не особо большой, всего 7 строк. Тут и объяснять то нечего, она просто заменяет весь написанный текст в поле ввода на 0 – очищает весь пример. (см. приложение 6)

change_sign

Функция тоже очень проста. Условия в ней конечно есть, но их всего 2. Одно из условий – функция проверяет: если значение равняется -0, то она заменяет его на 0; если значение равняется 0, то она заменяет его на -0; а в остальных случаях просто умножает число на -1, ведь это простое математическое действие может легко поменять знак у числа на противоположный, даже не зная его, а условие для 0 и -0 нужны, потому что программа умножив эти числа на -1 заменит их на 0, и не добавит минус. (см. приложение 7)

percent

Функция проще предыдущей, потому что высчитать один процент от числа не составит труда даже человеку, не то что компьютеру. Функция просто делит число на экране на 100. (см. приложение 8)

add_comma

Функция тоже очень простая, и не имеет никаких условий, а просто проверяет, есть ли запятая в числе. Если да, то она ничего не делает, а если нет, то добавляет запятую в конец числа. (см. приложение 9)

backspace

Функция стирает последнюю цифру числа, если оно не равно 0 или -0, также если длина числа составляет 1 символ, то заменяет его на 0. (см. приложение 10)

on_press(клавиша)

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

Функции, нужные для изменения интерфейса программы и её элементов

more

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

settings

Эта функция отвечает за открытие и закрытие настроек программы и срабатывает при нажатии на первую кнопку меню. Пока что там есть только одна кнопка – смена темы, но в будущем я буду добавлять туда другие фишки. (см. приложение 13)

on_scale

Я создал эту функцию, потому что в процессе разработки столкнулся с проблемой, что весь текст в кнопках не менял свои размеры, а кнопки становились больше, и это всё выглядело некрасиво: кнопка огромная, а текст еле видно. Функция решает эту проблему. При изменении размеров окна, она проверяет, равняется ли значение по ширине или высоте определённому количеству пикселей (все значения прописаны в функции), и меняет размер текста, впоследствии перезагружая текст на всех кнопках чтобы изменения были видны. Также она подстраивает кнопки памяти (m+, m-, mr, mc) в соответствии с размером окна. (см. приложение 14)

change_theme

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

button_colors(кнопка, типкнопки)

Я сделал эту функцию для установки цветов кнопкам в зависимости от темы и типа кнопок. Типов кнопок всего 5: для кнопок цифр, для кнопок операций, для кнопки равно, для кнопки, на которую нельзя нажать и для кнопки выхода (красная кнопка, кнопка, которая горит красным при наведении) (см. приложение 16)

button_colors_reload

Эта функция особо ничего не делает, она сделана для упрощения перезагрузки цветов всех кнопок просто её вызовом. (см. приложение 17)

buttons_reload

Эта функция используется в функции on_scale и перезагружает весь текст на кнопках. (см. приложение 18)

reload

Главная функция, которая запускается в функциях __init__ и change_theme. Она вызывает две предыдущих функции, а так же загружает заново все цвета элементов в зависимости от темы. (см. приложение 19)

fullscreen

Функция переключает полноэкранный режим. Если он включен, то выключает его, а если выключен, включает. (см. приложение 20)

copy_entry_text

Функция копирует число, которое мы ввели в буфер обмена, когда пользователь нажмёт на нужную кнопку. (см. приложение 21)

m(параметр)

Эта функция выполняется при нажатии на сразу четыре кнопки, и отвечает за добавление, очистку и вставку в поле ввода числа из встроенной памяти калькулятора. (см. приложение 22)

show_menu

Функция показывает кнопку для копирования текста в поле ввода при нажатии на него. (см. приложение 23)

exit(код=0)

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

translate(текст, значение[1 или -1]

У программы и человека немного отличаются обозначения, эта функция “переводит” эти значения для связи между тем, что видим мы, и тем, что видит программа. Она заменяет привычную для нас запятую на точку, знак умножения в виде крестика на звёздочку (*), а знак деления на косую черту (/), ведь именно так компьютер может понять, что это за знаки. Значение 1 переводит значения так, чтобы они были понятны для компьютера, а значение -1 – чтобы мы видели красивые и понятные значки. (см. приложение 25)

debug

В языке программирования python есть небольшая особенность у операции деления: если ты делишь одно число на другое, не важно, кратно ли оно или нет, тебе выдвдут число с плавающей точкой, или же число с запятой, то есть если ты поделишь 5 на 2, как и должно, ты получишь 2,5. Но если ты поделишь 6 на 2, ты получишь 3,0 вместо 3. Эта функция исправляет такой недочёт, чтобы числа на экране были понятнее. (см. приложение 26)

2.3 Интерфейс

При запуске программы мы сразу видим привычный нам калькулятор. На нем указаны цифры и операции: умножения, деления, сложения, вычитания, проценты, смена зкака числа (положительное или отрицательное), десятичная запятая, кнопки памяти и меню для выбора настроек калькулятора. (см. приложение 27)

Цвет кнопок меняется автоматически при наведении и нажатии на них – наведение: (см.приложение 28), нажатие: (см.приложение 29).

В глаза сразу бросается кнопка меню в левом верхнем углу. Если на неё нажать, откроется главное меню программы (см. приложение 30)

В меню есть 3 кнопки: настройки, полноэкранный режим и кнопка закрытия программы.

Открываем натройки (settings): (см. приложение 31)

Видим кнопку смены темы, в данный момент она светлая (light). Если мы нажмём на неё, то она станет темной (dark) (см. приложение 32)

Также можно включить полноэкранный режим (fullscreen): (см. приложение 33)

Так выглядит калькулятор в полноэкранном режиме (см. приложение 34)

Вернемся в главный экран, нажав снова на кнопку меню в левом верхнем углу. Можно делать вычисления сразу всего примера, при этом будет соблюдаться последовательность действий. Например, действия в сложения и вычитания будут выполняться после действий умножения и деления (см. приложение 35)

Ошибки тоже обрабатываются. Программа при этом не выключается, а выдает ползователю сообщения об ошибках. Например, если поделить на ноль, он сообщит об этом (см. приложение 36)

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

3. Заключение

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

4. Список использованных источников и литературы:

1. Майкл Доусон “Программируем на Python”, Питер, 2019 год, 416 страниц.

2. Алекс Мартелли, Анна Рейвенскрофт, Стив Холден “Python справочник”, Москва, 2018 год, 896 страниц.

5. Приложения

Приложение 1:

Приложение 2:

Приложение 3:

Приложение 4:

Приложение 5:

Приложение 6:

Приложение 7:

Приложение 8:

Приложение 9:

Приложение 10:

Приложение 11:

Приложение 12:

Приложение 13:

Приложение 14:

Приложение 15:

Приложение 16:

Приложение 17:

Приложение 18:

Приложение 19:

Приложение 20:

Приложение 21:

Приложение 22:

Приложение 23:

Приложение 24:

Приложение 25:

Приложение 26:

Приложение 27:

Приложение 28:

Приложение 29:

Приложение 30:

Приложение 31:

Приложение 32:

Приложение 33:

Приложение 34:

Приложение 35:

Приложение 36:

Приложение 37:

Просмотров работы: 892