4. Całe zadanie: EKOdom w wyniki4.txt
Matura próbna grudzień 2022 - Matura z informatyki: arkusze krok po kroku (Python)
Pełne rozwiązanie zadań 4.1-4.3 jednym programem na pliku `ekodom.txt`: plik wyników `wyniki4.txt` i wykres do zadania 4.2.
from datetime import date
days = [] # (data, litry zebranej wody)
with open("ekodom.txt") as f:
f.readline() # wiersz nagłówkowy
for line in f:
text, water = line.split("\t")
day = date(int(text[6:10]), int(text[3:5]), int(text[0:2])) # dd.mm.rrrr
days.append((text, day, int(water)))
def garden(day, dry):
# podlewanie od 1.04 do 30.09 w 5., 10., 15., ... dniu bez opadów
return date(day.year, 4, 1) <= day <= date(day.year, 9, 30) and dry > 0 and dry % 5 == 0
# 4.1a najdłuższy ciąg dni bez opadów (0 litrów)
best, best_start, best_end = 0, "", ""
run = 0
for k, (text, day, water) in enumerate(days):
if water == 0:
run = run + 1
if run > best:
best, best_start, best_end = run, days[k - run + 1][0], text
else:
run = 0
# 4.1b licznik dni bez opadów zeruje deszcz
watering, dry = 0, 0
for text, day, water in days:
dry = dry + 1 if water == 0 else 0
if garden(day, dry):
watering = watering + 1
# 4.2 suma zebranej wody w miesiącach
MONTHS = ["styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień",
"wrzesień", "październik", "listopad", "grudzień"]
monthly = {}
for text, day, water in days:
month = MONTHS[day.month - 1]
monthly[month] = monthly.get(month, 0) + water
# 4.3 symulacja: rano deszcz trafia do zbiornika, potem zużycie; brak wody = wodociąg
tank = 5000
short_days, from_mains, dry = 0, 0, 0
for text, day, water in days:
tank = tank + water
dry = dry + 1 if water == 0 else 0
use = 260 if day.weekday() == 2 else 190 # weekday(): 0 = poniedziałek, 2 = środa
if garden(day, dry):
use = use + 300
if tank < use:
short_days = short_days + 1
from_mains = from_mains + use - tank
tank = 0
else:
tank = tank - use
with open("wyniki4.txt", "w", encoding="utf-8") as out:
print("4.1a", best, best_start, best_end, file=out)
print("4.1b", watering, file=out)
print("4.2", file=out)
for month, litres in monthly.items():
print(month, litres, file=out)
print("4.3", short_days, from_mains, file=out)
print(open("wyniki4.txt", encoding="utf-8").read())
import matplotlib.pyplot as plt
plt.bar(list(monthly), list(monthly.values()))
plt.xticks(rotation=45)
plt.xlabel("miesiąc")
plt.ylabel("zebrana woda [litry]")
plt.title("Retencja wody deszczowej w EKOdomu w 2022 roku")
plt.tight_layout()
plt.show()Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.
Wszystkie lekcje kursu Matura z informatyki: arkusze krok po kroku·Zaloguj się, aby zapisać postęp na koncie.