Помощь студентам дистанционного обучения: тесты, экзамены, сессия
Помощь с обучением
Оставляй заявку - сессия под ключ, тесты, практика, ВКР
Заявка на расчет

Высокоуровневые методы программирования

Автор статьи
Валерия
Валерия
Наши авторы
Эксперт по сдаче вступительных испытаний в ВУЗах
Введение 4 1 Анализ заданий курсовой работы 6 2 Разработка программного продукта для решения прикладных задач 9 2.1 Работа с наборами данных 9 2.1.1 Построение алгоритма решения 9 2.1.2 Разработка программной реализации 10 2.1.3 Тестирование и отладка 11 3.1 Разработка экспертной системы 12 3.1.1 Построение алгоритма решения 12 3.1.2 Разработка программной реализации 13 3.1.3 Тестирование и отладка 16 4.1 Разработка аналитической системы 18 4.1.1 Построение алгоритма решения 18 4.1.2 Разработка программной реализации 20 4.1.3 Тестирование и отладка 31 5.1 Разработка логико-аналитической системы 33 5.1.1 Построение алгоритма решения 33 5.1.2 Разработка программной реализации 34 5.1.3 Тестирование и отладка 39 Выводы 41 Список литературы 42

Аннотация

Курсовая работа: 44 с., 13 рис., 23 источника ВЫСОКОУРОВНЕВЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ, IDLE PYTHON, СТАНДАРТНАЯ БИБЛИОТЕКА, ГРАФИЧЕСКИЙ ИНТЕРФЕЙС, TKINTER Цель курсовой работы на тему «Высокоуровневые методы программирования» является изучение теоретических и практических основ построения и организации функционирования программных комплексов, их программного обеспечения и способов эффективного применения современных высокоуровневых методов программирования. Для достижения цели в работе были решены следующие задачи: – Получение теоретических и практических навыков решения прикладных информационных задач с использованием методик программирования высокого уровня. – Разработка программных продуктов (структурной и функциональной схем программного обеспечения, структур данных, алгоритмов и реализующих их программ, стратегии тестирования и тестовых данных и т.п.). К полученным результатам относятся разработанные в процессе выполнения работы программы на языке высокого уровня Python.

Введение

Языки программирования для компьютеров разрабатываются с целью прежде всего помочь большому количеству людей использовать компьютеры без необходимости детального изучения их внутренней структуры. Языки соответствуют типу приложений, которые должны быть запрограммированы с использованием языка. Идеальным языком был бы тот, который точно выражает спецификацию решаемой проблемы и преобразует ее в серию инструкций для компьютера. Невозможно достичь этого идеала, поскольку четкая спецификация проблемы часто недоступна, а разработка алгоритма исходя из спецификаций требует предметных знаний и опыта. На практике подробный алгоритм решения проблемы является отправной точкой и выражается в виде программы на языке программирования. Существует большое количество языков, более тысячи, каждый из которых обслуживает разные классы приложений. Почти все современные языки программирования разработаны так, чтобы быть независимыми от машины. Другими словами, структура языка программирования не будет зависеть от внутренней структуры определенного компьютера; нужно уметь исполнять программу, написанную на языке программирования, на любом компьютере, независимо от того, кто его изобрел или какой моделью он является. Такие языки известны как машинно-независимые языки программирования высокого уровня. Создание программ на языках программирования высокого уровня по-прежнему является актуальным. Программисты низкоуровневых языков зачастую пишут неэффективные программы, так как упускают из виду высокоуровневые оптимизации; в то же время разработка низкоуровневых программ сопряжена со сложностью, поскольку большинство людей не могут быстро читать машинный код (и соответственно вносить изменения). Конечно, здесь имеются исключения – это небольшие, критичные ко времени исполнения фрагменты программы (например, тело цикла, или отдельная функция), которые не могут быть идеально оптимизированы компилятором. Такие составные части программы иногда пишут в виде ассемблерных вставок. Цель курсовой работы на тему «Высокоуровневые методы программирования» является изучение теоретических и практических основ построения и организации функционирования программных комплексов, их программного обеспечения и способов эффективного применения современных высокоуровневых методов программирования. Для достижения цели в работе были решены следующие задачи: – Получение теоретических и практических навыков решения прикладных информационных задач с использованием методик программирования высокого уровня. – Разработка программных продуктов (структурной и функциональной схем программного обеспечения, структур данных, алгоритмов и реализующих их программ, стратегии тестирования и тестовых данных и т.п.). К полученным результатам относятся разработанные в процессе выполнения работы программы на языке высокого уровня Python. 1 Анализ заданий курсовой работы Версия языка программирования, используемого для решения заданий, – Python 3.6.7. Средство для разработки программ – стандартная интегрированная среда разработки IDLE Python, поставляемая вместе с интерпретатором языка. Используются стандартные библиотеки. Для решения задач 2 – 4 используется библиотека с графическим интерфейсом. Для реализации графического интерфейса была выбрана библиотека Tk. Tkinter – это пакет для Python, предназначенный для работы с библиотекой Tk. Библиотека Tk содержит компоненты графического интерфейса пользователя, написанные на языке программирования Tcl. Под графическим интерфейсом пользователя (GUI) подразумеваются все те окна, кнопки, текстовые поля для ввода, скроллеры, списки, радиокнопки, флажки и др., которые можно увидеть на экране, открывая то или иное приложение. Через них происходит взаимодействие с программой и управление ей. Все эти элементы интерфейса называются виджетами (widgets). Модуль tkinter включает следующие классы: 1. Button (кнопка); 2. Radiobutton (радиокнопка); 3. Checkbutton (флажок); 4. Entry (однострочное поле для ввода); 5. Text (многострочное поле для ввода); 6. Label (метка); 7. Scale (ползунок); 8. Scrollbar (полоса прокрутки); 9. Frame (виджет для группировки других виджетов); 10. LabelFrame (аналог Frame, только с заголовком); 11. Listbox (список); 12. Canvas (поле для рисования); 13. PanedWindow (элемент разделения окна); 14. Menu (главное меню); 15. Tk (главное единственное окно); 16. Toplevel (дочернее окно). Существует множество библиотек GUI. Tk далеко не самая популярная, хотя с ее использованием написано немало проектов. Поскольку данная библиотека является одним из самых простых и удобных решений для начинающих, для реализации графического пользовательского интерфейса в данной работе используется именно она. Графический интерфейс разработанных программ включает единственное окно с расположенными на нем виджетами. Задание 1. Для решения задачи необходимо выполнить чтение текстового файла с разбиением каждой строки на слова и занесением слов в список. После этого потребуется создать словарь частотности из полученного списка. Для этого понадобится использовать тип данных Counter, выполняющий подсчет числа объектов в переданной структуре данных, и формирующий словарь пар «слово, число вхождений». Этот тип данных подключается при помощи модуля collections. При помощи сортировки можно сравнивать пары по второму значению, а в случае равенства – по первому. Запись пар вида «слово число вхождений» осуществляется в выходной файл при помощи стандартных операций. Для удаления знаков препинания из слов в тексте необходимо использовать модуль re, позволяющий задать регулярное выражение. Задание 2. Для решения задачи необходимо использовать пару простых функций. Первая из них будет обработчиком события нажатия на кнопку «Calculate» (обработка команд, поступающих от пользователя, считываемых из текстового поля), вторая – нажатия на кнопку «Clear» (очистка текстового поля для ввода команд пользователем). Возможности математического модуля math позволяют выполнять элементарные арифметические действия. В основной программе выполняется создание графического пользовательского интерфейса при помощи методов библиотеки tkinter. Задание 3. Необходимо спроектировать пару классов для реализации работы калькулятора в обычном и расширенном режиме. Классы отличаются друг от друга набором функций. Для реализации арифметических действий используется модуль math. Визуальная часть приложения может быть реализована при помощи методов модуля tkinter. Задание 4. Пользователь должен иметь возможность собрать все диски в одну стопку, соблюдая установленные правила, а также в любой момент просматривать некоторый процент от выполненных им ходов. Визуальная часть приложения может быть реализована при помощи методов модуля tkinter.

