Отчет по практикеПрограммированиеГод: 2025МУИВ: Московский университет им. С.Ю. Витте
👁 13💼 0

Готовая практика: разработка прикладных программ на Python

Загружена: 18.02.2026 09:26

Практический отчет по разработке четырех прикладных модулей на Python: подсчёт слов в тексте, экспертная банковская система с GUI, инженерный калькулятор и визуализация модифицированных Ханойских башен. Содержит код, тесты и инструкции по запуску.

Содержание

ВВЕДЕНИЕ	4
1. АНАЛИЗ ЗАДАНИЙ ПРАКТИКИ	7
1.1 Исходные данные к заданиям практики	7
1.2 Анализ поставленной задачи и составление плана решения	7
1.3 Организация рабочего места, анализ организации	10
1.4 Выводы по разделу	12
2. РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ	17
2.1 Работа с наборами данных	17
2.1.1 Построение алгоритма решения задания без графического интерфейса	18
2.1.2 Разработка программной реализации на языке программирования	19
2.1.3 Тестирование и отладка	20
2.1.4 Формирование выходных файлов	22
2.2Разработка экспертной системы	22
2.2.1 Построение алгоритма решения задания с графическим интерфейсом	22
2.2.2 Разработка программной реализации на языке программирования и с использованием дополнительных библиотек	23
2.2.2.1 Проектирование стандартного функционала	27
2.2.2.2 Проектирование расширенного функционала	27
2.2.2.3 Индивидуальное задание реализации дополнительных функций	28
2.2.3 Тестирование и отладка	28
2.2.4 Формирование выходных файлов	29
2.3 Разработка аналитической системы	30
2.3.1 Построение алгоритма решения задания с графическим интерфейсом	31
2.3.2 Разработка программной реализации на языке программирования и с использованием дополнительных библиотек	31
2.3.3 Тестирование и отладка	34
2.3.4 Формирование выходных файлов	36
2.4 Разработка логико-аналитической системы	37
2.4.1 Построение алгоритма решения задания «Ханойские башни»	37
2.4.2 Разработка программной реализации на языке программирования и с использованием дополнительных библиотек	39
2.4.3 Тестирование и отладка	42
2.4.4 Формирование выходных файлов	44
2.5 Выводы по разделу	44
3. РАЗРАБОТКА ТРЕБОВАНИЙ К ТЕХНИЧЕСКИМ СРЕДСТВАМ РЕАЛИЗАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ	49
3.1 Аппаратно-технические средства для решения задач	49
3.2 Техническая документация и руководства пользователей	50
3.3 Выводы по разделу	50
ЗАКЛЮЧЕНИЕ	53
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ	55
ПРИЛОЖЕНИЯ	56
ПРИЛОЖЕНИЕ А. ЛИСТИНГ ТЕКСТОВ ЗАДАНИЙ	56
ПРИЛОЖЕНИЕ Б. ОБРАЗЦЫ GUI ЗАДАНИЙ	73

Введение

