4. Całe zadanie: Brenna w wyniki4.txt
Matura pokazowa marzec 2022 - Matura z informatyki: arkusze krok po kroku (Python)
Pełne rozwiązanie zadań 4.1-4.4 jednym programem na pliku `brenna.txt`: plik wyników `wyniki4.txt` i wykres do zadania 4.2.
rows = [] # (dzień, godzina, temperatura, opad)
with open("brenna.txt") as f:
f.readline() # wiersz nagłówkowy
for line in f:
moment, temp, precip = line.strip().split("\t")
day, hour = moment.split() # "01.01.2019 00:00"
rows.append((day, hour, float(temp.replace(",", ".")), float(precip.replace(",", "."))))
# 4.1 najniższa i najwyższa temperatura każdego dnia, potem największa różnica
low, high = {}, {}
for day, hour, temp, precip in rows:
low[day] = min(low.get(day, temp), temp)
high[day] = max(high.get(day, temp), temp)
best_day, amplitude = "", -1
for day in high:
if high[day] - low[day] > amplitude:
best_day, amplitude = day, high[day] - low[day]
amplitude = round(amplitude, 1)
# 4.2 suma i liczba pomiarów dla każdej godziny doby (0 = 00:00, ..., 23 = 23:00)
total, count = {}, {}
for day, hour, temp, precip in rows:
h = int(hour[:2])
total[h] = total.get(h, 0) + temp
count[h] = count.get(h, 0) + 1
averages = [round(total[h] / count[h], 2) for h in range(24)]
# 4.3 deszcz: temperatura i opad większe od zera; inny pomiar przerywa ciąg
best, best_start, best_end, best_sum = 0, "", "", 0
run, run_sum = 0, 0
for k, (day, hour, temp, precip) in enumerate(rows):
if temp > 0 and precip > 0:
run = run + 1
run_sum = round(run_sum + precip, 1)
if run > best:
first = rows[k - run + 1]
best, best_start, best_end, best_sum = run, first[0] + " " + first[1], day + " " + hour, run_sum
else:
run, run_sum = 0, 0
# 4.4 śnieg: temperatura <= 0 i opad > 0; deszcz zeruje sumę; suma > 4 cm = pługi w następnej godzinie
trips, per_day = 0, {}
snow, plough_next = 0, False
for day, hour, temp, precip in rows:
if plough_next: # godzina odśnieżania: jej opad pługi usuwają w tym samym cyklu
plough_next = False
trips = trips + 1
per_day[day] = per_day.get(day, 0) + 1
continue
if temp > 0 and precip > 0:
snow = 0
elif temp <= 0 and precip > 0:
snow = round(snow + precip, 1)
if snow > 4:
plough_next = True
snow = 0
busiest = ""
for day in per_day:
if busiest == "" or per_day[day] > per_day[busiest]:
busiest = day
with open("wyniki4.txt", "w", encoding="utf-8") as out:
print("4.1", best_day, amplitude, file=out)
print("4.2", file=out)
for h in range(24):
print(h, f"{averages[h]:.2f}", file=out)
print("4.3", best, best_start, best_end, best_sum, file=out)
print("4.4", trips, busiest, per_day[busiest], file=out)
print(open("wyniki4.txt", encoding="utf-8").read())
import matplotlib.pyplot as plt
plt.plot(range(24), averages, marker="o")
plt.xticks(range(24))
plt.xlabel("godzina doby")
plt.ylabel("średnia temperatura [°C]")
plt.title("Średnia temperatura w kolejnych godzinach doby (Brenna, 2019)")
plt.grid(True)
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.