2 Разработка программного продукта для решения прикладных задач

2.1 Работа с наборами данных 2.1.1 Построение алгоритма решения

Блок-схема алгоритма программы представлена на рисунке 1. Рисунок 1 – Блок-схема алгоритма для решения задания 1

2.1.2 Разработка программной реализации

Полный исходный код программы приведен в листинге 1. Листинг 1. Полный исходный код программы для задания 1 from collections import Counter import re # Создать пустой список слов words = [] # Открыть на чтение файл ‘resourse_1.txt’ with open(‘resourse_1.txt’, ‘r’, encoding=’utf-8′) as f: # Для каждой строки line в файле выполнить: for line in f: # Разбить строку на лексемы (разделитель — пробел) a = line.split() # Для каждой лексемы (слово и знаки препинания): for s in a: # Удалить знаки препинания при помощи регулярного выражения s = re.sub(r'[^\w\s]’, lambda m: ‘-‘ if m.group(0) == ‘-‘ else », s, flags=re.U) # Если полученный строка не является пробельным символом, if s != ‘ ‘: # то добавить ее в список слов words.append(s) # Удалить пустые слова из списка words[:] = [s for s in words if s] # Создать словарь частотности из списка слов d = dict(Counter(words)) # Создать пустой список пар (слово, частота) словаря pairs = [] # Записать пары из словаря в порядке (частота, слово) for k, v in d.items(): pairs.append((v, k,)) # Отсортировать список по убыванию частоты (возрастанию отрицательных значений) # и «возрастанию» слов (лексикографический порядок, т.е. алфавитный) pairs.sort(key=lambda x: (-x[0], x[1])) # Открыть на запись файл ‘result_1.txt’ и записать полученные пары в файл with open(‘result_1.txt’, ‘w’) as f: for s in pairs: print(s[1] + ‘ ‘ + str(s[0]), file=f)

2.1.3 Тестирование и отладка

При запуске программы ничего не выводится в консоль. На вход подается файл «resourse_1.txt», который должен быть расположен в одном каталоге с *.py-файлом программы. Вид входного файла приведен на рисунке 2. Рисунок 2 – Вид входного файла для задания 1 Результат работы программы сохраняется в выходном файле «result_1.txt», вид которого приведен на рисунке 3. Как следует из результатов работы, программа работает корректно. Рисунок 3 – Вид выходного файла для задания 1

3.1 Разработка экспертной системы

3.1.1 Построение алгоритма решения

Блок-схема алгоритма программы представлена на рисунке 4. Рисунок 4 – Блок-схема алгоритма для решения задания 2

3.1.2 Разработка программной реализации

Полный исходный код программы приведен в листинге 2. Листинг 2. Полный исходный код программы для задания 2 from tkinter import * from tkinter import messagebox from tkinter import ttk import math import sys »’ Функция для выполнения указанных действий »’ def calculate(): # Получение данных из текстового поля user_input = text.get(1.0, END).split(‘\n’) # Обработка каждой строки входных данных: for textline in user_input: # Если команда ‘DEPOSIT’, то if ‘DEPOSIT’ in textline: # Получить параметры для этой команды textline = textline.replace(‘DEPOSIT ‘, ») params = textline.split(‘ ‘) try: # Добавить на счет клиента сумму — целое число bank_clients[params[0]] += int(params[1]) except Exception: # Если клиента нет в списке клиентов, создать нового клиента с указанной суммой bank_clients[params[0]] = int(params[1]) # Записать результат выполнения операции в результирующее текстовое поле outputTB.insert(1.0, ‘Сумма в размере ‘ + params[1] + ‘ зачислена на счёт ‘ + params[0] + ‘. Баланс: ‘ + str(bank_clients.get(params[0])) + ‘\n’) # Если команда ‘WITHDRAW’, то elif ‘WITHDRAW’ in textline: # Получить параметры для этой команды textline = textline.replace(‘WITHDRAW ‘, ») params = textline.split(‘ ‘) try: # Снять со счета клиента сумму — целое число bank_clients[params[0]] = bank_clients.get(params[0]) — int(params[1]) except Exception: # Если клиента нет в списке клиентов, то указанная сумма — отрицательная на его счету bank_clients[params[0]] = -int(params[1]) # Записать результат выполнения операции в результирующее текстовое поле outputTB.insert(1.0, ‘Сумма в размере ‘ + params[1] + ‘ снята со счёта ‘ + params[0] + ‘. Баланс: ‘ + str(bank_clients.get(params[0])) + ‘\n’) # Если команда ‘BALANCE’, то elif ‘BALANCE’ in textline: textline = textline.replace(‘BALANCE’, ») # Если строка с параметрами не пуста, то if textline: # Получить параметры для этой команды (имя клиента) textline = textline[1:] # Если в списке клиентов есть клиент с таким именем, то if bank_clients.get(textline): # Записать в результирующее текстовое поле остаток на счету этого клиента outputTB.insert(1.0, ‘Остаток на счету клиента ‘ + textline + ‘: ‘ + str(bank_clients.get(textline)) + ‘\n’) else: # Иначе вывести «NO CLIENT» outputTB.insert(1.0, ‘NO CLIENT\n’) else: # Иначе (строка пуста — имя клиента не указано) for i, j in bank_clients.items(): # Вывести в результирующее текстовое поле остатки на счету всех клиентов outputTB.insert(1.0, ‘Остаток на счету клиента ‘ + i + ‘: ‘ + str(j) + ‘\n’) # Если команда ‘TRANSFER’, то elif ‘TRANSFER’ in textline: # Получить параметры для этой команды textline = textline.replace(‘TRANSFER ‘, ») params = textline.split(‘ ‘) try: # Снять со счета указанного клиента name1 указанную сумму bank_clients[params[0]] = bank_clients.get(params[0]) — int(params[2]) except Exception: # Если клиента name1 нет в системе, то добавляется и ему создается отрицательный счет на указанную сумму bank_clients[params[0]] = -int(params[2]) try: # Добавить на счет указанного клиента name2 ту же сумму bank_clients[params[1]] += int(params[2]) except Exception: # Если клиента name2 нет в системе, то он добавляется и ему создается счет на указанную сумму bank_clients[params[1]] = int(params[2]) # Записать результат выполнения операции в результирующее текстовое поле outputTB.insert(1.0, ‘Операция выполнена. Сумма в размере ‘ + params[2] + ‘ снята со счёта ‘ + params[0] + ‘ и переведена на счёт ‘ + params[1] + ‘. Баланс счёта ‘ + params[0] + ‘: ‘ + str( bank_clients.get(params[0])) + ‘. Баланс счёта ‘ + params[1] + ‘: ‘ + str( bank_clients.get(params[1])) + ‘\n’) # Если команда ‘INCOME’, то elif ‘INCOME’ in textline: # Получить параметры для этой команды textline = textline.replace(‘INCOME ‘, ») textline = textline.replace(‘%’, ») # Для всех клиентов и их сумм на счету в списке клиентов банка выполнить: for i, j in bank_clients.items(): # Если остаток на счету положительный, то if j > 0: # Найти p% от суммы счета, отбросив дробную часть p = round(j / 100 * int(textline)) # Добавить к остатку j = j + p # Присвоить новое значение счету клиента bank_clients[i] = j # Записать результат выполнения операции в результирующее текстовое поле outputTB.insert(1.0, ‘Операция по начислению ‘ + str(int(textline)) + ‘% на счет выполнена. Остаток клиента ‘ + i + ‘: ‘ + str(j) + ‘\n’) else: # Иначе (остаток отрицательный) сообщить о невозможности начисления процента outputTB.insert(1.0, ‘Остаток на счету клиента ‘ + i + ‘ меньше нуля! Баланс: ‘ + str(j) + ‘\n’) »’Функция очистки полей для ввода»’ def delete_text(): text.delete(1.0, END) outputTB.delete(1.0, END) »’ Создание графического интерфейса программы »’ # Создать главное окно приложения root = Tk() root.title(‘Банк’) # Создать рамку (фрейм) frame = Frame() frame.pack() # Создать текстовое поле для ввода пользователя (слева) text = Text(width=70, height=7) text.pack(side=LEFT) # Создать скроллбокс для полосы прокрутки окна и связать его с текстовым полем scrollBox = Scrollbar(command=text.yview) scrollBox.pack(side=LEFT, fill=Y) text.config(yscrollcommand=scrollBox.set) # Создать кнопки Calculate и Clear Button(frame, text=’Calculate’, command=calculate).pack(side=LEFT) Button(frame, text=’Clear’, command=delete_text).pack(side=LEFT) # Создать результирующее текстовое поле для вывода (справа) outputTB = Text(width=80, height=8) outputTB.pack() # Словарь клиентов банка bank_clients = { ‘Lebedeva’: 70160258 } # Запуск программы root.mainloop()