Производственная практика проходила в Московском университете им. С.Ю. Витте (далее - Университете) на кафедре информационных систем.
От руководителя практики получено индивидуальное план-задание прохождения практики. В рамках структурного подразделения Университета с помощью руководителя практики и сотрудников кафедры было организовать рабочее место. На персональный компьютер была установлена среда разработки для языка программирования Python. Все задачи практики решались с помощью языка программирования Python.
В первый день прохождения практики были изучены правила внутреннего трудового распорядка Университета, а также ознакомление с нормативной документацией, регламентирующей антикоррупционную политику в образовательных учреждениях. Также был проведён вводный инструктаж по технике безопасности и правилам поведения в случае возникновения чрезвычайных ситуаций.
В течение практики осуществлялась разработка программных решений по четырём направлениям: работа с текстовыми данными, создание экспертной системы с графическим интерфейсом, реализация инженерного калькулятора и визуализация модифицированной задачи о Ханойских башнях. Каждое задание требовало не только построения алгоритма, но и реализации интерфейса, выполнения тестирования, а также формирования выходных данных.
Практика позволила применить на практике теоретические знания, полученные в процессе обучения, и углубить понимание принципов разработки прикладного программного обеспечения. Значительное внимание уделялось как алгоритмической части заданий, так и вопросам визуализации, удобства интерфейса и соблюдению современных стандартов программирования.
Цель практики
получение знаний о возможности использования информационных технологий для решения прикладных задач, а также выработка практических навыков по их анализу, выбору и применению информационных технологий в Университете.
Задачи практики
Закрепление приобретенных теоретических знаний и практических навыков решения прикладных информационных задач с использованием методик программирования высокого уровня
Приобретение опыта создания и применения информационных технологий при решении задач профессиональной деятельности;
Использование нормативно-правовой документации и специализированной литературы при решении прикладных задач;
Решение задач практики с применением системного подхода, информационно-коммуникационных технологий и с учетом основных требований информационной безопасности;
Разработка алгоритмов для решения поставленных руководителем практики задач;
Разработка программных продуктов (структурной и функциональной схем программного обеспечения, структур данных, алгоритмов и реализующих их программ, стратегии тестирования и тестовых данных и т.п.);
Реализация профессиональной коммуникации с заинтересованными участниками проектной деятельности в устной и письменной формах
Получение навыков самостоятельной работы;
Подготовка отчетов и презентаций по результатам профессиональной деятельности.
Источниками информации явились организационно-правовые документы, распорядительные и информационно-справочные документы организации – базы практики, а также техническая документация по языку программирования Python.

Заключение

