PY_I_R_W13A_M08 Pliki na maturze
Analiza wyników sportowych
W pliku tekstowym wyniki.txt zapisano wyniki zawodników w zawodach sportowych.
Każda linia zawiera imię zawodnika i uzyskany wynik (liczbę punktów), np.:
Ania 45
Tomek 38
Kasia 50
Bartek 41
Ola 47
Napisz program w języku Python, który:
Wczyta dane z pliku
wyniki.txt.Obliczy:
średni wynik wszystkich zawodników,
najwyższy wynik i imię zwycięzcy,
najniższy wynik i imię zawodnika z ostatniego miejsca.
Wyniki zapisze do pliku
raport_wyniki.txt.
Plik wyniki.txt
Przycisk do pobrania pliku TXT z treścią zadania. Pobierz załącznik
Przykładowe rozwiązanie:
# Wczytanie danych z pliku
with open("wyniki.txt", "r") as plik:
linie = plik.readlines()
zawodnicy = []
for linia in linie:
czesci = linia.strip().split()
imie = czesci[0]
wynik = int(czesci[1])
zawodnicy.append((imie, wynik))
# Obliczenie średniej
suma_wynikow = 0
for _, wynik in zawodnicy:
suma_wynikow += wynik
srednia = suma_wynikow / len(zawodnicy)
# Szukanie najlepszego i najsłabszego zawodnika
najlepszy = zawodnicy[0]
najsłabszy = zawodnicy[0]
for zawodnik in zawodnicy:
if zawodnik[1] > najlepszy[1]:
najlepszy = zawodnik
if zawodnik[1] < najsłabszy[1]:
najsłabszy = zawodnik
# Zapis wyników do nowego pliku
with open("raport_wyniki.txt", "w") as raport:
raport.write("RAPORT WYNIKÓW SPORTOWYCH\n")
raport.write("==========================\n")
for imie, wynik in zawodnicy:
raport.write(f"{imie}: {wynik} pkt\n")
raport.write("\n")
raport.write(f"Średni wynik: {srednia:.2f} pkt\n")
raport.write(f"Najlepszy zawodnik: {najlepszy[0]} ({najlepszy[1]} pkt)\n")
raport.write(f"Najsłabszy zawodnik: {najsłabszy[0]} ({najsłabszy[1]} pkt)\n")
print("Raport zapisano w pliku 'raport_wyniki.txt'")Analiza temperatur z pliku
W pliku tekstowym temperatury.txt znajdują się średnie temperatury dzienne z jednego tygodnia (7 dni).
Każda linia zawiera nazwę dnia tygodnia oraz temperaturę w stopniach Celsjusza, np.:
Poniedzialek 12
Wtorek 15
Sroda 14
Czwartek 18
Piatek 20
Sobota 22
Niedziela 19
Napisz program w języku Python, który:
Wczyta dane z pliku
temperatury.txt.Obliczy:
średnią temperaturę tygodnia,
najwyższą temperaturę i dzień, w którym wystąpiła,
najniższą temperaturę i dzień, w którym wystąpiła.
Wyniki zapisze do nowego pliku tekstowego
raport_temperatur.txt.Porównaj swoje rozwiązanie z tym zapisanym w odpowiedzi. Wykorzystano w nim funkcje lambda
Plik temperatury.txt:
Przycisk do pobrania pliku TXT z treścią zadania. Pobierz załącznik
Przykładowe rozwiązanie:
# Wczytywanie danych z pliku
with open("temperatury.txt", "r") as plik:
linie = plik.readlines()
dane = []
for linia in linie:
czesci = linia.strip().split()
dzien = czesci[0]
temperatura = float(czesci[1])
dane.append((dzien, temperatura))
# Obliczenia
srednia = sum(temp for _, temp in dane) / len(dane)
najwyzsza = max(dane, key=lambda x: x[1])
najmniejsza = min(dane, key=lambda x: x[1])
# Zapis wyników do nowego pliku
with open("raport_temperatur.txt", "w") as raport:
raport.write("RAPORT TEMPERATUR TYGODNIA\n")
raport.write("============================\n")
for dzien, temp in dane:
raport.write(f"{dzien}: {temp}°C\n")
raport.write("\n")
raport.write(f"Średnia temperatura tygodnia: {srednia:.2f}°C\n")
raport.write(f"Najwyższa temperatura: {najwyzsza[1]}°C ({najwyzsza[0]})\n")
raport.write(f"Najniższa temperatura: {najmniejsza[1]}°C ({najmniejsza[0]})\n")
print("Raport zapisano w pliku 'raport_temperatur.txt'")Analiza wyników biegu z pliku CSV
W pliku bieg.csv zapisano wyniki zawodników biegu na 10 km.
Każdy wiersz zawiera imię zawodnika i czas ukończenia biegu w minutach, np.: Imię,Czas
Ania,55
Tomek,62
Kasia,49
Bartek,58
Ola,53
Napisz program w języku Python, który:
Wczyta dane z pliku
bieg.csv.Obliczy:
średni czas biegu,
imię zawodnika z najlepszym czasem (czyli najkrótszym),
imię zawodnika z najgorszym czasem (czyli najdłuższym).
Zapisze wyniki do pliku
raport_bieg.csvw postaci:
Plik bieg.csv
Przycisk do pobrania pliku TXT z treścią zadania. Pobierz załącznik
Przykładowe rozwiązanie
import csv
# Wczytanie danych z pliku CSV
zawodnicy = []
with open("bieg.csv", "r") as plik:
reader = csv.reader(plik)
next(reader) # pomijamy nagłówek
for wiersz in reader:
print(wiersz)
imie = wiersz[0]
czas = int(wiersz[1])
zawodnicy.append((imie, czas))
# Obliczenia
suma_czasow = 0
for _, czas in zawodnicy:
suma_czasow += czas
sredni_czas = suma_czasow / len(zawodnicy)
# Szukanie najlepszego (najmniejszy czas) i najgorszego zawodnika
najlepszy = zawodnicy[0]
najgorszy = zawodnicy[0]
for zawodnik in zawodnicy:
if zawodnik[1] < najlepszy[1]:
najlepszy = zawodnik
if zawodnik[1] > najgorszy[1]:
najgorszy = zawodnik
# Zapis raportu do pliku CSV
with open("raport_bieg.csv", "w", newline="") as raport:
writer = csv.writer(raport)
writer.writerow(["Statystyka", "Wynik"])
writer.writerow(["Sredni czas", f"{sredni_czas:.2f} minut"])
writer.writerow(["Najlepszy zawodnik", f"{najlepszy[0]} ({najlepszy[1]} minut)"])
writer.writerow(["Najgorszy zawodnik", f"{najgorszy[0]} ({najgorszy[1]} minut)"])
print("Raport zapisano w pliku 'raport_bieg.csv'")Rozszerzona analiza wyników
Na podstawie danych z ćwiczenia 3 dokonaj rozszerzonej analizy wyników. Napisz program w języku Python, który:
wypisze uporządkowaną listę zawodników rosnąco według czasu,
dla każdego zawodnika obliczy różnicę względem średniego czasu,
poda liczbę zawodników, którzy ukończyli bieg poniżej 55 minut,
wyniki zapisze do pliku
raport_bieg_rozszerzony.csv.
Przykładowe rozwiazanie
import csv
# 1️Wczytanie danych z pliku CSV
zawodnicy = []
with open("bieg.csv", "r") as plik:
reader = csv.reader(plik)
next(reader) # pomijamy nagłówek
for wiersz in reader:
imie = wiersz[0]
czas = int(wiersz[1])
zawodnicy.append((imie, czas))
# 2️Obliczenie średniego czasu
suma_czasow = 0
for _, czas in zawodnicy:
suma_czasow += czas
sredni_czas = suma_czasow / len(zawodnicy)
# 3️Obliczenie różnicy od średniego czasu dla każdego zawodnika
zawodnicy_roznice = []
for imie, czas in zawodnicy:
roznica = czas - sredni_czas
zawodnicy_roznice.append((imie, czas, roznica))
# 4️Posortowanie zawodników według czasu (rosnąco)
for i in range(len(zawodnicy_roznice) - 1):
for j in range(i + 1, len(zawodnicy_roznice)):
if zawodnicy_roznice[j][1] < zawodnicy_roznice[i][1]:
zawodnicy_roznice[i], zawodnicy_roznice[j] = zawodnicy_roznice[j], zawodnicy_roznice[i]
# 5️Zliczanie zawodników z czasem poniżej 55 minut
ponizej_55 = 0
for _, czas, _ in zawodnicy_roznice:
if czas < 55:
ponizej_55 += 1
# 6️Zapis pełnego raportu do pliku CSV
with open("raport_bieg_rozszerzony.csv", "w", newline="") as raport:
writer = csv.writer(raport)
writer.writerow(["Imie", "Czas (minuty)", "Roznica od sredniej (minuty)"])
for imie, czas, roznica in zawodnicy_roznice:
znak = "+" if roznica > 0 else ""
writer.writerow([imie, czas, f"{znak}{roznica:.2f}"])
writer.writerow([])
writer.writerow(["Sredni czas", f"{sredni_czas:.2f}"])
writer.writerow(["Liczba zawodnikow ponizej 55 minut", ponizej_55])
print("Rozszerzony raport zapisano w pliku 'raport_bieg_rozszerzony.csv'")