3.1.3 Тестирование и отладка

Для тестирования работы приложения используется контрольный пример. В окно ввода слева вводится следующий набор команд: DEPOSIT Lebedeva 2000000 WITHDRAW Lebedeva 5000000 BALANCE Lebedeva TRANSFER Lebedeva Ivanova 3000000 INCOME 15 Результат выполнения программы – после ввода набора команд и нажатия на кнопку «Calculate» – приведен на рисунке 5. Рисунок 5 – Результат работы программы для задания 2 Как следует из полученных результатов работы, программа работает корректно.

4.1 Разработка аналитической системы

4.1.1 Построение алгоритма решения

Блок-схема укрупненного алгоритма программы представлена на рисунке 6. Рисунок 6 – Блок-схема укрупненного алгоритма для решения задания 3 Функции расширенного режима работы калькулятора добавляются при нажатии на кнопку перехода в расширенный режим. Расширенный режим работы отличается от обычного видом дисплея калькулятора, количеством ячеек памяти (кнопки M+, M-, MS, MR, MS) и кнопками, отвечающими за дополнительные функции. Количество строк дисплея калькулятора определяется как последовательная сумма всех цифр ID (70160258) и равно 2. Суммирование отдельных цифр числа осуществляется до получения однозначного числа, состоящего из единственной цифры. Данный процесс также реализован с помощью специальной функции. Количество ячеек памяти калькулятора определяется как последовательная сумма последних трех цифр ID (70160258) и равно 6. Суммирование отдельных цифр числа осуществляется до получения однозначного числа, состоящего из единственной цифры. Данный процесс также реализован с помощью функции. Дополнительные функции расширенного режима – возведение в куб, синус и косинус, а также обратные к ним – кубический корень, арксинус и арккосинус. При помощи клавиатуры и мыши вводятся числа и выполняются арифметические операции, функции стандартного режима, а также дополнительные функции. При вводе недопустимых операций пользователем на дисплее калькулятора отображаются соответствующие входным данным сообщения об ошибке. Для некорректного ввода интерпретатор прерывает выполнение действий, но возможен также повторный ввод, поскольку такого рода ошибки не зависят от программной реализации вычисления заданных операций. При корректном и допустимом вводе результат будет отображен на дисплее калькулятора.

4.1.2 Разработка программной реализации

