浏览代码

Merge branch 'master' of http://213.155.192.79:3001/ypv/up

ypv 1 周之前
父节点
当前提交
be58224c94

+ 26 - 0
Кудага 1.py

@@ -0,0 +1,26 @@
+import tkinter as tk
+from tkinter import ttk
+import random
+
+def generate_and_filter():
+    random_numbers = [random.randint(0, 3) for _ in range(50)]
+    filtered_numbers = [num for num in random_numbers if num in [0, 1]]
+    result_text.set(str(filtered_numbers))
+
+root = tk.Tk()
+root.title("Генератор случайных 0 и 1")
+root.geometry("600x200")
+
+style = ttk.Style()
+style.configure("TLabel", padding=5, font=('Arial', 12))
+style.configure("TButton", padding=5, font=('Arial', 12))
+
+generate_button = ttk.Button(root, text="Сгенерировать и отфильтровать", command=generate_and_filter)
+generate_button.pack(pady=20)
+
+result_text = tk.StringVar()
+result_label = ttk.Label(root, textvariable=result_text)
+result_label.pack(pady=10)
+
+
+root.mainloop()

+ 52 - 0
Кулага2.py

@@ -0,0 +1,52 @@
+import tkinter as tk
+from tkinter import ttk
+from tkinter import messagebox
+
+def process_array():
+    """Обрабатывает массив, разделяя на неотрицательные и отрицательные элементы."""
+    try:
+        input_str = array_entry.get()
+        arr = [int(x) for x in input_str.split(",")]  # Преобразуем строку в массив целых чисел
+
+        positive_elements = [x for x in arr if x >= 0]
+        negative_elements = [x for x in arr if x < 0]
+
+        positive_result_label.config(text="Неотрицательные элементы: " + str(positive_elements))
+        negative_result_label.config(text="Отрицательные элементы: " + str(negative_elements))
+
+    except ValueError:
+        messagebox.showerror("Ошибка", "Некорректный ввод! Введите целые числа, разделенные запятыми.")
+    except Exception as e:
+        messagebox.showerror("Ошибка", f"Произошла ошибка: {e}")
+
+# Создание главного окна
+root = tk.Tk()
+root.title("Разделение массива на положительные и отрицательные")
+root.geometry("500x300")  # Устанавливаем размер окна
+
+# Стиль для элементов
+style = ttk.Style()
+style.configure("TLabel", padding=5, font=('Arial', 12))
+style.configure("TButton", padding=5, font=('Arial', 12))
+style.configure("TEntry", padding=5, font=('Arial', 12))
+
+# 1. Ввод массива
+array_label = ttk.Label(root, text="Введите массив целых чисел, разделенных запятыми:")
+array_label.pack(pady=10)
+
+array_entry = ttk.Entry(root, width=50)
+array_entry.pack(pady=5)
+
+# 2. Кнопка обработки
+process_button = ttk.Button(root, text="Обработать массив", command=process_array)
+process_button.pack(pady=10)
+
+# 3. Вывод результатов
+positive_result_label = ttk.Label(root, text="Неотрицательные элементы: ")
+positive_result_label.pack(pady=5)
+
+negative_result_label = ttk.Label(root, text="Отрицательные элементы: ")
+negative_result_label.pack(pady=5)
+
+
+root.mainloop()

+ 50 - 0
ОАиП/2024-25/36гр/2 сем/Д.Зачет/Dunaev.py

