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()