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