6. Całe zadanie: plik wyniki6.txt

Matura maj 2023 - Matura z informatyki: arkusze krok po kroku (Python)

Pełne rozwiązanie zadań 6.1-6.4 jednym programem na pliku `owoce.txt`: plik wyników `wyniki6.txt` i wykres do zadania 6.1.

deliveries = []
with open("owoce.txt") as f:
    f.readline()  # wiersz nagłówkowy
    for line in f:
        day, raspberries, strawberries, currants = line.split("\t")
        deliveries.append((day, int(raspberries), int(strawberries), int(currants)))

# 6.1 miesiąc z daty dd.mm.rrrr to znaki 3-4
MONTHS = {"05": "maj", "06": "czerwiec", "07": "lipiec", "08": "sierpień", "09": "wrzesień"}
summary = {}
for day, raspberries, strawberries, currants in deliveries:
    month = MONTHS[day[3:5]]
    if month not in summary:
        summary[month] = [0, 0, 0]
    summary[month][0] += raspberries
    summary[month][1] += strawberries
    summary[month][2] += currants

# 6.2 dni, w których porzeczek było więcej niż malin i więcej niż truskawek
currant_days = sum(1 for day, r, s, c in deliveries if c > r and c > s)

# 6.3 i 6.4 symulacja: zapas po porannej dostawie, konfitura z dwóch owoców, których jest najwięcej
JAMS = {(0, 1): "malinowo-truskawkowe", (0, 2): "malinowo-porzeczkowe", (1, 2): "truskawkowo-porzeczkowe"}
stock = [0, 0, 0]  # maliny, truskawki, porzeczki w przetwórni
times = {name: 0 for name in JAMS.values()}
kilograms = {name: 0 for name in JAMS.values()}
for day, raspberries, strawberries, currants in deliveries:
    stock[0] += raspberries
    stock[1] += strawberries
    stock[2] += currants
    smallest = stock.index(min(stock))  # tego owocu dziś nie bierzemy
    pair = tuple(k for k in range(3) if k != smallest)
    used = min(stock[pair[0]], stock[pair[1]])  # proporcja 1:1, cały mniejszy zapas
    stock[pair[0]] -= used
    stock[pair[1]] -= used
    times[JAMS[pair]] += 1
    kilograms[JAMS[pair]] += used  # 1 kg konfitury = po 1 kg obu owoców

with open("wyniki6.txt", "w", encoding="utf-8") as out:
    print("6.1", file=out)
    for month, kg in summary.items():
        print(month, *kg, file=out)
    print("6.2", currant_days, file=out)
    print("6.3", file=out)
    for name in sorted(times):
        print(name, times[name], file=out)
    print("6.4", file=out)
    for name in sorted(kilograms):
        print(name, kilograms[name], file=out)

print(open("wyniki6.txt", encoding="utf-8").read())

# wykres kolumnowy grupowany: trzy kolumny (owoce) przy każdym miesiącu
import matplotlib.pyplot as plt

months = list(summary)
width = 0.25
for k, fruit in enumerate(["maliny", "truskawki", "porzeczki"]):
    positions = [m + (k - 1) * width for m in range(len(months))]  # przesunięcie serii
    plt.bar(positions, [summary[month][k] for month in months], width, label=fruit)
plt.xticks(range(len(months)), months)
plt.xlabel("miesiąc")
plt.ylabel("dostawy [kg]")
plt.title("Dostawy owoców do przetwórni w 2020 roku")
plt.legend()
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.