Egorov 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import tkinter as tk
  2. from tkinter import messagebox
  3. def solution(heights):
  4. """
  5. Определяет, превышает ли средний рост мальчиков средний рост девочек более чем на 10 см.
  6. Args:
  7. heights: Список (или кортеж) с ростом учеников.
  8. Положительные числа - рост девочек, отрицательные - рост мальчиков.
  9. Returns:
  10. Строка с результатом.
  11. """
  12. boys_heights = [h for h in heights if h < 0]
  13. girls_heights = [h for h in heights if h >= 0]
  14. if not boys_heights:
  15. boys_avg = 0 # Чтобы не было ошибки при делении на 0
  16. else:
  17. boys_avg = sum(boys_heights) / len(boys_heights)
  18. if not girls_heights:
  19. girls_avg = 0
  20. else:
  21. girls_avg = sum(girls_heights) / len(girls_heights)
  22. difference = boys_avg - girls_avg
  23. if difference > 10:
  24. return f"Средний рост мальчиков ({boys_avg:.2f} см) превышает средний рост девочек ({girls_avg:.2f} см) более чем на 10 см (разница: {difference:.2f} см)."
  25. else:
  26. return f"Средний рост мальчиков ({boys_avg:.2f} см) не превышает средний рост девочек ({girls_avg:.2f} см) более чем на 10 см (разница: {difference:.2f} см)."
  27. def calculate_and_save():
  28. """
  29. Получает данные из полей ввода, выполняет расчет и сохраняет результат в файл.
  30. """
  31. try:
  32. heights_str = heights_entry.get()
  33. heights = [float(h.strip()) for h in heights_str.split(',') if h.strip()]
  34. # Проверка, что введены хотя бы какие-то данные
  35. if not heights:
  36. messagebox.showerror("Ошибка", "Пожалуйста, введите хотя бы один рост.")
  37. return
  38. result = solution(heights)
  39. result_label.config(text=result) # Отображаем результат
  40. with open("height_result.txt", "w", encoding="utf-8") as file:
  41. file.write(result + "\n")
  42. messagebox.showinfo("Успех", "Результат сохранен в файл height_result.txt")
  43. except ValueError:
  44. messagebox.showerror("Ошибка", "Пожалуйста, введите корректные числа, разделенные запятыми. Рост мальчиков - отрицательные числа, девочек - положительные.")
  45. except Exception as e:
  46. messagebox.showerror("Ошибка", f"Произошла ошибка: {e}")
  47. # Создаем главное окно
  48. window = tk.Tk()
  49. window.title("Рост учеников")
  50. window.geometry("450x300")
  51. # Инструкции
  52. instruction_label = tk.Label(window,
  53. text="Введите рост учеников, разделяя значения запятыми.\nРост мальчиков - отрицательные числа, девочек - положительные:",
  54. wraplength=430,
  55. justify="left")
  56. instruction_label.pack(pady=10)
  57. # Поле ввода для данных
  58. heights_entry = tk.Entry(window, width=40)
  59. heights_entry.pack(pady=5)
  60. # Кнопка для расчета и сохранения
  61. calculate_button = tk.Button(window,
  62. text="Рассчитать и сохранить",
  63. command=calculate_and_save,
  64. bg="#4CAF50",
  65. fg="white")
  66. calculate_button.pack(pady=10)
  67. # Метка для отображения результата
  68. result_label = tk.Label(window, text="")
  69. result_label.pack(pady=10)
  70. # Запуск цикла обработки событий
  71. window.mainloop()