@@ -0,0 +1,50 @@
+import tkinter as tk
+from tkinter import ttk
+from tkinter import messagebox
+import random
+
+def generate_dominoes():
+    
+    dominoes = [(i, j) for i in range(7) for j in range(i, 7)]  # Создаем полный набор домино
+
+    if len(dominoes) < 2:
+        messagebox.showerror("Ошибка", "Недостаточно домино для выбора.")
+        return
+
+    domino1 = random.choice(dominoes)
+    domino2 = random.choice(dominoes)
+
+    while domino1 == domino2:
+        domino2 = random.choice(dominoes)
+
+    domino1_label.config(text=f"Первое домино: {domino1}")
+    domino2_label.config(text=f"Второе домино: {domino2}")
+
+    if domino1[0] == domino2[0] or domino1[0] == domino2[1] or \
+       domino1[1] == domino2[0] or domino1[1] == domino2[1]:
+        result_label.config(text="Домино можно составить!")
+    else:
+        result_label.config(text="Домино составить нельзя!")
+
+root = tk.Tk()
+root.title("Моделирование игры в домино")
+root.geometry("500x300")
+
+style = ttk.Style()
+style.configure("TLabel", padding=5, font=('Arial', 12))
+style.configure("TButton", padding=5, font=('Arial', 12))
+
+generate_button = ttk.Button(root, text="Сгенерировать домино", command=generate_dominoes)
+generate_button.pack(pady=20)
+
+domino1_label = ttk.Label(root, text="Первое домино: ")
+domino1_label.pack(pady=5)
+
+domino2_label = ttk.Label(root, text="Второе домино: ")
+domino2_label.pack(pady=5)
+
+result_label = ttk.Label(root, text="Результат: ")
+result_label.pack(pady=10)
+
+root.mainloop()
+

+ 25 - 0
ОАиП/2024-25/36гр/2 сем/Д.Зачет/baydukova.py

