Python/Lab_7/Lab_6.py

82 lines
3.7 KiB
Python
Raw Permalink Normal View History

2024-03-09 17:38:18 +02:00
import random
from collections import Counter
from datetime import date
from calendar import monthrange
class Month:
def __init__(self, name, m_number):
days = monthrange(date.today().year, m_number)[1]
self.name = name
self.days = [(random.randint( 25 - 8*abs(7-m_number), 50 - 8*abs(7-m_number)), random.choice(["Дощ", "Сонце", "Хмара"])) for i in range(days)]
def count_weather(self):
return Counter([i[1] for i in self.days])
def avg_temp(self):
return round(sum([i[0] for i in self.days]) / len([i[0] for i in self.days]), 2)
def max_temp(self):
return max([i[0] for i in self.days])
def min_temp(self):
return min([i[0] for i in self.days])
month_names = ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"]
year = {month_names[m_number]: Month(month_names[m_number], m_number+1) for m_number in range(12)}
valid_actions = ["Погода", "Середня температура", "Мінімальна температура", "Максимальна температура", "Місяць", "Вихід"]
if __name__ == "__main__":
while True:
while True:
month_name = input("\nВведіть назву місяця: ")
if month_name not in month_names:
print("\nТакого місяця не існує, спробуйте ще раз.")
continue
else:
break
print("\nОберіть бажану дію:\n"
" Погода - дізнатися кількість сонячних, хмарних і дощових днів.\n"
" Середня температура - дізнатися середню температуру за місяць.\n"
" Мінімальна температура - дізнатися мінімальну температуру за місяць.\n"
" Максимальна температура - дізнатися максимальну температуру за місяць.\n"
" Місяць - змініти введений місяць.\n"
" Вихід - завершити роботу програми.\n"
)
while True:
action = input("> ")
if action not in valid_actions:
print("\nТакої дії не існує.\n")
continue
if action == valid_actions[0]:
print(f"\nСонячних днів: {year[month_name].count_weather()['Сонце']}")
print(f"Хмарних днів: {year[month_name].count_weather()['Хмара']}")
print(f"Дощових днів: {year[month_name].count_weather()['Дощ']}\n")
continue
elif action == valid_actions[1]:
print(f"\nСередня температура цього місяця: {year[month_name].avg_temp()}°\n")
continue
elif action == valid_actions[2]:
print(f"\nМінімальна температура цього місяця: {year[month_name].min_temp()}°\n")
continue
elif action == valid_actions[3]:
print(f"\nМаксимальна температура цього місяця: {year[month_name].max_temp()}°\n")
continue
elif action == valid_actions[4]:
break
else:
print("\nВихід з програми.\n")
exit()