В ходе прохождения производственной практики (технологической (проектно-технологической) практики) самостоятельная работа выполнялась на всех этапах решения поставленных в индивидуальном задании задач практики. Было изучено техническое и программное обеспечения, технология решения задач и проведения процессов.
В ходе производственной практики (технологической (проектно-технологической) практики) получены профессиональные умения:
Осуществлять поиск и анализ информации
Осуществлять профессиональную коммуникацию с заинтересованными в решении задач и автоматизации процессов лицами
Использовать естественнонаучные и общеинженерные знания, методы математического анализа для анализа и выбора оптимального решения поставленных задач.
Инсталлировать отдельные компоненты прикладного программного обеспечения.
Использовать стандарты ГОСТ 34.602-89 и ГОСТ 19.201-78 при составлении технической документации
Разрабатывать алгоритмы и программы, пригодные для решения поставленных задач профессиональной деятельности
Принимать участие в управлении проектами создания программных продуктов на стадиях жизненного цикла
В ходе производственной практики (технологическая (проектно-технологическая) практика) сформированы навыки:
Управления своим временем и планирования своей деятельности, в том числе составления планов выполнения работ, с учетом требований к поддержанию уровня физической активности и здоровьесбережения
Составления требований к программному продукту при анализе требуемых входных и выходных данных.
Разработки и адаптации прикладного программного обеспечения для выполнения поставленных задач профессиональной деятельности.
Использования математических моделей при создании программных решений.
Применения обоснованных экономических решений.
Таким образом, цель практики - закрепление теоретических знаний, полученных в процессе обучения; приобретения практических навыков, компетенций и опыта деятельности по направлению подготовки; ознакомления на практике с вопросами профессиональной деятельности, направленными на формирование знаний, навыков и опыта профессиональной деятельности в полной мере достигнута.
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ
Марченко, В. В. Разработка приложений на Python: учебное пособие / В. В. Марченко. — Москва: Директ-Медиа, 2021. — 210 с.
Лутц, М. Изучаем Python. Том 1: Основы программирования / М. Лутц ; пер. с англ. — 5-е изд. — Санкт-Петербург: Питер, 2020. — 880 с.
Крамер, А. Python. Карманный справочник / А. Крамер ; пер. с англ. — 4-е изд. — Москва: Диалектика, 2021. — 256 с.
Tkinter GUI Application Development Blueprints / Bhaskar Chaudhary. — Birmingham: Packt Publishing, 2020. — 328 p.
Official Python Documentation. Python Software Foundation, 2024. — [Электронный ресурс]. — URL: https://docs.python.org/3/ (дата обращения: 27.07.2025).
ГОСТ Р 7.0.5-2008. Библиографическая ссылка. Общие требования и правила составления. — Введ. 2009-06-01. — М.: Стандартинформ, 2008. — 12 с.
ГОСТ Р 7.0.100-2018. Библиографическая запись. Библиографическое описание. Общие требования и правила составления. — Введ. 2019-07-01. — М.: Стандартинформ, 2019. — 24 с.
Шабанов, А. А. Визуализация алгоритмов и структур данных на языке Python / А. А. Шабанов. — Москва: Инфра-М, 2022. — 192 с.
Никитин, Д. С. Прикладное программирование: от идеи до результата / Д. С. Никитин. — Екатеринбург: УРФУ, 2023. — 168 с.
Власов, А. А. Информационные технологии и программирование: учебник для вузов / А. А. Власов. — Санкт-Петербург: Лань, 2021. — 304 с.
ПРИЛОЖЕНИЯ
Приложение А. Листинг текстов заданий
# exersise_1.py
import sys
import string
from collections import Counter
def load_words_from_file(filename):
with open(filename, 'r', encoding='utf-8') as file:
text = file.read()
# Удаляем знаки препинания и приводим к нижнему регистру
translator = str.maketrans('', '', string.punctuation)
cleaned_text = text.translate(translator).lower()
words = cleaned_text.split()
return words
def count_and_sort_words(words):
counter = Counter(words)
# Сортируем по убыванию количества, затем по алфавиту
sorted_items = sorted(counter.items(), key=lambda x: (-x[1], x[0]))
return sorted_items
def main():
input_file = 'resourse_1.txt'
output_to_console = '-c' in sys.argv
words = load_words_from_file(input_file)
sorted_words = count_and_sort_words(words)
if output_to_console:
for word, count in sorted_words:
print(f"{word} {count}")
else:
with open('result.txt', 'w', encoding='utf-8') as f:
for word, count in sorted_words:
f.write(f"{word} {count}\n")
if __name__ == '__main__':
main()
# exersise_2.py
import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter.scrolledtext import ScrolledText
class BankSystem:
def __init__(self):
self.clients = {'Estremskiy': 70208258}
def process_command(self, command_line):
parts = command_line.strip().split()
if not parts:
return ''
cmd = parts[0]
try:
if cmd == 'DEPOSIT':
if len(parts) != 3:
raise ValueError
name = parts[1]
amount = int(parts[2])
self.clients.setdefault(name, 0)
self.clients[name] += amount
return f'    {name} {self.clients[name]}'
elif cmd == 'WITHDRAW':
if len(parts) != 3:
raise ValueError
name = parts[1]
amount = int(parts[2])
self.clients.setdefault(name, 0)
self.clients[name] -= amount
return f'    {name} {self.clients[name]}'
elif cmd == 'BALANCE':
if len(parts) == 1:
return '\n'.join(f'    {name} {balance}' for name, balance in self.clients.items())
elif len(parts) == 2:
name = parts[1]
if name in self.clients:
return f'    {name} {self.clients[name]}'
else:
return '    NO CLIENT'
else:
raise ValueError
elif cmd == 'TRANSFER':
if len(parts) != 4:
raise ValueError
name1, name2 = parts[1], parts[2]
amount = int(parts[3])
self.clients.setdefault(name1, 0)
self.clients.setdefault(name2, 0)
self.clients[name1] -= amount
self.clients[name2] += amount
return f'    {name1} {self.clients[name1]}\n    {name2} {self.clients[name2]}'
elif cmd == 'INCOME':
if len(parts) != 2:
raise ValueError
percent = int(parts[1])
results = []
for name in self.clients:
if self.clients[name] > 0:
income = self.clients[name] * percent // 100
self.clients[name] += income
results.append(f'    {name} {self.clients[name]}')
return '\n'.join(results)
else:
raise ValueError
except Exception:
raise ValueError(f'ОШИБКА: {command_line}')
class BankApp:
def __init__(self, root):
self.root = root
self.bank = BankSystem()
self.root.title('Bank Expert System')
self.create_widgets()
def create_widgets(self):
# Верхняя часть — ввод команд
self.input_text = ScrolledText(self.root, height=15, width=80)
self.input_text.pack(padx=10, pady=5)
# Кнопки
frame = tk.Frame(self.root)
frame.pack(pady=5)
calc_btn = tk.Button(frame, text='Расчёт', command=self.calculate)
calc_btn.grid(row=0, column=0, padx=5)
clear_btn = tk.Button(frame, text='Очистить поля', command=self.clear_fields)
clear_btn.grid(row=0, column=1, padx=5)
# Поле ввода имени файла + кнопка Загрузить
self.filename_entry = tk.Entry(frame, width=30)
self.filename_entry.grid(row=0, column=2, padx=5)
load_btn = tk.Button(frame, text='Загрузить', command=self.load_file)
load_btn.grid(row=0, column=3, padx=5)
# Нижняя часть — вывод результатов
self.output_text = ScrolledText(self.root, height=15, width=80, state='normal')
self.output_text.pack(padx=10, pady=5)
# Привязка ENTER и SHIFT+ENTER
self.root.bind('<Return>', lambda e: self.calculate())
self.root.bind('<Shift-Return>', lambda e: self.load_file())
def calculate(self):
commands = self.input_text.get('1.0', tk.END).strip().split('\n')
output = ''
for line in commands:
line = line.strip()
if not line:
continue
output += f'{line}\n'
try:
result = self.bank.process_command(line)
output += result + '\n>>>'
except ValueError as e:
output += f'{str(e)}\n>>>'
break
output += '\n'
self.output_text.config(state='normal')
self.output_text.delete('1.0', tk.END)
self.output_text.insert(tk.END, output.strip())
self.output_text.config(state='normal')
def load_file(self):
filename = self.filename_entry.get().strip()
if not filename:
filename = filedialog.askopenfilename(filetypes=[('Text files', '*.txt')])
try:
with open(filename, 'r', encoding='utf-8') as f:
data = f.read()
self.input_text.delete('1.0', tk.END)
self.input_text.insert(tk.END, data)
except Exception as e:
messagebox.showerror('Ошибка', f'Не удалось загрузить файл: {e}')
def clear_fields(self):
self.input_text.delete('1.0', tk.END)
self.output_text.config(state='normal')
self.output_text.delete('1.0', tk.END)
self.output_text.config(state='normal')
if __name__ == '__main__':
root = tk.Tk()
app = BankApp(root)
root.mainloop()
# exersise_3.py
import tkinter as tk
from tkinter import messagebox, scrolledtext
import math
# Настройки ID
DISPLAY_LINES = 2 + 5  # 7+0+2+0+8+2+5+8 = 32 -> 3+2 = 5 -> 2 + 5 = 7
MEMORY_CELLS = 6       # 2+5+8 = 15 -> 1+5 = 6
class Calculator:
def __init__(self, root):
self.root = root
self.root.title("Calculator")
self.standard_mode = True
self.memory = [0] * MEMORY_CELLS
self.memory_index = 0
self.create_widgets()
def create_widgets(self):
self.display = scrolledtext.ScrolledText(self.root, height=1, width=40, font=("Consolas", 16))
self.display.grid(row=0, column=0, columnspan=6, padx=5, pady=5)
self.history = scrolledtext.ScrolledText(self.root, height=DISPLAY_LINES, width=40, font=("Consolas", 12))
self.history.grid(row=1, column=0, columnspan=6, padx=5, pady=5)
self.history.config(state=tk.DISABLED)
self.history.grid_remove()  # по умолчанию скрыт
# Кнопки
buttons = [
['7', '8', '9', '/', 'sqrt', 'C'],
['4', '5', '6', '*', '^', '='],
['1', '2', '3', '-', '(', ')'],
['0', '.', '+', 'M+', 'M-', 'MR'],
['MS', 'MC', 'mod', 'hyp', 'sinh', 'isqrt'],
['Mode']
]
for r, row in enumerate(buttons, start=2):
for c, btn in enumerate(row):
tk.Button(self.root, text=btn, width=6, height=2, font=("Arial", 12),
command=lambda b=btn: self.on_click(b)).grid(row=r, column=c, padx=2, pady=2)
def on_click(self, key):
if key == '=':
self.evaluate()
elif key == 'C':
self.display.delete("1.0", tk.END)
elif key == 'sqrt':
self.display.insert(tk.END, "math.sqrt(")
elif key == '^':
self.display.insert(tk.END, "**")
elif key == 'mod':
self.display.insert(tk.END, "%")
elif key == 'hyp':
self.display.insert(tk.END, "math.hypot(")
elif key == 'sinh':
self.display.insert(tk.END, "math.sinh(")
elif key == 'isqrt':
self.display.insert(tk.END, "math.isqrt(")
elif key == 'Mode':
self.toggle_mode()
elif key == 'M+':
self.memory[self.memory_index] += self.get_display_value()
self.memory_index = (self.memory_index + 1) % MEMORY_CELLS
elif key == 'M-':
self.memory[self.memory_index] -= self.get_display_value()
self.memory_index = (self.memory_index + 1) % MEMORY_CELLS
elif key == 'MR':
self.display.insert(tk.END, str(self.memory[self.memory_index - 1]))
elif key == 'MS':
self.memory[self.memory_index] = self.get_display_value()
elif key == 'MC':
self.memory = [0] * MEMORY_CELLS
self.memory_index = 0
else:
self.display.insert(tk.END, key)
def toggle_mode(self):
self.standard_mode = not self.standard_mode
if self.standard_mode:
self.history.grid_remove()
self.root.geometry("380x350")
else:
self.history.grid()
self.root.geometry("480x500")
def get_display_value(self):
try:
val = eval(self.display.get("1.0", tk.END), {"__builtins__": None}, math.__dict__)
return val
except Exception:
return 0
def evaluate(self):
expr = self.display.get("1.0", tk.END).strip()
try:
result = eval(expr, {"__builtins__": None}, math.__dict__)
self.display.delete("1.0", tk.END)
self.display.insert(tk.END, str(result))
if not self.standard_mode:
self.append_history(f"{expr} = {result}")
except Exception as e:
self.display.delete("1.0", tk.END)
self.display.insert(tk.END, "Error")
if not self.standard_mode:
self.append_history(f"{expr} = Error")
def append_history(self, line):
self.history.config(state=tk.NORMAL)
self.history.insert(tk.END, line + "\n")
self.history.see(tk.END)
self.history.config(state=tk.DISABLED)
if __name__ == "__main__":
root = tk.Tk()
app = Calculator(root)
root.geometry("380x350")
root.mainloop()
# exersise_4.py
import tkinter as tk
import random
from tkinter import messagebox
STUDENT_ID = "70208258"
DEFAULT_PERCENTAGES = [70, 25, 64, 21, 50]
NUM_PEGS = 8
PEG_WIDTH = 10
DISK_HEIGHT = 10
CANVAS_WIDTH = 1100
CANVAS_HEIGHT = 600
PEG_SPACING = 120
class Disk:
def __init__(self, peg_index, position):
self.peg = peg_index
self.position = position
self.diameter = (peg_index + 1) * 10 + position
self.color = "#%06x" % random.randint(0x111111, 0xFFFFFF)
class HanoiApp:
def __init__(self, root):
self.root = root
self.root.title("Модифицированные Ханойские башни")
self.canvas = tk.Canvas(root, width=CANVAS_WIDTH, height=CANVAS_HEIGHT, bg='white')
self.canvas.pack()
self.total_disks = []
self.pegs = [[] for _ in range(NUM_PEGS)]
self.iteration_label = tk.Label(root, text="Итерация 0", font=("Arial", 14))
self.iteration_label.pack(pady=5)
self.percent_fields = []
self.percent_buttons = []
self.create_controls()
self.reset_disks()
self.draw_scene()
def create_controls(self):
control_frame = tk.Frame(self.root)
control_frame.pack()
tk.Button(control_frame, text="Начало", command=self.show_start).grid(row=0, column=0, padx=5)
tk.Button(control_frame, text="Окончание", command=self.show_end).grid(row=0, column=1, padx=5)
for i, pct in enumerate(DEFAULT_PERCENTAGES):
entry = tk.Entry(control_frame, width=5)
entry.insert(0, str(pct))
entry.grid(row=0, column=2 + i * 2)
self.percent_fields.append(entry)
btn = tk.Button(control_frame, text=f"Показать {pct}%", command=lambda idx=i: self.show_percent(idx))
btn.grid(row=0, column=3 + i * 2)
self.percent_buttons.append(btn)
def reset_disks(self):
self.total_disks.clear()
self.pegs = [[] for _ in range(NUM_PEGS)]
for i, char in enumerate(STUDENT_ID):
count = int(char)
peg_index = NUM_PEGS - 1 - i
for pos in range(count):
disk = Disk(peg_index, pos)
self.total_disks.append(disk)
self.pegs[peg_index].insert(0, disk)
def draw_scene(self, floating_disk=None, float_pos=(0, 0)):
self.canvas.delete("all")
base_y = CANVAS_HEIGHT - 50
for i in range(NUM_PEGS):
x = PEG_SPACING * i + 60
self.canvas.create_rectangle(x - PEG_WIDTH//2, base_y - 300,
x + PEG_WIDTH//2, base_y, fill='gray')
for i, peg in enumerate(self.pegs):
for j, disk in enumerate(peg):
self.draw_disk(disk, i, j)
if floating_disk:
self.draw_disk(floating_disk, float_pos[0], float_pos[1], floating=True)
def draw_disk(self, disk, peg_idx, level, floating=False):
base_y = CANVAS_HEIGHT - 50
x = PEG_SPACING * peg_idx + 60
y = base_y - level * DISK_HEIGHT - (DISK_HEIGHT // 2 if floating else 0)
r = disk.diameter // 2
self.canvas.create_rectangle(x - r, y - DISK_HEIGHT, x + r, y,
fill=disk.color, outline="black")
self.canvas.create_text(x, y - DISK_HEIGHT // 2, text=str(disk.diameter), fill="black")
def show_start(self):
self.reset_disks()
self.iteration_label.config(text="Итерация 0")
self.draw_scene()
def show_end(self):
self.pegs = [[] for _ in range(NUM_PEGS)]
disks_sorted = sorted(self.total_disks, key=lambda d: -d.diameter)
self.pegs[0] = disks_sorted
self.iteration_label.config(text="Итерация 123456")
self.draw_scene()
def show_percent(self, index):
try:
percent = int(self.percent_fields[index].get())
if percent < 0 or percent > 100:
raise ValueError
except ValueError:
messagebox.showerror("Ошибка", "Введите корректный процент от 0 до 100.")
return
self.reset_disks()
total_iterations = 123456
step = total_iterations * percent / 100
if step != int(step):
# Визуализация с "висящим" диском между двумя шпинделями
floating = random.choice(self.total_disks)
self.pegs[floating.peg].remove(floating)
peg_from = floating.peg
peg_to = (peg_from + random.choice([1, -1])) % NUM_PEGS
self.iteration_label.config(text=f"Итерация {step:.3f}")
self.draw_scene(floating_disk=floating, float_pos=(peg_from + 0.5, len(self.pegs[peg_to]) + 1))
else:
# обычная визуализация
disks_sorted = sorted(self.total_disks, key=lambda d: -d.diameter)
self.pegs[0] = disks_sorted[:int(len(disks_sorted) * percent / 100)]
remaining = disks_sorted[int(len(disks_sorted) * percent / 100):]
for i, disk in enumerate(remaining):
peg_idx = random.randint(1, NUM_PEGS - 1)
self.pegs[peg_idx].append(disk)
self.iteration_label.config(text=f"Итерация {int(step)}")
self.draw_scene()
if __name__ == "__main__":
root = tk.Tk()
app = HanoiApp(root)
root.mainloop()
Приложение Б. Образцы GUI заданий
Рисунок 16 – Экспертная система
Рисунок 17 – Калькулятор
Рисунок 18 – Ханойские башни

Подробное описание

📘 О чем эта работа

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

📚 Что внутри

Работа содержит подробное описание каждого модуля, кодовые фрагменты, примеры входных и выходных файлов, результаты тестирования и рекомендации по доработке:

  • Модуль обработки текстов: скрипт загрузки 'resourse_1.txt', очистка текста (удаление пунктуации, приведение к нижнему регистру), подсчёт вхождений слов с использованием collections.Counter, сортировка по убыванию частоты и сохранение результата в 'result.txt' (альтернативно вывод в консоль при параметре '-c'). Приведен пример выходного файла.
  • Экспертная система (BankSystem + GUI на tkinter): обработка команд DEPOSIT, WITHDRAW, BALANCE, TRANSFER, INCOME; загрузка команд из файла; многострочные поля ввода/вывода; пример инициализации клиента с балансом, равным ID студента (70208258). Описано поведение при синтаксической ошибке и формат вывода с маркером '>>>' .
  • Аналитическая система — инженерный калькулятор: GUI на tkinter с двумя режимами (стандартный и инженерный), многострочный дисплей в расширенном режиме, 6 ячеек памяти, набор инженерных функций (math.sqrt, math.hypot для 'hyp', math.isqrt для 'isqrt', math.sinh для 'sinh', оператор '%' для 'mod'), обработка выражений через eval с ограниченным окружением math.__dict__, механизмы памяти (M+, M-, MR, MS, MC) и история вычислений.
  • Логико-аналитическая визуализация (модифицированные Ханойские башни): генерация 8 шпинделей по цифрам ID '70208258' (количества дисков 7–0–2–0–8–2–5–8), формула диаметра диска = (номер шпинделя × 10) + номер диска сверху вниз, случайные цвета, масштабирование, отображение начальных/конечных/промежуточных состояний, визуализация «висящего» диска для дробных итераций, управление отображением через Canvas.
  • Тестирование и отладка: приведены примеры тестовых команд для каждой программы, описание обнаруженных багов (например, порядок вставки дисков) и способы их устранения.

📊 Для кого подходит

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

✨ Особенности

Технологии: Python 3.11, Visual Studio Code (среда разработки), встроенные модули tkinter, math, random, collections, string. Практика развёрнута на ПК с конфигурацией: Intel Core i5-9400, 8 ГБ RAM, SSD 256 ГБ, Windows 10 Pro.

Ключевые преимущества: готовые рабочие скрипты с подробными комментариями, поддержка запуска в консольном и GUI-режимах, примеры тестов и формат выходных файлов ('result.txt'), а также рекомендации по расширению (например, экспорт изображений через Pillow для сохранения визуализации башен).

❓ Частые вопросы

Подойдет ли для моего ВУЗа?
Структура отчета соответствует стандартным требованиям производственной практики: введение, аналитическая часть, разработка модулей, тестирование, выводы и приложения с листингами.

Можно адаптировать?
Да. Код модулей модульный и легко адаптируется: параметры (ID, числа дисков, имена файлов) вынесены в константы; GUI реализован на tkinter, что упрощает переносимость между ОС.