Дифзачет Зелинский Кирилл.py 4.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # 11.128. В массиве хранится информация о среднедневной тем-пературе за каждый день июля. Определить количество самых прохладных дней в этом месяце.
  2. import tkinter as tk
  3. from tkinter import ttk
  4. from tkinter import filedialog
  5. from tkinter import messagebox
  6. import random
  7. class TemperatureAnalyzer:
  8. def __init__(self, master):
  9. self.master = master
  10. master.title("Анализ температуры июля")
  11. self.temperatures = []
  12. self.data_label = ttk.Label(master, text="Данные о температуре (через запятую):")
  13. self.data_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
  14. self.temperatures_entry = ttk.Entry(master, width=40)
  15. self.temperatures_entry.grid(row=1, column=0, padx=5, pady=5)
  16. self.analyze_button = ttk.Button(master, text="Анализировать", command=self.analyze)
  17. self.analyze_button.grid(row=2, column=0, padx=5, pady=5)
  18. self.random_button = ttk.Button(master, text="Сгенерировать случайные данные", command=self.generate_random)
  19. self.random_button.grid(row=3, column=0, padx=5, pady=5)
  20. self.save_button = ttk.Button(master, text="Сохранить в файл", command=self.save_results)
  21. self.save_button.grid(row=4, column=0, padx=5, pady=5)
  22. self.result_label = ttk.Label(master, text="Результат:")
  23. self.result_label.grid(row=5, column=0, padx=5, pady=5, sticky=tk.W)
  24. self.result_text = tk.StringVar()
  25. self.result_display = ttk.Label(master, textvariable=self.result_text)
  26. self.result_display.grid(row=6, column=0, padx=5, pady=5, sticky=tk.W)
  27. def solution(self, temperatures):
  28. """Определяет количество самых прохладных дней в июле."""
  29. if not temperatures:
  30. return "Нет данных о температуре."
  31. min_temp = min(temperatures)
  32. coolest_days_count = temperatures.count(min_temp)
  33. return f"Количество самых прохладных дней: {coolest_days_count}"
  34. def analyze(self):
  35. """Анализирует данные о температуре и отображает результат."""
  36. try:
  37. data = self.temperatures_entry.get()
  38. self.temperatures = [float(temp.strip()) for temp in data.split(",") if temp.strip()]
  39. if len(self.temperatures) != 31:
  40. messagebox.showerror("Ошибка", "Пожалуйста, введите 31 значение температуры.")
  41. return
  42. result = self.solution(self.temperatures)
  43. self.result_text.set(result)
  44. except ValueError:
  45. messagebox.showerror("Ошибка", "Неверный ввод. Пожалуйста, введите числа, разделенные запятыми.")
  46. except Exception as e:
  47. messagebox.showerror("Ошибка", f"Произошла непредвиденная ошибка: {e}")
  48. def generate_random(self):
  49. """Генерирует случайные данные о температуре для июля (31 день)."""
  50. self.temperatures = [random.uniform(15, 30) for _ in range(31)]
  51. self.temperatures_entry.delete(0, tk.END)
  52. self.temperatures_entry.insert(0, ", ".join(f"{temp:.1f}" for temp in self.temperatures))
  53. def save_results(self):
  54. """Сохраняет данные о температуре и результат анализа в файл."""
  55. filepath = filedialog.asksaveasfilename(defaultextension=".txt",
  56. filetypes=[("Текстовые файлы", "*.txt"), ("Все файлы", "*.*")])
  57. if filepath:
  58. try:
  59. with open(filepath, "w") as outfile:
  60. outfile.write("Данные о температуре:\n")
  61. outfile.write(", ".join(f"{temp:.1f}" for temp in self.temperatures) + "\n\n")
  62. outfile.write("Результат анализа:\n")
  63. outfile.write(self.result_text.get() + "\n")
  64. messagebox.showinfo("Успех", f"Результаты сохранены в {filepath}")
  65. except Exception as e:
  66. messagebox.showerror("Ошибка", f"Не удалось сохранить результаты: {e}")
  67. root = tk.Tk()
  68. app = TemperatureAnalyzer(root)
  69. root.mainloop()