@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Tue Apr 15 10:52:18 2025
+
+@author: stud
+"""
+
+# Дан массив целых чисел. Вывести на экран сначала его четные элементы, затем нечетные
+import tkinter as tk
+
+def solution():
+    nums = entry.get().split()
+    evens = [n for n in nums if int(n) % 2 == 0]
+    odds = [n for n in nums if int(n) % 2 != 0]
+    output['text'] = 'Чётные: ' + ' '.join(evens) + '\nНечётные: ' + ' '.join(odds)
+    with open("результат.txt", 'w') as file: 
+        file.write(output['text'])
+root = tk.Tk()
+entry = tk.Entry(root)
+entry.pack()
+btn = tk.Button(root, text="Показать", command=solution)
+btn.pack()
+output = tk.Label(root, text="") 
+output.pack()
+root.mainloop()

+ 92 - 0
ОАиП/2024-25/36гр/2 сем/Д.Зачет/Дифзачет Зелинский Кирилл.py

@@ -0,0 +1,92 @@
+# 11.128. В массиве хранится информация о среднедневной тем-пературе  за  каждый  день  июля.  Определить  количество  самых прохладных дней в этом месяце.
+import tkinter as tk
+from tkinter import ttk
+from tkinter import filedialog
+from tkinter import messagebox
+import random
+
+class TemperatureAnalyzer:
+    def __init__(self, master):
+        self.master = master
+        master.title("Анализ температуры июля")
+
+        self.temperatures = []
+
+
+        self.data_label = ttk.Label(master, text="Данные о температуре (через запятую):")
+        self.data_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
+
+        self.temperatures_entry = ttk.Entry(master, width=40)
+        self.temperatures_entry.grid(row=1, column=0, padx=5, pady=5)
+
+        self.analyze_button = ttk.Button(master, text="Анализировать", command=self.analyze)
+        self.analyze_button.grid(row=2, column=0, padx=5, pady=5)
+
+        self.random_button = ttk.Button(master, text="Сгенерировать случайные данные", command=self.generate_random)
+        self.random_button.grid(row=3, column=0, padx=5, pady=5)
+
+        self.save_button = ttk.Button(master, text="Сохранить в файл", command=self.save_results)
+        self.save_button.grid(row=4, column=0, padx=5, pady=5)
+
+        self.result_label = ttk.Label(master, text="Результат:")
+        self.result_label.grid(row=5, column=0, padx=5, pady=5, sticky=tk.W)
+
+        self.result_text = tk.StringVar()
+        self.result_display = ttk.Label(master, textvariable=self.result_text)
+        self.result_display.grid(row=6, column=0, padx=5, pady=5, sticky=tk.W)
+
+    def solution(self, temperatures):
+        """Определяет количество самых прохладных дней в июле."""
+        if not temperatures:
+            return "Нет данных о температуре."
+
+        min_temp = min(temperatures)
+        coolest_days_count = temperatures.count(min_temp)
+
+        return f"Количество самых прохладных дней: {coolest_days_count}"
+
+    def analyze(self):
+        """Анализирует данные о температуре и отображает результат."""
+        try:
+            data = self.temperatures_entry.get()
+            self.temperatures = [float(temp.strip()) for temp in data.split(",") if temp.strip()]
+
+            if len(self.temperatures) != 31:
+                messagebox.showerror("Ошибка", "Пожалуйста, введите 31 значение температуры.")
+                return
+
+            result = self.solution(self.temperatures)
+            self.result_text.set(result)
+
+        except ValueError:
+            messagebox.showerror("Ошибка", "Неверный ввод. Пожалуйста, введите числа, разделенные запятыми.")
+        except Exception as e:
+            messagebox.showerror("Ошибка", f"Произошла непредвиденная ошибка: {e}")
+
+    def generate_random(self):
+        """Генерирует случайные данные о температуре для июля (31 день)."""
+        self.temperatures = [random.uniform(15, 30) for _ in range(31)]
+        self.temperatures_entry.delete(0, tk.END)
+        self.temperatures_entry.insert(0, ", ".join(f"{temp:.1f}" for temp in self.temperatures))
+
+    def save_results(self):
+        """Сохраняет данные о температуре и результат анализа в файл."""
+        filepath = filedialog.asksaveasfilename(defaultextension=".txt",
+                                                filetypes=[("Текстовые файлы", "*.txt"), ("Все файлы", "*.*")])
+
+        if filepath:
+            try:
+                with open(filepath, "w") as outfile:
+                    outfile.write("Данные о температуре:\n")
+                    outfile.write(", ".join(f"{temp:.1f}" for temp in self.temperatures) + "\n\n")
+                    outfile.write("Результат анализа:\n")
+                    outfile.write(self.result_text.get() + "\n")
+
+                messagebox.showinfo("Успех", f"Результаты сохранены в {filepath}")
+
+            except Exception as e:
+                messagebox.showerror("Ошибка", f"Не удалось сохранить результаты: {e}")
+
+root = tk.Tk()
+app = TemperatureAnalyzer(root)
+root.mainloop()

+ 31 - 0
ОАиП/2024-25/36гр/2 сем/Д.Зачет/Елисеенко_11.47.py

@@ -0,0 +1,31 @@
+import tkinter as tk
+from tkinter import messagebox
+
+
+def calculate_total_resistance():
+    try:
+        total_inverse = sum(1 / float(entry.get()) for entry in entries if entry.get())
+        if total_inverse == 0:
+            raise ValueError("Общее сопротивление не может быть бесконечным.")
+        total_resistance = 1 / total_inverse
+        messagebox.showinfo("Результат", f"Общее сопротивление цепи: {total_resistance:.2f} Ом")
+    except ValueError as e:
+        messagebox.showerror("Ошибка", str(e))
+
+root = tk.Tk()
+root.title("Расчет общего сопротивления цепи")
+
+entries = []
+
+for i in range(20):
+    label = tk.Label(root, text=f"Сопротивление элемента {i + 1} (Ом):")
+    label.grid(row=i, column=0, padx=10, pady=5)
+    
+    entry = tk.Entry(root)
+    entry.grid(row=i, column=1, padx=10, pady=5)
+    entries.append(entry)
+
+calculate_button = tk.Button(root, text="Рассчитать общее сопротивление", command=calculate_total_resistance)
+calculate_button.grid(row=20, columnspan=2, pady=10)
+
+root.mainloop()

+ 67 - 0
ОАиП/2024-25/36гр/2 сем/Д.Зачет/Кулага_10.3.py

@@ -0,0 +1,67 @@
+import tkinter as tk
+from tkinter import ttk
+from tkinter import messagebox
+import random
+
+def generate_numbers():
+
+    try:
+        a = int(a_entry.get())
+        b = int(b_entry.get())
+
+        if a >= b:
+            messagebox.showerror("Ошибка", "Значение 'a' должно быть меньше 'b'!")
+            return
+
+        m = random.randint(1, 20)
+        n = random.randint(1, 20)
+
+        integer_numbers = [random.randint(a, b) for _ in range(n)]
+        float_numbers = [random.uniform(0, n) for _ in range(m)]
+
+        m_label.config(text="m = " + str(m))
+        n_label.config(text="n = " + str(n))
+        integer_numbers_label.config(text="Целые числа: " + str(integer_numbers))
+        float_numbers_label.config(text="Вещественные числа: " + str(float_numbers))
+
+    except ValueError:
+        messagebox.showerror("Ошибка", "Некорректный ввод! Введите целые числа для a и b.")
+    except Exception as e:
+        messagebox.showerror("Ошибка", f"Произошла ошибка: {e}")
+
+root = tk.Tk()
+root.title("Генератор случайных чисел")
+root.geometry("600x500")
+
+style = ttk.Style()
+style.configure("TLabel", padding=5, font=('Arial', 12))
+style.configure("TButton", padding=5, font=('Arial', 12))
+style.configure("TEntry", padding=5, font=('Arial', 12))
+
+a_label = ttk.Label(root, text="Введите значение a:")
+a_label.pack(pady=5)
+a_entry = ttk.Entry(root, width=20)
+a_entry.pack(pady=5)
+
+b_label = ttk.Label(root, text="Введите значение b:")
+b_label.pack(pady=5)
+b_entry = ttk.Entry(root, width=20)
+b_entry.pack(pady=5)
+
+generate_button = ttk.Button(root, text="Сгенерировать числа", command=generate_numbers)
+generate_button.pack(pady=10)
+
+m_label = ttk.Label(root, text="m = ")
+m_label.pack(pady=5)
+
+n_label = ttk.Label(root, text="n = ")
+n_label.pack(pady=5)
+
+integer_numbers_label = ttk.Label(root, text="Целые числа: ")
+integer_numbers_label.pack(pady=5)
+
+float_numbers_label = ttk.Label(root, text="Вещественные числа: ")
+float_numbers_label.pack(pady=5)
+
+
+root.mainloop()

+ 59 - 0
ОАиП/2024-25/36гр/2 сем/Егоров работа 1.py

@@ -0,0 +1,59 @@
+import tkinter as tk
+from tkinter import messagebox
+import random
+
+def calculate_height_difference():
+    """Рассчитывает разницу в росте между самым высоким и самым низким."""
+    heights_str = height_entry.get()  # Получаем строку из поля ввода
+    try:
+        heights = [float(h.strip()) for h in heights_str.split(',')]  # Разделяем строку и преобразуем в числа
+
+        if len(heights) != 25:
+            messagebox.showerror("Ошибка", "Нужно ввести рост ровно 25 человек.")
+            return
+
+        highest_height = max(heights)
+        lowest_height = min(heights)
+        difference = highest_height - lowest_height
+
+        result_label.config(text=f"Разница: {difference:.2f} см.") # Отображаем результат
+
+    except ValueError:
+        messagebox.showerror("Ошибка", "Пожалуйста, введите корректные числа, разделенные запятыми.")
+
+
+def generate_random_heights():
+    """Генерирует случайные значения роста."""
+    random_heights = [round(random.uniform(160, 190), 1) for _ in range(25)]  # Генерация случайных значений (например, 160-190)
+    height_entry.delete(0, tk.END)  # Очищаем поле ввода
+    height_entry.insert(0, ", ".join(map(str, random_heights)))  # Заполняем поле ввода
+
+# Создаем главное окно
+window = tk.Tk()
+window.title("Разница в росте (v1.0)") # Добавим версию, как у студента
+
+# Добавим немного отступов и красоты
+window.geometry("400x250")  # Зададим размер окна
+
+#  Описание задания
+description_label = tk.Label(window, text="Введите рост 25 человек (см), разделяя значения запятыми.", wraplength=380, justify="left")  # wraplength - перенос текста, justify - выравнивание
+description_label.pack(pady=10)
+
+# Поле ввода для роста
+height_entry = tk.Entry(window, width=40)
+height_entry.pack(pady=5)
+
+# Кнопка для расчета
+calculate_button = tk.Button(window, text="Рассчитать", command=calculate_height_difference, bg="#4CAF50", fg="white")  # Добавим немного стиля
+calculate_button.pack(pady=10)
+
+# Кнопка для генерации случайных данных
+generate_button = tk.Button(window, text="Сгенерировать данные", command=generate_random_heights, bg="#008CBA", fg="white") # Добавим немного стиля
+generate_button.pack(pady=5)
+
+# Метка для отображения результата
+result_label = tk.Label(window, text="")
+result_label.pack(pady=10)
+
+# Запуск основного цикла
+window.mainloop()

+ 72 - 0
ОАиП/2024-25/36гр/2 сем/Егоров работа 2.py

@@ -0,0 +1,72 @@
+import tkinter as tk
+from tkinter import messagebox
+import random
+
+def calculate_grades():
+    """Подсчитывает количество хороших оценок (4 и 5)."""
+    try:
+        grades_str = grades_entry.get()  # Получаем оценки из текстового поля
+        grades = [int(grade.strip()) for grade in grades_str.split(',')]  # Разделяем и преобразуем в числа
+
+        if len(grades) != 10:
+            messagebox.showerror("Эм, ошибка!", "Нужно ввести ровно 10 оценок, а не больше и не меньше.")
+            return  # Выходим из функции, если что-то не так
+
+        # Считаем, сколько у нас четверок и пятерок
+        count_4 = grades.count(4)
+        count_5 = grades.count(5)
+
+        # Выводим результат на экран
+        result_text = f"Четверок: {count_4}\nПятерок: {count_5}"
+        result_label.config(text=result_text)
+
+    except ValueError:
+        messagebox.showerror("Ой-ой!", "Кажется, ввели что-то не то. Нужны только числа от 2 до 5, разделенные запятыми.")
+
+
+def generate_random_data():
+    """Создает случайные оценки для примера."""
+    random_marks = [random.randint(2, 5) for _ in range(10)]  # Генерируем 10 случайных оценок (2-5)
+    grades_entry.delete(0, tk.END)  # Очищаем поле
+    grades_entry.insert(0, ", ".join(map(str, random_marks))) # Заполняем строку случайными оценками
+
+
+# Создаем окошко
+main_window = tk.Tk()
+main_window.title("Считалка оценок (by Student)") # Пометка "by Student", типично
+main_window.geometry("380x280") # Немного увеличим окно
+
+# Описание, что нужно делать
+instruction_label = tk.Label(main_window,
+                             text="Введи свои оценки по 10 предметам (от 2 до 5), через запятую:",
+                             wraplength=360,
+                             justify="left") # Поясняющий текст
+instruction_label.pack(pady=10)
+
+# Поле для ввода оценок
+grades_entry = tk.Entry(main_window, width=40) # Создаем текстовое поле
+grades_entry.pack(pady=5)
+
+# Кнопка "Посчитать"
+calculate_button = tk.Button(main_window,
+                             text="Посчитать хорошие оценки!",
+                             command=calculate_grades,
+                             bg="#2196F3",
+                             fg="white") # Делаем кнопку синей, чтобы было красиво
+calculate_button.pack(pady=10)
+
+# Кнопка "Сгенерировать"
+generate_button = tk.Button(main_window,
+                          text="Сгенерировать пример оценок",
+                          command=generate_random_data,
+                          bg="#FFC107",
+                          fg="black") # Делаем кнопку желтой
+generate_button.pack(pady=5)
+
+#  Лейбл для вывода результата
+result_label = tk.Label(main_window, text="")
+result_label.pack(pady=10)
+
+
+# Запускаем программу
+main_window.mainloop()

+ 27 - 0
ОАиП/2024-25/36гр/2 сем/Елисеенко_11.45.py

@@ -0,0 +1,27 @@
+import tkinter as tk
+from tkinter import messagebox
+
+def calculate_total():
+    try:
+        total = sum(float(entry.get()) for entry in entries)
+        messagebox.showinfo("Результат", f"Общая стоимость всех предметов: {total:.2f}")
+    except ValueError:
+        messagebox.showerror("Ошибка", "Пожалуйста, введите корректные числовые значения.")
+
+root = tk.Tk()
+root.title("Расчет общей стоимости предметов")
+
+entries = []
+
+for i in range(12):
+    label = tk.Label(root, text=f"Стоимость предмета {i + 1}:")
+    label.grid(row=i, column=0, padx=10, pady=5)
+    
+    entry = tk.Entry(root)
+    entry.grid(row=i, column=1, padx=10, pady=5)
+    entries.append(entry)
+
+calculate_button = tk.Button(root, text="Рассчитать общую стоимость", command=calculate_total)
+calculate_button.grid(row=12, columnspan=2, pady=10)
+
+root.mainloop()

+ 41 - 0
ОАиП/2024-25/36гр/2 сем/Елисеенко_11.46.py

@@ -0,0 +1,41 @@
+import tkinter as tk
+from tkinter import messagebox
+
+class ResistanceCalculator:
+    def __init__(self, master):
+        self.master = master
+        self.master.title("Расчет общего сопротивления")
+
+        self.resistances = []
+
+        self.label = tk.Label(master, text="Введите сопротивление 20 элементов (через запятую):")
+        self.label.pack()
+
+        self.entry = tk.Entry(master, width=50)
+        self.entry.pack()
+
+        self.calculate_button = tk.Button(master, text="Рассчитать общее сопротивление", command=self.calculate_total_resistance)
+        self.calculate_button.pack()
+
+        self.result_label = tk.Label(master, text="")
+        self.result_label.pack()
+
+    def calculate_total_resistance(self):
+        try:
+            resistance_values = self.entry.get().split(',')
+            self.resistances = [float(value.strip()) for value in resistance_values]
+
+            if len(self.resistances) != 20:
+                raise ValueError("Должно быть ровно 20 значений.")
+
+            total_resistance = sum(self.resistances)
+
+            self.result_label.config(text=f"Общее сопротивление: {total_resistance:.2f} Ом")
+
+        except ValueError as e:
+            messagebox.showerror("Ошибка ввода", str(e))
+
+if __name__ == "__main__":
+    root = tk.Tk()
+    calculator = ResistanceCalculator(root)
+    root.mainloop()

+ 43 - 0
ОАиП/2024-25/36гр/2 сем/Шишкова.py

@@ -0,0 +1,43 @@
+import tkinter as tk
+from tkinter import ttk
+from tkinter import messagebox
+def solution(first_name, last_name):
+  return f"{first_name} {last_name}"
+def get_name():
+
+  first_name = first_name_entry.get()
+  last_name = last_name_entry.get()
+
+  if not first_name or not last_name:
+    messagebox.showerror("Îøèáêà", "Ïîæàëóéñòà, ââåäèòå èìÿ è ôàìèëèþ.")
+    return
+  full_name = solution(first_name, last_name)
+  result_label.config(text=f"Ïîëíîå èìÿ: {full_name}")
+  try:
+    with open("full_name.txt", "w") as f:
+      f.write(full_name)
+    messagebox.showinfo("Óñïåõ", "Ïîëíîå èìÿ çàïèñàíî â ôàéë full_name.txt")
+  except Exception as e:
+    messagebox.showerror("Îøèáêà çàïèñè â ôàéë", f"Ïðîèçîøëà îøèáêà ïðè çàïèñè â ôàéë: {e}")
+root = tk.Tk()
+root.title("Îáúåäèíåíèå èìåíè è ôàìèëèè")
+root.geometry("400x250")  # Çàäàåì ðàçìåð îêíà
+style = ttk.Style()
+style.configure("TLabel", padding=5, font=('Arial', 12))
+style.configure("TEntry", padding=5, font=('Arial', 12))
+style.configure("TButton", padding=5, font=('Arial', 12))
+first_name_label = ttk.Label(root, text="Èìÿ:")
+first_name_label.pack(pady=5)
+first_name_entry = ttk.Entry(root)
+first_name_entry.pack(pady=5)
+
+last_name_label = ttk.Label(root, text="Ôàìèëèÿ:")
+last_name_label.pack(pady=5)
+last_name_entry = ttk.Entry(root)
+last_name_entry.pack(pady=5)
+
+get_name_button = ttk.Button(root, text="Îáúåäèíèòü", command=get_name)
+get_name_button.pack(pady=10)
+result_label = ttk.Label(root, text="")
+result_label.pack(pady=5)
+root.mainloop()

+ 90 - 0
ОАиП/2024-25/36гр/Egorov

@@ -0,0 +1,90 @@
+import tkinter as tk
+from tkinter import messagebox
+
+def solution(heights):
+    """
+    Определяет, превышает ли средний рост мальчиков средний рост девочек более чем на 10 см.
+
+    Args:
+        heights: Список (или кортеж) с ростом учеников.
+                 Положительные числа - рост девочек, отрицательные - рост мальчиков.
+
+    Returns:
+        Строка с результатом.
+    """
+    boys_heights = [h for h in heights if h < 0]
+    girls_heights = [h for h in heights if h >= 0]
+
+    if not boys_heights:
+        boys_avg = 0  # Чтобы не было ошибки при делении на 0
+    else:
+        boys_avg = sum(boys_heights) / len(boys_heights)
+
+    if not girls_heights:
+        girls_avg = 0
+    else:
+        girls_avg = sum(girls_heights) / len(girls_heights)
+
+
+    difference = boys_avg - girls_avg
+    if difference > 10:
+        return f"Средний рост мальчиков ({boys_avg:.2f} см) превышает средний рост девочек ({girls_avg:.2f} см) более чем на 10 см (разница: {difference:.2f} см)."
+    else:
+        return f"Средний рост мальчиков ({boys_avg:.2f} см) не превышает средний рост девочек ({girls_avg:.2f} см) более чем на 10 см (разница: {difference:.2f} см)."
+
+
+def calculate_and_save():
+    """
+    Получает данные из полей ввода, выполняет расчет и сохраняет результат в файл.
+    """
+    try:
+        heights_str = heights_entry.get()
+        heights = [float(h.strip()) for h in heights_str.split(',') if h.strip()]
+
+        # Проверка, что введены хотя бы какие-то данные
+        if not heights:
+            messagebox.showerror("Ошибка", "Пожалуйста, введите хотя бы один рост.")
+            return
+
+        result = solution(heights)
+        result_label.config(text=result)  # Отображаем результат
+
+        with open("height_result.txt", "w", encoding="utf-8") as file:
+            file.write(result + "\n")
+        messagebox.showinfo("Успех", "Результат сохранен в файл height_result.txt")
+
+    except ValueError:
+        messagebox.showerror("Ошибка", "Пожалуйста, введите корректные числа, разделенные запятыми. Рост мальчиков - отрицательные числа, девочек - положительные.")
+    except Exception as e:
+        messagebox.showerror("Ошибка", f"Произошла ошибка: {e}")
+
+# Создаем главное окно
+window = tk.Tk()
+window.title("Рост учеников")
+window.geometry("450x300")
+
+# Инструкции
+instruction_label = tk.Label(window,
+                             text="Введите рост учеников, разделяя значения запятыми.\nРост мальчиков - отрицательные числа, девочек - положительные:",
+                             wraplength=430,
+                             justify="left")
+instruction_label.pack(pady=10)
+
+# Поле ввода для данных
+heights_entry = tk.Entry(window, width=40)
+heights_entry.pack(pady=5)
+
+# Кнопка для расчета и сохранения
+calculate_button = tk.Button(window,
+                             text="Рассчитать и сохранить",
+                             command=calculate_and_save,
+                             bg="#4CAF50",
+                             fg="white")
+calculate_button.pack(pady=10)
+
+# Метка для отображения результата
+result_label = tk.Label(window, text="")
+result_label.pack(pady=10)
+
+# Запуск цикла обработки событий
+window.mainloop()