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