Полный исходный код программы приведен в листинге 3. Листинг 3. Полный исходный код программы для задания 3 from tkinter import * from math import * »’ Описание класса калькулятора, работающего в расширенном режиме »’ class ComplexMode: »’ Конструктор класса »’ def __init__(self, parent): self.root = Toplevel(parent) self.root[‘bg’] = ‘black’ self.root.geometry(‘1000×850’) self.root.title(‘Калькулятор — расширенный режим’) self.root.resizable(False, False) self.draw_calculator() »’ Метод отрисовки калькулятора »’ def draw_calculator(self): self.result_frame = Frame(self.root, bg=’white’,borderwidth=3, relief=’groove’) self.button_frame = Frame(self.root, bg=’#E5E5E5′) self.add_button_frame = Frame(self.root, bg=’#E5E5E5′) self.ID = ‘70160258’ self.rows_dspl = [] self.strvalue = ‘0’ # Записанное значение self.rows_count = 2 # Число строк. Найдено по формуле: 7 + 0 + 1 + 6 + 0 + 2 + 5 + 8 = 29; 2 + 9 = 11; 1 + 1 = 2 self.mem_count = 6 # Число ячеек памяти. Найдено по формуле: 2 + 5 + 8 = 15; 1 + 5 = 6 self.result_frame.place(relx=0, rely=0, relwidth=0.5, relheight=0.49) self.button_frame.place(relx=0, rely=0.49, relwidth=0.5, relheight=0.51) self.add_button_frame.place(relx=0.5, rely=0, relwidth=0.5, relheight=0.48) self.build_add_button_frame(self.add_button_frame,False) self.build_calc_btn(self.button_frame) self.build_memory_frame() »’ Метод расчета числа ячеек памяти и строк в калькуляторе »’ def calculate_rows_memory_cells(self, a, memory): if len(a) == 1: return a else: result_sum = 0 if memory: if len(a) >= 3: for cell in a[-3:]: result_sum += int(cell) if result_sum == 10: return 10 else: return self.calculate_rows_memory_cells(str(result_sum),True) else: for cell in a: result_sum += int(cell) return self.calculate_rows_memory_cells(str(result_sum), True) else: for cell in a: result_sum += int(cell) if result_sum == 10: return 10 else: return self.calculate_rows_memory_cells(str(result_sum), False) »’ Метод обновления ячеек памяти калькулятора »’ def update_memory_cells(self): self.currentID = self.input_ID.get() self.rows_count = self.calculate_rows_memory_cells(self.currentID,False) self.mem_count = self.calculate_rows_memory_cells(self.currentID, True) print(self.rows_count) self.build_memory_frame() »’ Метод обновления дополнительных кнопок (синус, косинус, возведение в куб) »’ def update_add_buttons(self,add): self.build_add_button_frame(self.add_button_frame, add) »’ Метод обновления строк »’ def update_rows(self,frame): x= 6 y = 10 if len(self.rows_dspl) > int(self.rows_count): while len(self.rows_dspl) > int(self.rows_count): self.rows_dspl.pop(0) for cell in self.rows_dspl: if cell == ‘C’: Label(frame, text=cell, font=(‘Times New Roman’, 20, ‘bold’), bg=’white’, foreground=’red’, anchor=NE).place(x=x, y=y,relwidth=0.9,relheight=0.1) else: Label(frame, text=cell, font=(‘Times New Roman’, 20, ‘bold’), bg=’white’,anchor=NE ).place(x=x, y=y, relwidth=0.9,relheight=0.1) y = y + 30 if len(self.strvalue) !=0: operationArr = [‘/’, ‘*’, ‘-‘, ‘+’, ‘**’] if self.strvalue[0] in operationArr: if len(self.rows_dspl) !=0: self.strvalue = self.rows_dspl[-2] + self.strvalue else: self.strvalue = ‘0’ + self.strvalue self.result_label = Label(frame, text=self.strvalue, font=(‘Times New Roman’, 20, ‘bold’),anchor=NE, bg=’white’) self.result_label.place(x=6, y=y,relwidth=0.9,relheight=0.1) »’ Метод для подсчета результата »’ def calculate_result(self): self.rows_dspl.append(self.strvalue) self.rows_dspl.append(‘=’) try: self.strvalue = str(eval(self.strvalue)) except ZeroDivisionError: self.strvalue = ‘Нельзя выполнить!’ self.rows_dspl.append(self.strvalue) self.rows_dspl.append(‘C’) self.strvalue = » self.update_rows(self.result_frame) »’ Метод для отрисовки кнопок калькулятора »’ def build_calc_btn(self, mybutton): command = lambda x=’C’, y=False: self.button_click(x,y) update_rows = lambda x=self.result_frame: self.update_rows(x) Button(mybutton, text=’≡’, font=(‘Times New Roman’, 30, ‘bold’), bg=’#F40000′, foreground=’#FFFFFF’, command=update_rows).place(x=12.5, y=20.5, width=85, height=50) Button(mybutton, text='< >’, font=(‘Times New Roman’, 30, ‘bold’), bg=’#F40000′, foreground=’#FFFFFF’, command=self.update_memory_cells).place(x=110,y=20.5,width=85,height=50) Button(mybutton, text=’C’, font=(‘Times New Roman’, 18, ‘bold’), bg=’#F40000′, foreground=’#FFFFFF’, command=command).place(x=402.5, y=20.5, width=85, height=50) mybuttons = [ ‘%’, ‘←’, ‘1/x’, ‘x²’,’CE’, ‘7’, ‘8’, ‘9’, ‘/’, ‘x^y’, ‘4’, ‘5’, ‘6’, ‘*’, ‘√’, ‘1’, ‘2’, ‘3’, ‘-‘, ‘+/-‘, ‘0’, ‘.’, ‘+’, ‘=’, ] x = 12.5 wd = 85 hg = 50 y = 85 for onebutton in mybuttons: bg = ‘#F6F6F6’ fg = ‘#004996’ z = 0 command = lambda x=onebutton, y=False: self.button_click(x,y) if x == 305 or x == 402.5: bg = ‘#636363’ fg = ‘#FFFFFF’ if y == 85: bg = ‘#034D97’ fg = ‘#FFFFFF’ if onebutton == ‘0’: Button(mybutton,text=onebutton, bg=bg,font=(‘Times New Roman’, 18, ‘bold’), foreground=fg,command=command).place(x=x, y=y,width=182.5,height=hg) z = 97.5 elif onebutton == ‘=’: Button(mybutton,text=onebutton, bg=’#034D97′,font=(‘Times New Roman’, 18, ‘bold’), foreground=fg,command=self.calculate_result).place(x=x, y=y,width=wd,height=hg) elif onebutton == ‘√’ or onebutton == ‘←’: Button(mybutton,text=onebutton, bg=bg,font=(‘Times New Roman’, 25, ‘bold’), foreground=fg,command=command).place(x=x, y=y,width=wd,height=hg) elif onebutton == ‘CE’: Button(mybutton,text=onebutton, bg=’#F40000′,font=(‘Times New Roman’, 18, ‘bold’), foreground=fg,command=command).place(x=x, y=y,width=wd,height=hg) elif onebutton == ‘x^y’: Button(mybutton, text=onebutton, bg=bg, font=(‘Times New Roman’, 18, ‘bold’), foreground=fg, command=command).place(x=x, y=y, width=wd, height=hg) else: Button(mybutton,text=onebutton, bg=bg,font=(‘Times New Roman’, 18, ‘bold’), foreground=fg,command=command).place(x=x, y=y,width=wd,height=hg) n = x + 1 x = x + wd + 12.5 + z if n > 402.5: x = 12.5 y = y + 50 + 12.5 »’ Метод обращения к ячейкам памяти »’ def calculate_memory(self,op,count): for cell in range(len(self.memory)): for i in range(len(self.memory[cell])): if self.memory[cell][i] == count: self.button_click(op,self.memory[cell]) »’ Метод для отрисовки кнопок ячейки памяти »’ def build_memory_frame(self): self.memory_btn_frame = Frame(self.root, bg=’#E5E5E5′, borderwidth=2, relief=’solid’,highlightbackground=’blue’, highlightcolor=’blue’) self.memory_btn_frame.place(relx=0.5, rely=0.48, relwidth=0.5, relheight=0.58) Label(self.memory_btn_frame, text=’управление ячейками памяти’, font=(‘Times New Roman’,18), bg=’#E5E5E5′,foreground=’#3846CE’).place(x=83, y=5) btns = [‘MC’, ‘MR’, ‘MS’, ‘M+’, ‘M-‘] self.memory = [] mybuttons = [] buttons_cnt = int(self.mem_count) c = 0 while buttons_cnt != 0: c += 1 memory_count = [c,’0’] self.memory.append(memory_count) buttons_cnt -= 1 for b in btns: mybuttons.append(b) x = 15 wd = 70 hg = 30 y = 45 count = 0 bg = ‘#636363’ fg = ‘#FFFFFF’ for onebutton in mybuttons: command = lambda x=onebutton, y=count + 1 : self.calculate_memory(x,y) Button(self.memory_btn_frame,text=onebutton, bg=bg,font=(‘Times New Roman’, 18, ‘bold’), foreground=fg, command=command).place(x=x+10, y=y,width=wd,height=hg) if onebutton == ‘M-‘: count = count + 1 Label(self.memory_btn_frame, text=count, font=(‘Times New Roman’,20), bg=’#E5E5E5′,foreground=’#3846CE’).place(x=x+wd+30, y=y-2) x = x + wd + 10 n = x + 1 if n > 371: x = 15 y = y + 45 — 5 »’ Метод отрисовки кнопок доп. режима (косинус и синус, возведение в куб, фамилия и ID) »’ def build_add_button_frame(self, frame, add): Label(frame, text=’Lebedeva’, font=(‘Times New Roman’, 25, ‘bold’), bg=’#E5E5E5′,foreground=’#7F7F7F’).place(x=15, y=15) Label(frame, text=’ID’, font=(‘Times New Roman’, 25, ‘bold’), bg=’#E5E5E5′,foreground=’#7F7F7F’).place(x=15, y=75) self.input_ID = Entry(frame,font=(‘Times New Roman’, 25,’bold’)) self.input_ID.place(x=80, y=75,relwidth=0.6, relheight=0.12) self.input_ID.insert(0, self.ID) if add: mybuttons = [ ‘ADD’, ‘asin’, ‘acos’, ‘∛’ ] update_add_buttons = lambda x=False: self.update_add_buttons(x) else: mybuttons = [ ‘ADD’,’sin’,’cos’,’x³’ ] update_add_buttons = lambda x=True: self.update_add_buttons(x) x = 15 y = 140 wd = 90 hg = 50 for onebutton in mybuttons: command = lambda x=onebutton, y=False: self.button_click(x, y) if onebutton == ‘ADD’: Button(frame, text=onebutton, bg=’#9D9D9D’, font=(‘Times New Roman’, 18, ‘bold’), foreground=’#FFFFFF’, command=update_add_buttons).place( x=x, y=y, width=wd, height=hg) else: Button(frame, text=onebutton, bg=’#9D9D9D’, font=(‘Times New Roman’, 18, ‘bold’), foreground=’#FFFFFF’,command=command).place( x=x, y=y, width=wd, height=hg) x = x + wd + 12.5 »’ Обработчик нажатия кнопки »’ def button_click(self, op,memory): if self.strvalue == ‘Нельзя выполнить’ or op == ‘C’: self.strvalue = ‘0’ elif op == ‘x^y’: self.strvalue = self.strvalue + ‘**’ elif op == ‘1/x’: if self.strvalue == » or self.strvalue == ‘0’: self.strvalue = ‘1/’ else: self.strvalue = self.strvalue + ‘*1/’ elif op == ‘sin’: self.strvalue = op +'(‘ + self.strvalue + ‘)’ elif op == ‘CE’: self.rows_dspl = [»,»,»,»,»,»,»,»,»,»] self.update_rows(self.result_frame) self.rows_dspl = [] elif op == ‘cos’: self.strvalue = op +'(‘ + self.strvalue + ‘)’ elif op == ‘x³’: self.strvalue = str((eval(self.strvalue)) ** 3) elif op == ‘asin’: self.strvalue = op + ‘(‘ + self.strvalue + ‘)’ elif op == ‘acos’: self.strvalue = op + ‘(‘ + self.strvalue + ‘)’ elif op == ‘∛’: self.strvalue = str((eval(self.strvalue)) * (1. / 3.)) elif op == ‘x²’: self.strvalue = str((eval(self.strvalue)) ** 2) elif op == ‘%’: self.strvalue = str((eval(self.strvalue))/100) elif op == ‘←’: self.strvalue = self.strvalue[0:-1] elif op == ‘√’: if eval(self.strvalue) >= 0: self.strvalue = str((eval(self.strvalue)) ** (1 / 2)) else: self.strvalue = ‘Нельзя выполнить’ elif op == ‘MS’: for cell in range(len(self.memory)): if self.memory[cell] == memory: self.memory[cell][1] = self.strvalue elif op == ‘MR’: for cell in range(len(self.memory)): if self.memory[cell] == memory: self.strvalue = self.memory[cell][1] elif op == ‘MC’: for cell in range(len(self.memory)): if self.memory[cell] == memory: self.memory[cell][1] = ‘0’ elif op == ‘M-‘: for cell in range(len(self.memory)): if self.memory[cell] == memory: self.memory[cell][1] = str(self.memory[cell][1]) + ‘-‘ + str(self.strvalue) self.memory[cell][1] = str(eval(self.memory[cell][1])) elif op == ‘M+’: for cell in range(len(self.memory)): if self.memory[cell] == memory: self.memory[cell][1] = str(self.memory[cell][1]) + ‘+’ + str(self.strvalue) self.memory[cell][1] = str(eval(self.memory[cell][1])) elif op == ‘+/-‘: if self.strvalue[0] == ‘(‘: self.strvalue = self.strvalue[2:-1] self.strvalue = self.strvalue else: self.strvalue = ‘(-‘ + self.strvalue + ‘)’ else: if self.strvalue == ‘0’: self.strvalue = » self.strvalue += op self.update_rows(self.result_frame) self.update_strvalue() »’ Метод для обновления поля с расчетом значения »’ def update_strvalue(self): if self.strvalue == »: self.strvalue = ‘0’ self.result_label.configure(text=self.strvalue) »’ Описание класса калькулятора, работающего в обычном режиме »’ class StandardMode(Frame): »’ Конструктор класса »’ def __init__(self, root): super(StandardMode, self).__init__(root) self.draw_calculator() »’ Метод отрисовки калькулятора »’ def draw_calculator(self): self.frame = Frame(root, bg=’white’, borderwidth=2, relief=’groove’) self.frame.place(x=12.5, y=12.5, width=475, height=100) self.strvalue = ‘0’ self.result_label = Label(self.frame, text=self.strvalue, font=(‘Times New Roman’, 31, ‘bold’), bg=’white’, anchor=NE) self.result_label.place(x=6, y=30,relwidth=0.95, relheight=0.5) mybuttons = [ ‘MC’, ‘MR’, ‘MS’, ‘M+’, ‘M-‘, ‘7’, ‘8’, ‘9’, ‘/’, ‘x^y’, ‘4’, ‘5’, ‘6’, ‘*’, ‘√’, ‘1’, ‘2’, ‘3’, ‘-‘, ‘+/-‘, ‘0’, ‘.’, ‘+’, ‘=’, ] command = lambda x=’C’: self.button_click(x) to_complex_mode = lambda x=root: self.to_complex_mode(x) self.memory = 0 Button(text=’≡’, font=(‘Times New Roman’, 30, ‘bold’), bg=’#F40000′, foreground=’#FFFFFF’,command=to_complex_mode).place(x=12.5, y=125, width=85, height=50) Button(text=’C’, font=(‘Times New Roman’, 18, ‘bold’), bg=’#F40000′, foreground=’#FFFFFF’,command=command).place(x=402.5, y=125, width=85, height=50) x = 12.5 wd = 85 hg = 50 y = 187.5 for onebutton in mybuttons: bg = ‘#F6F6F6’ fg = ‘#004996’ z = 0 command = lambda x=onebutton: self.button_click(x) if y == 187.5 or x == 305 or x == 402.5: bg = ‘#636363’ fg = ‘#FFFFFF’ if onebutton == ‘0’: Button(text=onebutton, bg=bg, font=(‘Times New Roman’, 18, ‘bold’), foreground=fg, command=command).place(x=x, y=y, width=182.5, height=hg) z = 97.5 elif onebutton == ‘=’: Button(text=onebutton, bg=’#034D97′, font=(‘Times New Roman’, 18, ‘bold’), foreground=fg, command=command).place(x=x, y=y, width=wd, height=hg) elif onebutton == ‘√’: Button(text=onebutton, bg=bg, font=(‘Times New Roman’, 25, ‘bold’), foreground=fg, command=command).place(x=x, y=y, width=wd, height=hg) z = 97.5 else: Button(text=onebutton, bg=bg, font=(‘Times New Roman’, 18, ‘bold’), foreground=fg, command=command).place(x=x, y=y, width=wd, height=hg) n = x + 1 x = x + wd + 12.5 + z if n > 402.5: x = 12.5 y = y + 50 + x »’ Обработчик нажатия кнопки »’ def button_click(self, op): if self.strvalue == ‘Нельзя выполнить!’: self.strvalue = ‘0’ if op == ‘C’: self.strvalue = » elif op == ‘x^y’: self.strvalue = self.strvalue + ‘**’ elif op == ‘√’: if eval(self.strvalue) >= 0: self.strvalue = str((eval(self.strvalue))**(1/2)) else: self.strvalue = ‘Нельзя выполнить!’ elif op == ‘=’: try: self.strvalue = str(eval(self.strvalue)) except ZeroDivisionError: self.strvalue = ‘Нельзя выполнить!’ elif op == ‘MS’: self.memory = self.strvalue elif op == ‘MR’: self.strvalue = self.memory elif op == ‘MC’: self.memory = 0 elif op == ‘M-‘: self.memory = str(self.memory) + ‘-‘ + str(self.strvalue) self.memory = str(eval(self.memory)) elif op == ‘M+’: self.memory = str(self.memory) + ‘+’ + str(self.strvalue) self.memory = str(eval(self.memory)) elif op == ‘+/-‘: if self.strvalue[0] == ‘(‘: self.strvalue = self.strvalue[2:-1] self.strvalue = self.strvalue else: self.strvalue = ‘(-‘+ self.strvalue + ‘)’ else: if self.strvalue == ‘0’: self.strvalue = » self.strvalue += op self.update_strvalue() »’ Метод для обновления поля расчета значения »’ def update_strvalue(self): if self.strvalue == »: self.strvalue = ‘0’ self.result_label.configure(text=self.strvalue) »’ Метод для перехода в инженерный режим »’ def to_complex_mode(self,root): ComplexMode(root) # Главная функция — создание окна if __name__ == ‘__main__’: # Создать окно калькулятора в стандартном режиме root = Tk() root[‘bg’] = ‘#E5E5E5’ root.geometry(‘500×500’) root.title(‘Калькулятор — обычный режим’) # Установить невозможность изменения размеров формы root.resizable(False, False) # Создать окно калькулятора в расширенном режиме root2 = StandardMode(root) root2.pack() # Запустить первое окно root.mainloop()

4.1.3 Тестирование и отладка

Вид окна программы после запуска приведен на рисунке 7. Рисунок 7 – Вид окна программы для задания 3 после запуска Тестирование на контрольном примере для проверки работы приложения в расширенном режиме приведен на рисунках 8 и 9. Как следует из результатов тестирования, программа работает корректно. Рисунок 8 – Вид окна программы для задания 3 после ввода значений Рисунок 9 – Вид окна программы для задания 3 после вычисления

5.1 Разработка логико-аналитической системы

5.1.1 Построение алгоритма решения

Основной алгоритм сводится к созданию графического интерфейса и проектированию класса с набором методов, реализующих процесс построения Ханойской башни. При запуске приложения собирается необходимое число дисков на каждый из столбов по заданному значению ID. В качестве основных структур данных используются два массива: towers_hanoi для хранения текущей раскладки дисков на столбах, и hist – история ходов пользователя. Кнопки «влево» и «вправо» под столбами позволяют переместить диск из одного столба в соседний, если его размер не превышает размер диска в соседнем столбе. Это действие сохранится в истории, доступной пользователю. Игровое поле обновляется после каждого такого действия. Для реализации программы необходим набор следующих подпрограмм: 1. pop_disk принимает на вход номер столба, удаляет с него последний диск и возвращает номер. 2. push_disk добавляет в соответствующий номеру столб новый диск с заданным диаметром. 3. rearrange_disk принимает на вход номера двух столбов: один из них – тот, с которого необходимо переместить диск, другой – на который необходимо переместить диск. Сочетает в себе вызовы push_disk и pop_disk, проверяя, не завершилась ли процедура построения, то есть не находятся ли все диски на первом столбе. 4. rearrange_and_record принимает на вход те же параметры что и rearrange_disk, и сохраняет выполненное действие в историю ходов. 5. redraw_field перебирает элементы массива towers_hanoi и в цикле кладет диски на каждый столб. 6. init_field принимает на вход ID, перебирает его цифры, после чего создает правильную компоновку массива towers_hanoi и вызывает перерисовку столбов. 7. save_history принимает на вход количество процентов, затем копирует заданную долю ходов из истории в новый массив и запускает цикл повторения этих ходов для того, чтобы получить ситуацию, соответствующую определенному этапу игры.

5.1.2 Разработка программной реализации

Полный исходный код программы приведен в листинге 4. Листинг 4. Полный исходный код программы для задания 4 from tkinter import * from tkinter import messagebox as mb »’ Описание класса ханойских башен »’ class Hanoi(Frame): def __init__(self, root): super(Hanoi, self).__init__(root) self.draw_field() »’ Метод отрисовки игрового поля »’ def draw_field(self): self.towers_hanoi = [[],[],[],[],[],[],[],[]] self.hist = [] self.ID = ‘70160258’ self.init_field(self.ID) self.draw_buttons() self.display = Frame(root, bg=’#B97A57′) self.display.place(relx=0.025, rely=0.6, relwidth=0.95, height=30) »’ Метод снятия диска со столба ind »’ def pop_disk(self, ind): return self.towers_hanoi[ind].pop() »’ Метод добавления диска в столб ind »’ def push_disk(self,ind,item): self.towers_hanoi[ind].append(item) »’ Метод ведения истории ходов »’ def save_history(self,perc): self.towers_hanoi = [[],[],[],[],[],[],[],[]] if perc == 0: self.hist = [] self.init_field(self.ID) if perc != 0: count = len(self.hist) * int(perc) /100 count = int(count) history_part =[] for el in range(count): history_part.append(self.hist[el]) for el in history_part: self.rearrange_disk(el[0], el[1]) »’ Метод перемещения диска с записью истории ходов »’ def rearrange_and_record(self,f,t): self.hist.append([f,t]) self.rearrange_disk(f,t) »’ Метод перемещения диска »’ def rearrange_disk(self,f,t): if self.towers_hanoi[t] == []: self.push_disk(t, self.pop_disk(f)) self.redraw_field() else: if self.towers_hanoi[f][-1] <= self.towers_hanoi[t][-1]: self.push_disk(t, self.pop_disk(f)) self.redraw_field() count = 0 for el in self.towers_hanoi: if len(el) != 0: count +=1 if count <= 1: mb.showinfo(title=’Поздравляем’, message=’Победа!’) »’ Метод обновления игрового поля »’ def redraw_field(self): Frame(root, bg=’white’).place(relx=0, rely=0.112, relwidth=1, height=500) x_s = 100 y_s = 0.3 wd_s = 10 hg_s = 0.3 for el in range(len(self.towers_hanoi)): Frame(root, bg=’#B97A57′).place(x=x_s, rely=y_s, width=wd_s, relheight=hg_s) x_s = x_s + 170 y = 615 hg = 10 for item in self.towers_hanoi[el]: if item == 9: bg = ‘#CD965F’ bd = ‘#FF7D24’ elif item == 8: bg = ‘#3CF92D’ bd = ‘#1EB24D’ elif item == 7: bg = ‘#FFF200’ bd = ‘#C1BB00’ elif item == 6: bg = ‘#6672DB’ bd = ‘#3C45CB’ elif item == 5: bg = ‘#BD6ABD’ bd = ‘#AA49A1’ elif item == 4: bg = ‘#ED6669’ bd = ‘#ED1C24’ elif item == 3: bg = ‘#C3C3C3’ bd = ‘#FF7D24’ elif item == 2: bg = ‘#B94A00’ bd = ‘#E14A00’ elif item == 1: bg = ‘#20B2AA’ bd = ‘#206BAA’ x = (10 — item) * 7 + el * 170 + 35 y = y — hg wd = item * 14 Frame(root, highlightbackground=bd, highlightcolor=bd, highlightthickness=2,bg=bg).place(x=x, y=y, width=wd, height=hg) »’ Метод установки начального состояния игрового поля »’ def init_field(self, ID): count = 0 for el in ID: n = 9 while n >= 10 — int(el): self.push_disk(count, n) n -= 1 count += 1 self.redraw_field() »’ Метод получения данных из текстовых полей »’ def input_data(self,tb): self.perc = tb.get() self.save_history(self.perc) »’ Метод отрисовки кнопок »’ def draw_buttons(self): buttons_frame = Frame(root, bg=’#FCFAEB’) buttons_frame.place(relx=0.3, rely=0.7, width=600, height=200) save_history = lambda p=0: self.save_history(p) Button(buttons_frame, bg=’#F4F1DB’, text=’Начало’, command=save_history).place(x=40, rely=0.30, width=100, height=50) save_history = lambda p=100: self.save_history(p) Button(buttons_frame, bg=’#F4F1DB’,text=’Окончание’, command=save_history).place(x=460, rely=0.30, width=100, height=50) x = 50 y = 0.63 wd = 20 hg = 0.3 for el in range(len(self.towers_hanoi)): if el == 0: rearrange_disk = lambda f=0, t=1: self.rearrange_and_record(f, t) Button(root, bg=’#F4F1DB’, text=’→’,font=(‘Times New Roman’, 18, ‘bold’), command=rearrange_disk).place(x=x, rely=y, width=50, height=30) rearrange_disk = lambda f=0, t=2: self.rearrange_and_record(f, t) Button(root, bg=’#F4F1DB’, text=’→ →’, font=(‘Times New Roman’, 18, ‘bold’), command=rearrange_disk).place(x=x + 55, rely=y , width=65,height=30) elif el == 7: rearrange_disk = lambda f=7, t=6: self.rearrange_and_record(f, t) Button(root, bg=’#F4F1DB’, text=’←’, font=(‘Times New Roman’, 18, ‘bold’), command=rearrange_disk).place(x=x+65, rely=y, width=50, height=30) rearrange_disk = lambda f=7, t=5: self.rearrange_and_record(f, t) Button(root, bg=’#F4F1DB’, text=’← ←’, font=(‘Times New Roman’, 18, ‘bold’), command=rearrange_disk).place(x=x-10, rely=y, width=65, height=30) else: rearrange_disk = lambda f=int(el), t=int(el) + 1: self.rearrange_and_record(f, t) Button(root, bg=’#F4F1DB’, text=’→’, font=(‘Times New Roman’, 18, ‘bold’), command=rearrange_disk).place(x=x+55,rely=y,width=50,height=30) rearrange_disk = lambda f=int(el), t=int(el) — 1: self.rearrange_and_record(f, t) Button(root, bg=’#F4F1DB’, text=’←’,font=(‘Times New Roman’, 18, ‘bold’), command=rearrange_disk).place(x=x, rely=y, width=50,height=30) x = x + 170 count = 0 x = 160 y = 0.45 wd = 55 hg = 35 self.tb1 = Entry(buttons_frame) self.tb1.place(x=160, rely=0.23, width=55, height=35) self.tb2 = Entry(buttons_frame) self.tb2.place(x=235, rely=0.23, width=55, height=35) self.tb3 = Entry(buttons_frame) self.tb3.place(x=310, rely=0.23, width=55, height=35) self.tb4 = Entry(buttons_frame) self.tb4.place(x=385, rely=0.23, width=55, height=35) input_data = lambda x=self.tb1: self.input_data(x) Button(buttons_frame, bg=’#F4F1DB’, text=’П.1′,command=input_data).place(x=160, rely=0.45, width=55, height=35) input_data = lambda x=self.tb2: self.input_data(x) Button(buttons_frame, bg=’#F4F1DB’, text=’П.2′, command=input_data).place(x=235, rely=0.45, width=55, height=35) input_data = lambda x=self.tb3: self.input_data(x) Button(buttons_frame, bg=’#F4F1DB’, text=’П.3′, command=input_data).place(x=310, rely=0.45, width=55, height=35) input_data = lambda x=self.tb4: self.input_data(x) Button(buttons_frame, bg=’#F4F1DB’, text=’П.4′, command=self.input_data).place(x=385, rely=0.45, width=55, height=35) x = x + wd + 20 # Главная функция — создание окна if __name__ == ‘__main__’: # Создать окно программы root = Tk() root[‘bg’] = ‘white’ root.geometry(‘1400×1024’) # Установить заголовок окна root.title(‘Ханойские башни’) # Установить невозможность изменения размеров формы root.resizable(False, False) # Создать окно программы для Ханойских башен gui = Hanoi(root) gui.pack() root.mainloop()

5.1.3 Тестирование и отладка

Вид окна программы после запуска приведен на рисунке 10. Диски на столбах располагаются в соответствии с цифрами ID. Рисунок 10 – Вид окна программы для задания 4 после запуска Вид окна программы после нажатия кнопки «влево» под четвертым слева столбом приведен на рисунке 11. Вид окна программы после двукратного нажатия кнопки «вправо» под первым слева столбом приведен на рисунке 12. Вид окна программы после отображения 40 процентов игрового процесса приведен на рисунке 13. Полученные результаты подтверждают корректность работы программы. Рисунок 11 – Вид окна программы для задания 4 после перемещения дисков с четвертого столбца Рисунок 12 – Вид окна программы для задания 4 после перемещения дисков с четвертого столбца Рисунок 13 – Вид окна программы после отображения частичного выполнения (чтение истории ходов)

Выводы

В большинстве высших учебных заведениях по всему миру Python постепенно становится первым языком при изучении программирования. Это один из самых популярных языков в промышленном программировании, который отлично подходит не только для решения школьных задач из курса информатики, но и для выполнения проектов по самым разным тематикам: обработка данных и визуализация, машинное обучение, разработка игр, написание программ для автоматизации различных процессов и т.п. Также язык характеризуется наличием большого количества обучающих материалов. Все это позволяет его использовать в качестве основного средства не только при обучении программированию, но и для написания промышленных программ. Среда разработки IDLE Python, выбранная из интегрированных сред разработки для языка Python как наиболее стандартный инструмент для реализации прикладных программ, обеспечивает быструю многоуровневую разработку, а также является свободно распространяемой для учебных проектов. Курсовая работа на тему «Высокоуровневые методы программирования» позволила получить необходимые теоретические сведения и закрепить практические навыки программирования прикладных задач на высокоуровневом языке Python, работы в интегрированной среде разработки IDLE Python, а также использованию стандартных библиотек. Улучшены навыки тестирования и отладки приложений. Таким образом, выполнены все поставленные в работе задачи, и цель работы можно считать достигнутой.

Список литературы

1. Лутц М. Изучаем Python, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 1280 с. 2. Златопольский Д.М. Основы программирования на языке Python. – М.: ДМК Пресс, 2017. – 284 с. 3. Лутц М. Программирование на Python, том I, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 992 с. 4. Лутц М. Программирование на Python, том II, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 992 с. 5. Гэддис Т. Начинаем программировать на Python. – 4-е изд.: Пер. с англ. – СПб.: БХВ-Петербург, 2019. – 768 с. 6. Лучано Рамальо Python. К вершинам мастерства. – М.: ДМК Пресс, 2016. – 768 с. 7. Свейгарт, Эл. Автоматизация рутиных задач с помощью Python: практическое руководство для начинающих. Пер. с англ. — М.: Вильямc, 2016. – 592 с. 8. Рейтц К., Шлюссер Т. Автостопом по Python. – СПб.: Питер, 2017. – 336 с.: ил. – (Серия «Бестселлеры O’Reilly»). 9. Любанович Билл Простой Python. Современный стиль программирования. – СПб.: Питер, 2016. – 480 с.: – (Серия «Бестсепперы O’Reilly»). 10. Федоров, Д. Ю. Программирование на языке высокого уровня Python: учебное пособие для прикладного бакалавриата / Д. Ю. Федоров. – 2-е изд., перераб. и доп. – Москва: Издательство Юрайт, 2019. – 161 с. – (Бакалавр. Прикладной курс). – ISBN 978-5-534-10971-9. – Текст: электронный // ЭБС Юрайт [сайт]. – URL: https://urait.ru/bcode/437489 (дата обращения: 13.11.2021). 11. Шелудько, В. М. Основы программирования на языке высокого уровня Python: учебное пособие / В. М. Шелудько. – Ростов-на-Дону, Таганрог: Издательство Южного федерального университета, 2017. – 146 c. – ISBN 978-5-9275-2649-9. – Текст: электронный // Электронно-библиотечная система IPR BOOKS: [сайт]. – URL: http://www.iprbookshop.ru/87461.html (дата обращения: 13.11.2021). – Режим доступа: для авторизир. пользователей 12. Шелудько, В. М. Язык программирования высокого уровня Python. Функции, структуры данных, дополнительные модули: учебное пособие / В. М. Шелудько. – Ростов-на-Дону, Таганрог: Издательство Южного федерального университета, 2017. – 107 c. – ISBN 978-5-9275-2648-2. – Текст: электронный // Электронно-библиотечная система IPR BOOKS: [сайт]. – URL: http://www.iprbookshop.ru/87530.html (дата обращения: 13.11.2021). – Режим доступа: для авторизир. пользователей 13. Доусон М. Программируем на Python. – СПб.: Питер, 2014. – 416 с. 14. Прохоренок Н.А. Python 3 и PyQt. Разработка приложений. – СПб.: БХВ-Петербург, 2012. – 704 с. 15. Пилгрим Марк. Погружение в Python 3 (Dive into Python 3 на русском) 16. Прохоренок Н.А. Самое необходимое. – СПб.: БХВ-Петербург, 2011. – 416 с. 17. Основные структуры данных [Электронный ресурс] / URL: https://habr.com/ru/post/422259 (Дата обращения: 13.11.2021) 18. Словари [Электронный ресурс] / URL: https://devpractice.ru/python-lesson-9-dict Словари (Дата обращения: 12.11.2021) 19. Списки, кортежи и словари [Электронный ресурс] / URL: https://pythonru.com/osnovy/2-python-dlja-data-science-struktury-dannyh Списки, кортежи и словари (Дата обращения: 12.11.2021) 20. Стиль кода в языке Python [Электронный ресурс] / URL: https://pep8.ru/doc/pep8 (Дата обращения: 13.11.2021) 21. Hist of programming languages [Электронный ресурс] – URL: https://en.wikipedia.org/wiki/Hist_of_programming_languages (Дата обращения: 15.11.2021) 22. Our Documentation | Python.org [Электронный ресурс] / URL: https://www.python.org/doc/ (Дата обращения: 15.11.2021) 23. The Python Tutorial [Электронный ресурс] / URL: https://docs.python.org/3/tutorial/ (Дата обращения: 15.11.2021)

или напишите нам прямо сейчас

Написать в WhatsApp Написать в Telegram

О сайте
Ссылка на первоисточник:
https://www.spbume.ru/ru/
Поделитесь в соцсетях:

Оставить комментарий

Inna Petrova 18 минут назад

Нужно пройти преддипломную практику у нескольких предметов написать введение и отчет по практике так де сдать 4 экзамена после практики

Иван, помощь с обучением 25 минут назад

Inna Petrova, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Коля 2 часа назад

Здравствуйте, сколько будет стоить данная работа и как заказать?

Иван, помощь с обучением 2 часа назад

Николай, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Инкогнито 5 часов назад

Сделать презентацию и защитную речь к дипломной работе по теме: Источники права социального обеспечения. Сам диплом готов, пришлю его Вам по запросу!

Иван, помощь с обучением 6 часов назад

Здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Василий 12 часов назад

Здравствуйте. ищу экзаменационные билеты с ответами для прохождения вступительного теста по теме Общая социальная психология на магистратуру в Московский институт психоанализа.

Иван, помощь с обучением 12 часов назад

Василий, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Анна Михайловна 1 день назад

Нужно закрыть предмет «Микроэкономика» за сколько времени и за какую цену сделаете?

Иван, помощь с обучением 1 день назад

Анна Михайловна, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Сергей 1 день назад

Здравствуйте. Нужен отчёт о прохождении практики, специальность Государственное и муниципальное управление. Планирую пройти практику в школе там, где работаю.

Иван, помощь с обучением 1 день назад

Сергей, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Инна 1 день назад

Добрый день! Учусь на 2 курсе по специальности земельно-имущественные отношения. Нужен отчет по учебной практике. Подскажите, пожалуйста, стоимость и сроки выполнения?

Иван, помощь с обучением 1 день назад

Инна, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Студент 2 дня назад

Здравствуйте, у меня сегодня начинается сессия, нужно будет ответить на вопросы по русскому и математике за определенное время онлайн. Сможете помочь? И сколько это будет стоить? Колледж КЭСИ, первый курс.

Иван, помощь с обучением 2 дня назад

Здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Ольга 2 дня назад

Требуется сделать практические задания по математике 40.02.01 Право и организация социального обеспечения семестр 2

Иван, помощь с обучением 2 дня назад

Ольга, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Вика 3 дня назад

сдача сессии по следующим предметам: Этика деловых отношений - Калашников В.Г. Управление соц. развитием организации- Пересада А. В. Документационное обеспечение управления - Рафикова В.М. Управление производительностью труда- Фаизова Э. Ф. Кадровый аудит- Рафикова В. М. Персональный брендинг - Фаизова Э. Ф. Эргономика труда- Калашников В. Г.

Иван, помощь с обучением 3 дня назад

Вика, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Игорь Валерьевич 3 дня назад

здравствуйте. помогите пройти итоговый тест по теме Обновление содержания образования: изменения организации и осуществления образовательной деятельности в соответствии с ФГОС НОО

Иван, помощь с обучением 3 дня назад

Игорь Валерьевич, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Вадим 4 дня назад

Пройти 7 тестов в личном кабинете. Сооружения и эксплуатация газонефтипровод и хранилищ

Иван, помощь с обучением 4 дня назад

Вадим, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Кирилл 4 дня назад

Здравствуйте! Нашел у вас на сайте задачу, какая мне необходима, можно узнать стоимость?

Иван, помощь с обучением 4 дня назад

Кирилл, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Oleg 4 дня назад

Требуется пройти задания первый семестр Специальность: 10.02.01 Организация и технология защиты информации. Химия сдана, история тоже. Сколько это будет стоить в комплексе и попредметно и сколько на это понадобится времени?

Иван, помощь с обучением 4 дня назад

Oleg, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Валерия 5 дней назад

ЗДРАВСТВУЙТЕ. СКАЖИТЕ МОЖЕТЕ ЛИ ВЫ ПОМОЧЬ С ВЫПОЛНЕНИЕМ практики и ВКР по банку ВТБ. ответьте пожалуйста если можно побыстрее , а то просто уже вся на нервяке из-за этой учебы. и сколько это будет стоить?

Иван, помощь с обучением 5 дней назад

Валерия, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Инкогнито 5 дней назад

Здравствуйте. Нужны ответы на вопросы для экзамена. Направление - Пожарная безопасность.

Иван, помощь с обучением 5 дней назад

Здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Иван неделю назад

Защита дипломной дистанционно, "Синергия", Направленность (профиль) Информационные системы и технологии, Бакалавр, тема: «Автоматизация приема и анализа заявок технической поддержки

Иван, помощь с обучением неделю назад

Иван, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru

Дарья неделю назад

Необходимо написать дипломную работу на тему: «Разработка проекта внедрения CRM-системы. + презентацию (слайды) для предзащиты ВКР. Презентация должна быть в формате PDF или формате файлов PowerPoint! Институт ТГУ Росдистант. Предыдущий исполнитель написал ВКР, но работа не прошла по антиплагиату. Предыдущий исполнитель пропал и не отвечает. Есть его работа, которую нужно исправить, либо переписать с нуля.

Иван, помощь с обучением неделю назад

Дарья, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@the-distance.ru