Питон. Курсовой проект введение
Скачать 0.83 Mb.
|
КУРСОВОЙ ПРОЕКТ ВВЕДЕНИЕ Прикладные программы являются неотъемлемой частью жизни каждого пользователя персонального компьютера, такие программы отвечают за выполнения множества задач, таких как написание текстовых документов, обработка аудио или видео файлов, а также выполнение математических расчетов. Подобные приложения позволяет решать огромное количество задач быстрее и точнее, чем это смог бы обычный человек и является существенным фактором в развитие различных сфер деятельности человека начиная с простого ведения учета расходов за месяц и заканчивая запуска ракет в космос. Целью курсовой работы является углубление знаний и расширение навыков по разработке алгоритмов и их реализации на персональном компьютере на примере создание калькулятора на языке Python для выполнения простейших математических вычислений. Для выполнения поставленной цели необходимо решить следующие задачи: - провести анализ предметной области; - изучить доступные средства программирования; - изучить существующие аналоги приложения; - разработать компоненты приложения. Курсовая работа состоит из введения, двух глав каждая из которых состоит из 3 параграфов, заключения, списка использованных источников и приложений, по завершению работы поставленная цель была достигнута, задачи были выполнены. Для выполнения работы был использован аналитический метод исследования и также метод моделирования. Глава 1. Теоретические аспекты создания приложения Калькулятор в объектно-ориентированном языке программирования Python Сущность языка программирования Язык программирования является формальным языком, предназначенным для записи компьютерных программ, он определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые будут выполняться исполнителем. Большая часть языков программирования состоят из инструкций для компьютера. Существуют программируемые машины, которые используют специфические инструкции, а не языки программирования. Описание программного языка как правило разделяется на два компонента синтаксис (форма) и семантика (значение). Некоторые языки четко определены при помощи документаций, например, ISO стандарты в случае с языком программирования C, тогда как другие используют декларативные формы, то есть описывается, что представляет собой проблема и ожидаемый результат. Языки программирования обладают следующими характерными чертами: Функции и цели – язык компьютерного программирования используются для взаимодействия между человеком и машиной, в большинстве случаев в роли машины выступает компьютер. Абстракция – языки программирования обычно содержат абстракции для обозначения и управления структурой данных и порядком управления. Сила выражений – теория алгоритмов классифицирует языки программирования, по алгоритмам, которые они способны выражать. История языков программирования начинается с 1940 года. В этом году был создан первый современный компьютер, но мощности компьютера на тот момент не хватало для выполнения программ на языке ассемблера и было необходимо вручную переписывать команды на язык нулей и единиц. Конрад Цузе создал свой высокоуровневый язык Планкалкюль (Plankalkül) в 1943-1945 для своего Z1 компьютера, но язык не был имплементирован. Первые функционирующие языки программирования появились в 1950-х годах. Short Code Джона Уильям Мокли, предложенный в 1949 году, был одним из первых высокоуровневых языков для электронного компьютера. В отличие от машинного кода, выражения в Short Code представляли из себя понятные математические выражения. Однако при каждом запуске программы она переводилась в машинный код что существенно замедляло скорость работы и по сравнению с эквивалентным машинным кодом Short Code был медленнее. В ранних 1950-х, Алик Глени разработал Autocode, возможно первый компилируемый язык программирования. В 1954 году вторая итерация данного языка известная как Mark 1 Autocode была разработана для Mark 1 Брукером Р.А. Затем в 1950-х вместе с Университетом Манчестера Брукер разработал Autocode для Ферранти Меркури. Версия для EDSAC 2 была разработана Дугласом Харти из Кембриджского Университета. В 1954 году командой под лидерством Джона Бакус из IBM был изобретен FORTRAN. Это был первый повсеместно используемый высокоуровневый язык программирования с имплементацией функций. Данный язык все еще используется для написания программ оценки производительности суперкомпьютеров. Период с 1960 по 1970 годов принес расцвет языков программирования. Большинство современных парадигм программирования появились именно в этот период. Speakeasy – разработан в 1964 году в ANL Стэнли Кохен, является объектно-ориентированным языком программирования. Использует синтаксис Fortran как свою основу. Данный язык всё еще используется. Simula – разработан в поздних 1960-х Нигардом и Далем как надстройка Algol 60, был первым языком с поддержкой объектно-ориентированного программирования. C – компилируемый статически типизированный язык программирования общего назначения, разработанный в 1969—1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие языка B. Smalltalk – середина 1970-х, предоставил фундаментальный дизайн объектно-ориентированного языка. Prolog – разработан в 1972 году Колмерауером, Рузелом и Ковальски, является первым логическим языком программирования. ML – разработан Робином Милнером в 1973 году, разработал статическую типизацию функциональных языков программирования. Большинство современных языков являются родственниками хотя бы одного из перечисленных языков. В 1960-1970-х также проводились дебаты о преимуществах «структурированного программирования», что означает программирование без использования «goto». Большая часть программистов верила в то, что использование «goto» является плохим стилем программирования за исключением некоторых случаев. Причина возникновения подобных дебатов являлось то, что некоторые языки программирования не использовали «goto», что заставляло программистов использовать структурированный подход к программированию. В 1980-ые вместо создания новых парадигм, все начали более тщательно прорабатывать идеи разработанные в прошлом десятилетие. C++ совместило объектно-ориентированное программирование и системное программирование. США стандартизировали Ada. Многие страны начали инвестировать в пятое поколение языков программирования. Одним из важнейших новых трендов является дизайн языков с фокусом на большие системы через использование модулей или больших организационных юнитов кода. Ada и ML использовали модульные системы. Пусть в этот период и не появилось новых крупных парадигм, но разработчики расширили идеи старых парадигм и адаптировали их под современные условия. В 1990-х благодаря росту популярности сети интернет, открылись новые платформы для компьютерных систем. Интернет дал возможность новым языкам таким как JavaScript получить популярность благодаря ранней интеграции с Netscape Navigation браузером. Различные другие языки получили распространение в разработки специальных приложений для веб-серверов, например, PHP. Более радикальными и инновационными чем RAD языки стали новые сценарные языки. Они имели новый синтаксис и более свободное объединение функций. Сценарные языки стали самыми выдающимися языками для веб разработки. В настоящее время присутствуют определенные тренды развития языков программирования, такие как: увеличение поддержки функционального программирования в коммерческих популярных языках, включая чистоту функционального программирования чтобы сделать код легче для восприятия и распараллеливать на микро- и макро- уровнях; конструкции для поддержки параллельного и распределенного вычисления; механизмы для улучшения безопасности и надежности верификаций языка: увеличенная проверка статичных данных, зависимого типа, контроль информационного потока, статичная потоковая безопасность; альтернативные механизмы для компонуемой и модульности: примесь, типаж, классы типов, делегации, аспекты; компонент ориентированная разработка ПО; метапрограммирование, рефлексия или доступ к абстрактному синтаксическому дереву; увеличение интереса в распространение и мобильности; интеграция с базами данных; открытое программное обеспечение как философия языков программирования; исследование квантовых компьютеров; повышенный интерес в визуальных языках программирования. Каждый из языков программирования следует хотя бы одной из парадигм программирования. Парадигма программирования – это совокупность идей и понятий, определяющих стиль написания компьютерных программ. Выделяют следующие основные парадигмы: • императивная парадигма – исходный код состоит из команд, которые выполняются последовательно, а результат этих команд может быть записан в память и читаться последующими инструкциями; • декларативная парадигма – в данном стиле написания исходного кода задаётся спецификация решения задачи, то есть описывается, что представляет собой проблема и ожидаемый результат; • структурная парадигма – в основе лежит представление программы в виде иерархической структуры блоков; • функциональная парадигма – противопоставляется императивной парадигме; • логическая парадигма – основа на автоматическом доказательстве теорем; • объектно-ориентированная парадигма - основана на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования. Практически все современные языки программирования в той или иной степень допускают использование различных парадигм, также парадигмы зачастую пересекаются в деталях. По статистике tiobe.com из 5 самых популярных языков программирования 4 являются объектно-ориентированными языками. Специфика объектно-ориентированной парадигмы программирования Объектно-ориентрованное программирование является одной из методологий (парадигм) разработки программного обеспечения, в эту методологию входят языки, основанные на концепции «объектов» – условных сущностей, которые объединяют в себе поля (данные) и методы (выполняемые объектом действия). Достаточно сложно конкретно определить, что такое объектно-ориентированный язык программирования, одним из основных подходов являются 6 принципов Алана Кэя, отца основателя ООП. Всё является объектом. Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия. Каждый объект имеет независимую память, которая состоит из других объектов. Каждый объект является представителем класса, который выражает общие свойства объектов (таких, как целые числа или списки). В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия. Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве. Особенностями данных объектно-ориентированных языков использование механизмов, таких как – наследование, инкапсуляция, полиморфизм. Наследование - Создание нового класса объектов путём добавления новых элементов (методов). Некоторые объектно-ориентированные языки позволяют выполнять множественное наследование, то есть объединять в одном классе возможности нескольких других классов. Инкапсуляция – сокрытие деталей реализации, которое позволяет вносить изменения в части программы безболезненно для других её частей, что существенно упрощает сопровождение и модификацию ПО. Полиморфизм – при полиморфизме некоторые части (методы) родительского класса заменяются новыми, реализующими специфические для данного потомка действия. Таким образом, интерфейс классов остаётся прежним, а реализация методов с одинаковым названием и набором параметров различается. В ООП обычно применяется полиморфизм подтипов (называемый при этом просто «полиморфизмом»), нередко в форме позднего связывания. Абстракция – для выделения в моделируемом предмете важного для решения конкретной задачи по предмету, в конечном счёте — контекстное понимание предмета, формализуемое в виде класса; Многие современные языки созданы специально для облегчения объектно-ориентированного программирования. Техники объектно-ориентированного программирования можно использовать и для не-объектно-ориентированного программирования. Такие языки содержат следующий набор элементов: объявление классов с полями (данными — членами класса) и методами (функциями — членами класса). механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООЯ поддерживают только единичное наследование. полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той же переменной экземпляры различных классов. полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООЯ все методы классов являются виртуальными. Некоторые языки также добавляют дополнительные средства, такие как: конструкторы, деструкторы, финализаторы; свойства (аксессоры); индексаторы; средства управления видимостью компонентов классов (интерфейсы или модификаторы доступа, такие как public, private, protected, feature и др.). Не все языки отвечают принципам ООП в полной мере, существуют гибридные языки объединяющие объективную парадигму с другой парадигмой или даже двумя и более. Всё это позволяет проводить разработку крупных программных комплексов командой программистов, что позволяет выполнять задачи объединения и создания компонентов выполняются разными людьми в случае необходимости. Одним из примеров подобный языков является Python. Python как актуальный язык для написания приложений Python является высокоуровневым языком программирования общего назначения, основной характеристикой языка являются повышенная производительность разработки и читаемость написанного кода. Python обладает минималистичным синтаксисом. Язык поддерживает различные методологии, такие как – структурная, обобщенная, объектно-ориентированная, аспектно-ориентированная и. функциональная. Основными архитектурными чертами являются – автоматическое управление памятью, динамическая типизация, полная интроспекция, поддержка многопоточный вычислений, высокоуровневые структуры данных, механизм обработки исключений, разбиение программ на модули, объединение модулей в пакеты. Python придерживается определенной философии сформулированной Тимом Петерсом, звучит она так: красивое лучше, чем уродливое; явное лучше, чем неявное; простое лучше, чем сложное; сложное лучше, чем запутанное; плоское лучше, чем вложенное; разреженное лучше, чем плотное; читаемость имеет значение; особые случаи не настолько особые, чтобы нарушать правила; при этом практичность важнее безупречности; ошибки никогда не должны замалчиваться; если не замалчиваются явно; встретив двусмысленность, отбрось искушение угадать; должен существовать один — и, желательно, только один — очевидный способ сделать это; хотя он поначалу может быть и не очевиден, если вы не голландец; сейчас лучше, чем никогда; хотя никогда зачастую лучше, чем прямо сейчас; если реализацию сложно объяснить — идея плоха; если реализацию легко объяснить — идея, возможно, хороша; пространства имён — отличная вещь! Давайте будем делать их больше! Данный текст можно вывести при помощи команды import this. Python работает почти на всех платформах, начиная от КПК и заканчивая мейнфреймами. Возможности портируемости обеспечиваются поддержкой характерных для каждой платформы технологий, например, для виртуальных машин Java существует версия Python под название Jython, что позволяет выполнять работу в интерпретаторе на любой системе с поддержкой Java. Python поддерживает динамическую типизацию, вследствие чего тип переменной определяется лишь во время исполнения. В Python имеются определенные встроенные типы (рисунок 1). Каждое значение является объектом, в том числе функции, модули, классы и методы. Добавление новых типов возможно посредству написания классов с поддержкой наследования и метапрограммирования. Изображение 1 – Стандартная иерархия типов в Python. Синтаксис языка является четким и последовательным, что упрощает чтение кода человеком. В терминологии с 2018 года в коде при передаче аргументов в функции используются parent (родитель) и child (ребенок). Набор операторов в Python состоит из: if (если) – условный оператор. Альтернативным блоком является else (иначе). При нескольких альтернативах используется elif; while (пока) и for (для) – операторы цикла. Для прерывания цикла и перехода к следующей итерации возможно использовать break (разрыв) и continue (продолжить); class (класс) – оператор определения класса; def (определить) – оператор определения функции, метода или генератора. Для возврата из функции или метода можно использовать оператор return (возврат), или yield (давать) в случае с генератором; try – except – else (пробовать – исключить – иначе) или try – finally (пробовать – заключение) – оператор обработки исключений; pass (пропустить) – оператор ничего не делает, применяется для пустых блоков кода. Блоки в Python выделяются при помощи табуляции, что приучает программистов к более чистому стилю написания кода и сокращает количество строк кода. Выражения являются полноправными операторами в Python. Синтаксис, состав, приоритет и ассоциативность операций являются стандартными для языков программирования. Имена могут начинаться с любой латинской буквы, или буквы любого алфавита Unicode начиная с Python 3, любого регистра или подчеркивания, после чего можно указывать и цифры, но нельзя использовать ключевые слова. Интерпретатор имеет доступ к трём пространствам имен: локальному, глобальному и встроенному. Механизм документирования pydoc позволяет вести документацию в начале каждого класса, функции и модуля по средству вставки строки документации – docstring. Для использования символов, не входящих в ASCII необходимо указывать кодировку исходного кода в начале модуля. Python обладает обширными возможностями и поддерживает – объектно-ориентированное программирование, обобщенное программирование, функциональное программирование, модули и пакеты, интроспекцию, обработку исключений, итераторы, генераторы, управление контекстом выполнения, декораторы, регулярные выражения. Также Python обладает богатой стандартной библиотекой с поддержкой многих сетевых протоколов и форматами Интернета, набор модулей для работы с операционной системой, модули для работы с текстовыми кодировками, регулярными выражениями, криптографическими протоколами, архивами, мультимедийными форматами, и другие. Помимо стандартной библиотеки существует огромное множество различных библиотек доступных к установке. Всё это делает Python стабильным, постоянно развивающимся и распространённым языком, применяющимся во многих компаниях по всему миру, его простота и лаконичность в сочетании с использование мощных разнообразных инструментов делает его невероятно удобным в качестве скриптового языка. Python можно использовать для расширения возможностей стандартных программ, при помощи различных библиотек Python может быть использован как удобный инструмент администрирования. Эти и многие другие преимущества делают Python прекрасным выбором языка написания приложений любой сложности, начиная от калькулятора и заканчивая сервисами типа Youtube, Facebook и Instagram. Глава 2. Разработка приложения Калькулятор при помощи Python Анализ существующих решений Существует огромное множество калькуляторов, написанных как профессиональными разработчиками, так и начинающими программистами для изучения того или иного языка программирования. Рассмотрим более подробно калькулятор, написанный профессиональными программистами из штата Канзас США под названием Moffsoft FreeCalc (Изображение 2). Изображение 2 – Окно Windows калькулятора «Moffsoft FreeCalc». При запуске приложение имеет стандартные элементы окна Windows, экранные кнопки закрыть, развернуть и свернуть в верхнем правом углу, строка заголовка содержит название приложения и иконку. Строка меню содержит кнопки File, Edit, View, Options, Help. File позволяет сохранить или распечатать результаты вычислений. Edit позволяет копировать и вставлять готовые выражения, а также сбросить размер окна приложения. View позволяет изменить внешний вид кнопок приложения. Options позволяет изменить цветовую схему, сделать приложение всегда поверх других окон. Help выводит помощь по работе в приложение, а также позволяет перейти на сайт разработчика. В рабочей области расположено поле ввода значений, ниже данного поля расположены кнопки для ввода значений выражений и выбора операторов, таких как сложение, вычитание, умножение, деление, возведение в квадрат, нахождения процента числа, при помощи мыши. В левом нижнем углу расположена строка состояния приложения. Размер окна калькулятора можно изменять при помощи перетягивания визуального индикатора в правом нижнем углу экрана. При вытягивании окна в ширину станет доступен лог выполненных действий (изображение 3). Изображение 3 – Лог действий в «Moffsoft FreeCalc». Также имеется возможность изменения цветовой схемы приложения (Изображение 4). Изображение 4 – Измененная цветовая схема «Moffsoft FreeCalc». Данный калькулятор предоставляет достаточной функционал для выполнения простейших математических вычислений, из минус – нет поддержки валют и конвертации. Рассмотрим другой калькулятор, разработанный компанией MicroInvention под названием CrossGL Surface Calculator (Изображение 5). Изображение 5 – Окно Windows калькулятора «CrossGL Surface Calculator». При запуске приложение выглядит как настольный калькулятор, отсутствуют какие-либо классические элементы окна Windows, при наведении курсора в правый нижний угол окна приложения, появляется интерактивный элемент (изображение 6), позволяющий изменить размер окна. Кнопки приложения для работы с функциями и вводом значений работают аналогично Moffsoft FreeCalc. Изображение 5 – Интерактивный элемент изменения размера окна приложения «CrossGL Surface Calculator». Данный калькулятор предоставляет базовый набор функций без возможности просмотра логов, отмены предыдущего действия, изменения элементов GUI. На основе выполненного анализа существующих аналогов приложений можно приступить к составлению требований к создаваемому приложению. Составление требований к приложению Каждое приложение должно соответствовать определенным требованиям, которые обоснованы задачами, выполняемыми приложением. Приложение калькулятор, в первую очередь, должно выполнять математические вычисления, такие как – сложение, вычитание, умножение и деление чисел. Также приложение должно иметь возможности ручного ввода чисел, вставки числе из буфера обмена в поле ввода значений и отчистки поля от значений. Приложение должно запускаться на компьютере без необходимости установки каких-либо сторонних программ. Графический интерфейс должен быть доступным для понимания пользователем и корректно отображать вычисления и кнопки. Должны присутствовать экранные кнопки для закрытия и сворачивания приложения. Приложение должно иметь свое имя и уникальную иконку. После составления требования можно приступать к написанию приложения. Шаги написания приложения Прежде чем приступить к написанию приложения, необходимо определить какая среда разработки, окружение и библиотеки будут использованы при написании приложения. Средой разработки является – PyCharm, окружением – Conda, также будут использоваться стандартная библиотека Python 3.7 вместе с tkinter и ttkthemes для работы с графическим интерфейсом. Первым шагом необходимо создать проект (изображение 6) который будет являться основой для работы в PyCharm. Изображение 6 – Окно создания проекта в PyCharm. После создания проекта в папке проекта необходимо создать файл с расширение .py в котором и будет записан весь код. В данном случае это будет файл calculator.py (Изображение 7). Изображение 7 – Создание файла с расширением .py. После создания файла приступим непосредственно к разработке, в первую очередь необходимо импортировать и настроить библиотеки tkinter и ttkthemes для создания “черновика” графического интерфейса приложения. Tkinter является встроенной библиотекой, для установки ttkthemes нужно использовать команду pip install ttkthemes в терминале Python Далее используя операторы from и import импортируем библиотеки в текущий проект (изображение 8). Изображение 8 – Код импорта библиотек. Затем задаем параметры для окна приложения используя библиотеку ThemedTk (изображение 9). Где root = окно приложения. Изображение 9 – Код задания параметров для окна приложения. После задаем параметры размера поля ввода и выведения результата вычислений, где e = поле ввода чисел (изображение 10). Изображение 10 – Код размера поля ввода и выведения результата вычислений. Далее используя оператор def и button_click делаем возможным выведение результата выражения в поле ввода (изображение 11) STR значений. Также здесь используются объекты e.delete и e.insert которые будут описаны далее. Изображение 11 – Код задания условия поля ввода и выведения результата вычислений. Далее используя def задаем кнопку очистки поля ввода (изображение 12). Изображение 12 – Код кнопки очистки поля. Далее используя оператор def и глобальные переменные f_num и math, задаем значения кнопок математических действий плюс, минус, умножить, разделить (изображение 13) Изображение 13 – Код кнопок плюс, минус, умножить, разделить. Далее используя оператор if и def задаем условия для выведения ответа на экран при нажатии кнопки равно (изображение 14). Изображение 14 – Код кнопки равно. Далее задаем для каждой кнопки текстовое значение и функцию кнопки которое в последствие будет использовано пользователя для идентификации каждой кнопки (изображение 15) Изображение 15 – Код задания кнопкам текстовых значений. Далее используя гридовую систему выводим кнопки на экран как графические элементы (изображение 16). Изображение 16 – Код вывода кнопок как графических элементов. Затем добавляем строку для создания петли выполнения кода, чтобы приложение автоматически не закрывалось (изображение 17). Изображение 17 – Код создание цикла работы приложения. После завершения написания кода необходимо сохранить файл .py, затем открыть терминал Python и ввести $ pip install auto-py-to-exe, что позволит установить конвертер из .py в формат .exe. После установки конвертера, используя терминал ввести python -m auto_py_to_exe, данная команда откроет окно Auto Py To Exe, выполнить настройку (изображение 18), по нажатию кнопки Convert to exe программа произведет конвертацию файла в формат .exe и откроет папку с данным файлом (изображение 19). Изображение 18 – Настройка Auto Py to Exe. Изображение 19 – Содержание папки с .exe файлом. При открытии файла приложение имеет вид, продемонстрированный на изображение 20. Данный файл может быть распространен отдельно и не требует каких-либо предустановленных приложений или интерпретаторов. Также в приложение 1 предоставлена ссылка на Github с полным кодом приложения и .exe файлом для запуска приложения. Изображение 20 – GUI приложения «Калькулятор “МОИ”» ЗАКЛЮЧЕНИЕ Рассмотрим результаты работы целью которой являлось углубление знаний и расширение навыков по разработке алгоритмов и их реализации на персональном компьютере на примере создание калькулятора на языке Python для выполнения простейших математических вычислений. В ходе выполнения работы была изучена теоретическая база языков программирования их история, виды, принципы работы, была подробно изучена парадигма объектно-ориентированного программирования, подробно изучен и применен язык программирования Python, изучены доступные аналоги приложения, которые послужили основой для составления требований к приложению, было успешно создано портативное приложение калькулятор и описаны шаги решения поставленных задач. СПИСОК ИСТОЧНИКОВ Гавриков М. М., Иванченко А. Н., Гринченков Д. В. Теоретические основы разработки и реализации языков программирования. — КноРус, 2013. — 178 с. Братчиков И. Л. Синтаксис языков программирования. — Наука, 1975. — 230 с. Теренс Пратт, Марвин Зелковиц. Языки программирования: разработка и реализация. — 4-е издание. — Питер, 2002. Тимоти Бадд. «Объектно-ориентированное программирование в действии», Издательский дом "Питер", 1997. — 464 с. Марк Лутц. Программирование на Python / Пер. с англ. — 4-е изд. — СПб.: Символ-Плюс, 2011. — Т. I. — 992 с. Иан Грэхем. Объектно-ориентированные методы. Принципы и практика — 3-е изд. — М.: «Вильямс», 2004. — 880 с. Richard P. Gabriel – Objects Have Failed, 2002 – http://dreamsongs.com/ObjectsHaveFailedNarrative.html Guy L. Steele Jr. – Objects Have Not Failed, 2002 – http://dreamsongs.com/ObjectsHaveNotFailedNarr.html Григорий Алексеев. «Введение в Python» – https://habr.com/ru/post/450474/ The Zen of Python – https://www.python.org/dev/peps/pep-0020/ Glossary of Python – https://docs.python.org/3/glossary.html The Python Standard Library – https://docs.python.org/3/library/index.html Installing Python Modules – https://docs.python.org/3/installing/index.html Python Module Index – https://docs.python.org/3/py-modindex.html Регулярно обновляемая диаграмма истории языков программирования – https://www.levenez.com/lang/ Приложение 1 Исходный код приложения Калькулятор from tkinter import * from tkinter import ttk from ttkthemes import ThemedTk root = ThemedTk(theme='yaru') # Выбор темы root.resizable(width=False, height=False) # Блокировка возможности изменения размера root.title('Калькулятор "МОИ"') # Названия приложения root.iconbitmap('C:/Users/petyhov/Desktop/CALCULATOR/calculator.ico') # Иконка приложения e = ttk.Entry(root, width=48,) # Поле ввода чисел e.grid(row=0, column=0, columnspan=4, padx=4, pady=4) e.focus_set() #Фокусировка в поле ввода чисел # Введение цифр в поле def button_click(number): current = e.get() e.delete(0, END) e.insert(0, str(current) + str(number)) # выводить STR значения чесел # Комманда для очистки поля def button_clear(): e.delete(0, END) # Кнопка плюс def button_plus(): first_number = e.get() global f_num global math math = "плюс" f_num = int(first_number) e.delete(0, END) # Кнопка минус def button_minus(): first_number = e.get() global f_num global math math = "минус" f_num = int(first_number) e.delete(0, END) # Кнопка умножить def button_multiply(): first_number = e.get() global f_num global math math = "умножить" f_num = int(first_number) e.delete(0, END) # Кнопка разделить def button_divide(): first_number = e.get() global f_num global math math = "делить" f_num = int(first_number) e.delete(0, END) # кнопка равно def button_equal(): second_number = e.get() e.delete(0, END) if math == 'плюс': e.insert(0, f_num + int(second_number)) if math == 'умножить': e.insert(0, f_num * int(second_number)) if math == 'делить': e.insert(0, f_num / int(second_number)) if math == 'минус': e.insert(0, f_num - int(second_number)) # Кнопки с цифрами button_1 = ttk.Button(root, text='1', command=lambda: button_click(1)) button_2 = ttk.Button(root, text='2', command=lambda: button_click(2)) button_3 = ttk.Button(root, text='3', command=lambda: button_click(3)) button_4 = ttk.Button(root, text='4', command=lambda: button_click(4)) button_5 = ttk.Button(root, text='5', command=lambda: button_click(5)) button_6 = ttk.Button(root, text='6', command=lambda: button_click(6)) button_7 = ttk.Button(root, text='7', command=lambda: button_click(7)) button_8 = ttk.Button(root, text='8', command=lambda: button_click(8)) button_9 = ttk.Button(root, text='9', command=lambda: button_click(9)) button_0 = ttk.Button(root, text='0', command=lambda: button_click(0)) # кнопки математических выражений button_plus = ttk.Button(root, text='+', command=button_plus) button_equal = ttk.Button(root, text='=', command=button_equal) button_multiply = ttk.Button(root, text='*', command=button_multiply) button_minus = ttk.Button(root, text='-', command=button_minus) button_divide = ttk.Button(root, text='/', command=button_divide) # Системные кнопки button_clear = ttk.Button(root, text='C', command=button_clear) # выведение кнопок на экран button_1.grid(row=3, column=0, ipady=10) button_2.grid(row=3, column=1, ipady=10) button_3.grid(row=3, column=2, ipady=10) button_4.grid(row=2, column=0, ipady=10) button_5.grid(row=2, column=1, ipady=10) button_6.grid(row=2, column=2, ipady=10) button_7.grid(row=1, column=0, ipady=10) button_8.grid(row=1, column=1, ipady=10) button_9.grid(row=1, column=2, ipady=10) button_0.grid(row=4, column=1, ipady=10) button_clear.grid(row=4, column=0, ipady=10) button_equal.grid(row=4, column=3, ipady=10) button_minus.grid(row=2, column=3, ipady=10) button_plus.grid(row=3, column=3, ipady=10) button_divide.grid(row=4, column=2, ipady=10) button_multiply.grid(row=1, column=3, ipady=10) root.mainloop() # Создание цикла приложения |