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.