1.6. Moduły i zbiory
Informacja
W tym przykładzie zobaczysz, jak korzystać z modułów, a także poznasz i wykorzystasz zbiór, kolejną obok list i krotek złożoną strukturę danych.
1.6.1. Zadanie
Napisz program oceny.py, który umożliwi wprowadzanie ocen z wybranego / wprowadzonego przedmiotu,
następnie policzy i wyświetla średnią, medianę i odchylenie standardowe wprowadzonych ocen.
Funkcje pomocnicze i statystyczne umieść w osobnym module.
Dane:
przedmiot– nazwa dodawanego przedmiotu i/lub przedmiotu, z którego będą wprowadzane oceny, ciąg znaków pobierany z klawiatury,ocena– ocena pobierana z klawiatury, liczba całkowita.
Wynik:
– wypisana na ekranie średnia, mediana i odchylenie podanych ocen, np.:
Średnia: 3.62
Mediana: 3.50
Odchylenie: 1.58
1from oceny_funkcje import wypisz, srednia, mediana, odchylenie
2
3
4def main():
5 przedmioty = {'polski', 'angielski'} # definicja zbioru
6 wypisz(przedmioty, 'Lista przedmiotów zawiera: ')
7
8 while True:
9 przedmiot = input('Podaj nazwę przedmiotu (min. 2 znaki) lub ENTER, żeby zakończyć: ').strip()
10 if len(przedmiot) > 1:
11 if przedmiot not in przedmioty: # jeżeli przedmiotu nie ma w zbiorze
12 przedmioty.add(przedmiot) # dodaj przedmiot do zbioru
13 else:
14 print('Ten przedmiot już mamy :-)')
15 else:
16 wypisz(przedmioty, '\nTwoje przedmioty: ')
17 przedmiot = input('\nZ którego przedmiotu wprowadzisz oceny? ')
18 if przedmiot not in przedmioty: # jeżeli przedmiotu nie ma w zbiorze
19 print('Brak takiego przedmiotu, możesz go dodać.')
20 else:
21 break # przerwanie pętli
22
23 oceny = [] # pusta lista ocen
24 ocena = None # zmienna sterująca pętlą i do pobierania ocen
25 while not ocena:
26 try:
27 ocena = int(input('Podaj ocenę (1-6) lub 0, aby zakończyć: '))
28 if 0 < ocena < 7:
29 oceny.append(ocena)
30 elif ocena == 0:
31 break
32 else:
33 print('Błędna ocena.')
34 ocena = None
35 except ValueError:
36 print('Błędne dane!')
37
38 wypisz(oceny, przedmiot.capitalize() + ' - wprowadzone oceny: ')
39 s = srednia(oceny)
40 m = mediana(oceny)
41 o = odchylenie(oceny, s)
42 print()
43 print(f'Średnia: {s:8.2f}')
44 print(f'Mediana: {m:8.2f}')
45 print(f'Odchylenie: {o:5.2f}')
46 return 0
47
48
49if __name__ == '__main__':
50 import sys
51 sys.exit(main())
Moduły
Moduły to pliki zawierające często wykorzystywane stałe, funkcje i klasy. Wiele modułów, tzw. wbudowanych,
jest częścią standardowej instalacji Pythona, programista może również tworzyć własne moduły.
Dostęp do zawartości modułu uzyskujemy dzięki importom. Nazwa modułu to nazwa pliku z kodem bez rozszerzenia .py.
Moduł musi znajdować się w ścieżce przeszukiwania, aby import był udany. Przykłady:
import math– import całego modułu, dostęp do zawartości uzyskujemy dzięki notacji z kropką, np.math.pilubmath.sqrt(),from math import pi, sqrt– import tylko wybranych elementów, których nazw używamy bezpośrednio, np.:pole = pi * r**2,c = sqrt(a**2 + b**2).
Informacja
W przypadku prostych programów zapisuj moduły w tym samym katalogu co program główny.
Zbiór
Do przechowywania nazw przedmiotów wykorzystujemy zbiór, czyli nieuporządkowany zestaw niepowtarzalnych (!) elementów. Operacje na zbiorach:
przedmioty = {'polski', 'angielski'}– tworzy zbiór, można również używać funkcjiset(sekwencja);.add(x)– dodaje element x do zbioru, jeżeli go w zbiorze nie ma;element (not) in kolekcji– operator zawierania(not) insprawdza, czy podany element jest lub nie w kolekcji, tj. liście, zbiorze, krotce (tupli) lub innej sekwencji; wynikiem jest prawda lub fałsz.
Informacja
Porządek elementów w zbiorach, inaczej niż w listach i krotkach, jest nieokreślony.
Przedmioty pobieramy w nieskończonej pętli warunkowej while True. Jeżeli użytkownik poda przynajmniej 2-znakową
nazwę przedmiotu (if len(przedmiot) > 1:) i przedmiotu nie ma w zbiorze (if przedmiot not in przedmioty:),
zostanie on dodany. W przeciwnym razie wypisujemy przedmioty zawarte w zbiorze i pobieramy nazwę przedmiotu, z którego
użytkownik chce wprowadzić oceny. Jeżeli podanej nazwy nie ma w zbiorze, wypisujemy odpowiedni komunikat,
jeżeli jest, przerywamy pętlę instrukcją break i przechodzimy do wprowadzania ocen.
W drugiej pętli warunkowej pobieramy oceny, dopóki użytkownik nie wprowadzi 0 (zera).
Blok try...except pozwala przechwycić wyjątki, czyli w tym przypadku błąd przekształcenia
wartości na liczbę całkowitą. Jeżeli funkcja int() zwróci wyjątek, wykonywane są instrukcje
w bloku except ValueError:, w przeciwnym razie po sprawdzeniu poprawności oceny dodajemy ją
do listy: oceny.append(ocena).
Metoda .capitalize() zmienia pierwszy znak napisu na wielką literę.
Do wypisania komunikatów używamy sformatowanych ciągów znaków (f-strings) i specyfikatorów formatu.
Zapis {s:8.2f} oznacza, że wartość zmiennej s ma zostać wypisana w polu o szerokości 8 znaków
jako liczba zmiennoprzecinkowa z dokładnością do dwóch miejsc po przecinku.
Więcej informacji nt. formatowania danych wyjściowych: PyFormat.
Funkcje wykorzystywane w programie oceny, umieszczamy w osobnym pliku ocenyfun.py.
1"""
2 Moduł oceny_funkcje zawiera funkcje wykorzystywane w pliku oceny.py
3"""
4
5import math # zaimportuj moduł matematyczny
6
7
8def wypisz(sekwencja, kom='Sekwencja zawiera: '):
9 print(kom)
10 for e in sekwencja:
11 print(e, end=' ')
12 print()
13
14
15def srednia(oceny):
16 suma = sum(oceny)
17 return suma / len(oceny)
18
19
20def mediana(oceny):
21 """
22 Jeżeli liczba ocen jest parzysta, medianą jest średnia arytmetyczna
23 dwóch środkowych ocen. Jeżeli liczba jest nieparzysta, mediana równa
24 się elementowi środkowemu uporządkowanej rosnąco listy ocen.
25 """
26 oceny.sort() # sortowanie niemalejące
27 print(f'Oceny: {oceny}')
28 if len(oceny) % 2 == 0: # parzysta ilość ocen
29 half = len(oceny) // 2
30 # można tak:
31 # return float(oceny[half-1]+oceny[half]) / 2
32 # albo tak:
33 return float(sum(oceny[half-1:half+1])) / 2
34 else: # nieparzysta ilość ocen
35 return oceny[len(oceny) // 2]
36
37
38def wariancja(oceny, srednia):
39 """
40 Wariancja to suma kwadratów różnicy każdej oceny i średniej
41 podzielona przez ilość ocen:
42 suma = ((o1-s)^2+(o2-s)^2+...+(on-s)^2) / n, gdzie:
43 o1, o2, ..., on - kolejne oceny,
44 s - średnia ocen,
45 n - liczba ocen.
46 """
47 suma = 0
48 for ocena in oceny:
49 suma += (ocena - srednia)**2
50 return suma / len(oceny)
51
52
53def odchylenie(oceny, srednia): # pierwiastek kwadratowy z wariancji
54 w = wariancja(oceny, srednia)
55 return math.sqrt(w)
Instrukcja import math udostępnia wszystkie metody z modułu matematycznego, wykorzystujemy
funkcję obliczającą pierwiastek kwadratowy: math.sqrt().
Funkcja wypisz(sekwencja, kom='...') wypisuje podany komunikat, a następnie za pomocą pętli
for e in sekwencja odczytuje i wypisuje elementy podanej sekwencji (zbioru, listy ip.) w jednym wierszu.
Argument kom jest opcjonalny, ponieważ przypisujemy mu wartość domyślną, która zostanie użyta,
jeżeli użytkownik nie poda innej w wywołaniu funkcji.
Funkcja srednia() do zsumowania wartości ocen wykorzystuje funkcję sum().
Funkcja mediana() sortuje niemalejąco otrzymaną listę „w miejscu” (oceny.sort()),
tzn. trwale zmienia porządek elementów listy. Jeżeli liczba ocen jest parzysta if len(oceny) % 2 == 0:,
zwraca średnią arytmetyczną dwóch środkowych wartości. Indeks drugiego ze środkowych elementów
obliczamy w wyrażeniu half = len(oceny) // 2. Operator // oznacza dzielenie całkowite.
Notacja wycinkowa oceny[half-1:half+1] zwraca dwa środkowe elementy z listy.
Jeżeli liczba ocen jest nieparzysta, zwracamy wartość środkową: oceny[len(oceny) // 2].
W funkcji wariancja() pętla for odczytuje kolejne oceny i korzysta z operatorów skróconego dodawania (+=)
i potęgowania (**), aby wyliczyć sumę kwadratów różnic kolejnych ocen i średniej: suma += (ocena - srednia)**2.
Funkcja zwraca średnią arytmetyczną obliczonej sumy: suma / len(oceny).
1.6.1.1. Ćwiczenia
W konsoli Pythona utwórz listę wyrazy zawierającą elementy: abrakadabra i kordoba.
utwórz zbiór
w1za pomocą poleceniaset(wyrazy[0])oraz zbiórw2za pomocą poleceniaset(wyrazy[1]),wykonaj kolejno polecenia ilustrujące użycie klasycznych operatorów na zbiorach, czyli: różnica (-) , suma (|), przecięcie (część wspólna, &) i elementy unikalne (^):
>>> print(w1 – w2)
>>> print(w1 | w2)
>>> print(w1 & w2)
>>> print(w1 ^ w2)
w pliku
oceny_funkcje.pydopisz funkcję, która wyświetli wszystkie oceny oraz ich odchylenia od wartości średniej; wywołanie funkcji umieść w plikuoceny.py.
Pojęcia
Materiały Python 101
udostępniane przez
Centrum Edukacji Obywatelskiej na licencji
Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowa.
- Utworzony:
2026-05-30 o 19:12 w Sphinx 7.3.7
- Autorzy: