11. Python – biblioteki, moduły, pakiety


Szybki quiz – przypomnienie poprzedniej lekcji

Pytanie 1. Co zostanie wyświetlone?

for i in range(2, 10, 3):
    print(i, end=" ")
Odpowiedź

Odpowiedź: 2 5 8. Pętla startuje od 2 i dodaje 3, a następna wartość (11) jest już poza zakresem.

Pytanie 2. Dlaczego ten program nigdy się nie zakończy? Jak to naprawić?

i = 0
while i < 5:
    print(i)
Odpowiedź

Odpowiedź: Zmienna i nigdy się nie zmienia, więc warunek i < 5 zawsze jest prawdziwy. Naprawa: dodać w pętli i += 1. Przerwanie działającego programu: Ctrl+C.

Pytanie 3. Co zostanie wyświetlone?

for i, owoc in enumerate(["jabłko", "banan"]):
    print(i, owoc)
Odpowiedź

Odpowiedź:

0 jabłko
1 banan

enumerate() zwraca parę: indeks (liczony od 0) i element.

Pytanie 4. Co zostanie wyświetlone?

for i in range(1, 8):
    if i % 2 == 0:
        continue
    if i > 5:
        break
    print(i, end=" ")
Odpowiedź

Odpowiedź: 1 3 5. Liczby parzyste są pomijane przez continue. Dla i = 7 (nieparzyste, większe od 5) pętla kończy się przez break.

Pytanie 5. Co zostanie wyświetlone? Kiedy wykonuje się blok else przy pętli for?

for x in [1, 2, 3]:
    if x == 5:
        break
else:
    print("Brak")
Odpowiedź

Odpowiedź: Brak. Blok else pętli wykonuje się tylko wtedy, gdy pętla nie została przerwana przez break.

Pytanie 6. Jaki będzie wynik?

print([x * 2 for x in range(5) if x % 2 == 0])
Odpowiedź

Odpowiedź: [0, 4, 8]. Warunek if przepuszcza tylko 0, 2 i 4, a każdą z tych liczb mnożymy przez 2.


Moduł to plik Pythona (.py) zawierający funkcje, klasy i zmienne, które można wykorzystać w innych programach. Biblioteka to zbiór modułów pogrupowanych tematycznie. Pakiet to katalog zawierający moduły i plik __init__.py.

Dlaczego są ważne?

  • Unikamy duplikowania kodu
  • Korzystamy z gotowych rozwiązań
  • Oszczędzamy czas
  • Zwiększamy niezawodność programów

Analogia: Wyobraź sobie biblioteki jak skrzynkę z narzędziami. Zamiast tworzyć młotek od zera, bierzesz gotowy z skrzynki.

Biblioteka Standardowa Pythona

Biblioteka Standardowa (The Python Standard Library) to zestaw modułów instalowanych automatycznie z Pythonem. Nie trzeba ich pobierać – są zawsze dostępne.

Najważniejsze moduły Biblioteki Standardowej

ModułZastosowanie
mathFunkcje matematyczne
randomGenerowanie liczb losowych
datetimePraca z datą i czasem
osOperacje systemowe
sysParametry interpretera
jsonPraca z formatem JSON
reWyrażenia regularne
collectionsDodatkowe struktury danych
stringOperacje na stringach
calendarOperacje kalendarzowe
pickleSerializacja obiektów

Funkcje wbudowane Pythona

Python ma wbudowane funkcje dostępne zawsze, bez importowania. Poznałeś już wiele z nich:

Najczęściej używane:

print()      # Wyświetlanie
input()      # Pobieranie danych
len()        # Długość kolekcji
type()       # Typ zmiennej
int()        # Konwersja na int
str()        # Konwersja na string
range()      # Sekwencja liczb
sum()        # Suma elementów
max()        # Maksimum
min()        # Minimum
abs()        # Wartość bezwzględna
round()      # Zaokrąglanie
sorted()     # Sortowanie
enumerate()  # Indeks + element
zip()        # Łączenie kolekcji

Przykłady użycia:

# Funkcje agregujące
liczby = [5, 2, 8, 1, 9]
print(sum(liczby))     # 25
print(max(liczby))     # 9
print(min(liczby))     # 1
print(len(liczby))     # 5

# Wartość bezwzględna
print(abs(-10))        # 10

# Zaokrąglanie
print(round(3.14159, 2))  # 3.14

# Sortowanie
print(sorted(liczby))  # [1, 2, 5, 8, 9]

Pełna lista: https://docs.python.org/3/library/functions.html

Importowanie modułów

Sposób 1: Import całego modułu

import math

# Używanie funkcji z modułu
wynik = math.sqrt(16)
print(wynik)  # 4.0

pi = math.pi
print(pi)     # 3.141592653589793

Składnia: moduł.funkcja()

Sposób 2: Import konkretnej funkcji

from math import sqrt, pi

# Używanie bez nazwy modułu
wynik = sqrt(16)
print(wynik)  # 4.0
print(pi)     # 3.141592653589793

Zaleta: Krótszy zapis
Wada: Ryzyko konfliktu nazw

Sposób 3: Import wszystkiego (NIE ZALECANE)

from math import *

# Wszystkie funkcje dostępne bezpośrednio
print(sqrt(16))
print(pi)

Dlaczego unikać?

  • Nie wiesz co dokładnie zaimportowałeś
  • Ryzyko nadpisania funkcji
  • Trudniejsze debugowanie

Sposób 4: Import z aliasem

import math as m

wynik = m.sqrt(16)
print(wynik)

# Przydatne dla długich nazw
import datetime as dt
dzisiaj = dt.date.today()

Gdzie umieszczać importy?

Zasada: Zawsze na początku pliku, przed resztą kodu.

# DOBRZE - importy na górze
import math
import random
from datetime import date

def funkcja():
    return math.sqrt(16)

# ŹLE - importy w środku kodu
def funkcja():
    import math  # Nie rób tego!
    return math.sqrt(16)

Kolejność importów (PEP 8):

  1. Biblioteka standardowa
  2. Biblioteki third-party (zainstalowane przez pip)
  3. Własne moduły
# 1. Biblioteka standardowa
import math
import os
from datetime import datetime

# 2. Third-party
import numpy as np
import pandas as pd

# 3. Własne moduły
from my_module import my_function

Biblioteka math – funkcje matematyczne

Moduł math zawiera zaawansowane funkcje matematyczne.

Podstawowe funkcje

import math

# Pierwiastek kwadratowy
print(math.sqrt(25))      # 5.0

# Potęgowanie
print(math.pow(2, 3))     # 8.0

# Wartość bezwzględna (lepiej użyć wbudowanej abs())
print(math.fabs(-5))      # 5.0

# Zaokrąglanie
print(math.ceil(3.2))     # 4 (w górę)
print(math.floor(3.8))    # 3 (w dół)

# Silnia
print(math.factorial(5))  # 120 (5!)

Funkcje trygonometryczne

import math

# Sinus, cosinus, tangens (w radianach)
print(math.sin(math.pi / 2))   # 1.0
print(math.cos(0))             # 1.0
print(math.tan(math.pi / 4))   # 1.0

# Konwersja stopnie ↔ radiany
stopnie = 90
radiany = math.radians(stopnie)
print(radiany)                 # 1.5707... (π/2)

radiany = math.pi
stopnie = math.degrees(radiany)
print(stopnie)                 # 180.0

Logarytmy i wykładnicze

import math

# Logarytm naturalny (ln)
print(math.log(math.e))    # 1.0

# Logarytm o podstawie 10
print(math.log10(100))     # 2.0

# Logarytm o dowolnej podstawie
print(math.log(8, 2))      # 3.0 (log₂8)

# e^x
print(math.exp(1))         # 2.718... (e)

Stałe matematyczne

import math

print(math.pi)    # 3.141592653589793
print(math.e)     # 2.718281828459045
print(math.tau)   # 6.283185307179586 (2π)
print(math.inf)   # Nieskończoność
print(math.nan)   # Not a Number

Przykład praktyczny – odległość między punktami

import math

def odleglosc(x1, y1, x2, y2):
    """
    Oblicza odległość między dwoma punktami.
    Wzór: √[(x₂-x₁)² + (y₂-y₁)²]
    """
    return math.sqrt((x2 - x1)**2 + (y2 - y1)**2)

# Test
dist = odleglosc(0, 0, 3, 4)
print(f"Odległość: {dist}")  # 5.0

Przykład – funkcja sigmoid

import math

def sigmoid(x):
    """
    Funkcja sigmoidalna: σ(x) = 1 / (1 + e^(-x))
    Używana w uczeniu maszynowym.
    """
    return 1 / (1 + math.exp(-x))

# Test
print(sigmoid(0))      # 0.5
print(sigmoid(5))      # 0.993...
print(sigmoid(-5))     # 0.006...

Biblioteka random – liczby losowe

Moduł random służy do generowania liczb pseudolosowych.

Podstawowe funkcje

import random

# Losowa liczba zmiennoprzecinkowa [0.0, 1.0)
print(random.random())  # np. 0.7234...

# Losowa liczba całkowita z zakresu
print(random.randint(1, 10))  # np. 7 (włącznie z 1 i 10)

# Losowa liczba zmiennoprzecinkowa z zakresu
print(random.uniform(1.5, 5.5))  # np. 3.7...

Losowanie z sekwencji

import random

# Losowy element z listy
kolory = ["czerwony", "zielony", "niebieski"]
print(random.choice(kolory))  # np. "zielony"

# Losowe elementy (z powtórzeniami)
print(random.choices(kolory, k=3))  # np. ['czerwony', 'czerwony', 'niebieski']

# Losowe elementy (bez powtórzeń)
print(random.sample(kolory, k=2))  # np. ['niebieski', 'czerwony']

# Przetasowanie listy
random.shuffle(kolory)
print(kolory)  # Zmieniona kolejność

Ziarno losowe (seed)

Ustawienie ziarna zapewnia powtarzalność losowania.

import random

# Ustawienie ziarna
random.seed(12)

# Zawsze te same "losowe" liczby
print(random.randint(1, 100))  # Zawsze ta sama wartość
print(random.randint(1, 100))  # Zawsze ta sama wartość

# Resetowanie do prawdziwej losowości
random.seed()

Zastosowanie: Debugging, reprodukowalne eksperymenty, testy.

Przykłady praktyczne

Rzut kostką:

import random

def rzut_kostka():
    return random.randint(1, 6)

print(f"Wyrzuciłeś: {rzut_kostka()}")

Losowe hasło:

import random
import string

def generuj_haslo(dlugosc=8):
    znaki = string.ascii_letters + string.digits
    return ''.join(random.choice(znaki) for _ in range(dlugosc))

print(generuj_haslo(12))  # np. "aB3dK9mQ1pR7"

Symulacja rzutu monetą:

import random

def rzut_moneta():
    return random.choice(["Orzeł", "Reszka"])

# 10 rzutów
for i in range(10):
    print(f"Rzut {i+1}: {rzut_moneta()}")

Biblioteka datetime – data i czas

Moduł datetime służy do pracy z datami i czasem.

Aktualna data i czas

from datetime import datetime, date, time

# Aktualna data i czas
teraz = datetime.now()
print(teraz)  # 2024-01-15 14:30:45.123456

# Tylko data
dzisiaj = date.today()
print(dzisiaj)  # 2024-01-15

# Części daty
print(dzisiaj.year)   # 2024
print(dzisiaj.month)  # 1
print(dzisiaj.day)    # 15

Tworzenie własnych dat

from datetime import date, datetime

# Konkretna data
urodziny = date(1990, 5, 15)
print(urodziny)  # 1990-05-15

# Konkretna data i czas
wydarzenie = datetime(2024, 12, 31, 23, 59, 59)
print(wydarzenie)  # 2024-12-31 23:59:59

Formatowanie dat

from datetime import datetime

teraz = datetime.now()

# Różne formaty
print(teraz.strftime("%Y-%m-%d"))           # 2024-01-15
print(teraz.strftime("%d/%m/%Y"))           # 15/01/2024
print(teraz.strftime("%d %B %Y"))           # 15 January 2024
print(teraz.strftime("%A, %d %B %Y"))       # Monday, 15 January 2024
print(teraz.strftime("%H:%M:%S"))           # 14:30:45
print(teraz.strftime("%d.%m.%Y %H:%M"))     # 15.01.2024 14:30

Kody formatowania:

  • %Y – rok (4 cyfry)
  • %m – miesiąc (01-12)
  • %d – dzień (01-31)
  • %H – godzina (00-23)
  • %M – minuta (00-59)
  • %S – sekunda (00-59)
  • %A – dzień tygodnia (pełna nazwa)
  • %B – miesiąc (pełna nazwa)

Parsowanie dat ze stringów

from datetime import datetime

# String → datetime
data_str = "2024-01-15"
data = datetime.strptime(data_str, "%Y-%m-%d")
print(data)
print(type(data))  # <class 'datetime.datetime'>

Różnica między datami (timedelta)

from datetime import date, timedelta

data1 = date(2024, 1, 1)
data2 = date(2024, 7, 18)

# Różnica
roznica = data2 - data1
print(roznica)        # 199 days, 0:00:00
print(roznica.days)   # 199

# Dodawanie czasu
za_tydzien = date.today() + timedelta(days=7)
print(za_tydzien)

# Odejmowanie czasu
tydzien_temu = date.today() - timedelta(days=7)
print(tydzien_temu)

# Różne jednostki
za_30_dni = date.today() + timedelta(days=30)
za_2_tygodnie = date.today() + timedelta(weeks=2)
za_godzine = datetime.now() + timedelta(hours=1)

Przykład – obliczanie wieku

from datetime import date

def oblicz_wiek(data_urodzenia):
    dzisiaj = date.today()
    wiek = dzisiaj.year - data_urodzenia.year
    
    # Sprawdź czy już były urodziny w tym roku
    if (dzisiaj.month, dzisiaj.day) < (data_urodzenia.month, data_urodzenia.day):
        wiek -= 1
    
    return wiek

# Test
urodziny = date(1990, 5, 15)
print(f"Wiek: {oblicz_wiek(urodziny)} lat")

Biblioteka calendar – kalendarz

Moduł calendar do pracy z kalendarzami.

Wyświetlanie kalendarza

import calendar

# Cały rok
print(calendar.calendar(2024))

# Konkretny miesiąc
print(calendar.month(2024, 6))

Wynik dla czerwca 2024:

     June 2024
Mo Tu We Th Fr Sa Su
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Przydatne funkcje

import calendar

# Czy rok przestępny?
print(calendar.isleap(2024))  # True
print(calendar.isleap(2023))  # False

# Ile dni w miesiącu?
print(calendar.monthrange(2024, 2))  # (3, 29) - luty zaczyna się w czwartek, ma 29 dni

# Dzień tygodnia (0=poniedziałek, 6=niedziela)
print(calendar.weekday(2024, 1, 15))  # 0 (poniedziałek)

# Nazwa dnia tygodnia
dni = ['Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota', 'Niedziela']
dzien_index = calendar.weekday(2024, 1, 15)
print(dni[dzien_index])  # Poniedziałek

Biblioteka string – operacje na stringach

Moduł string zawiera stałe i funkcje do pracy ze stringami.

Stałe stringów

import string

# Wszystkie litery
print(string.ascii_lowercase)  # 'abcdefghijklmnopqrstuvwxyz'
print(string.ascii_uppercase)  # 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
print(string.ascii_letters)    # 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

# Cyfry
print(string.digits)           # '0123456789'

# Znaki przestankowe
print(string.punctuation)      # '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

# Białe znaki
print(string.whitespace)       # ' \t\n\r\x0b\x0c'

Praktyczne zastosowanie – generator haseł:

import string
import random

def generuj_haslo(dlugosc=12):
    znaki = string.ascii_letters + string.digits + string.punctuation
    return ''.join(random.choice(znaki) for _ in range(dlugosc))

print(generuj_haslo(16))

Biblioteka collections – zaawansowane kolekcje

Moduł collections zawiera specjalne typy kolekcji.

Counter – licznik elementów

from collections import Counter

# Zliczanie elementów
items = ['YES', 'NO', 'NO', 'YES', 'EMPTY', 'YES', 'NO']
licznik = Counter(items)

print(licznik)  # Counter({'YES': 3, 'NO': 3, 'EMPTY': 1})

# Dostęp do liczby wystąpień
print(licznik['YES'])  # 3
print(licznik['EMPTY'])  # 1

# Najczęstsze elementy
print(licznik.most_common(2))  # [('YES', 3), ('NO', 3)]

Praktyczne zastosowanie – analiza tekstu:

from collections import Counter

tekst = "ala ma kota a kot ma ale"
slowa = tekst.split()
licznik = Counter(slowa)

print(licznik)
print(f"Najczęstsze słowo: {licznik.most_common(1)}")

defaultdict – słownik z wartością domyślną

from collections import defaultdict

# Zwykły słownik
slownik = {}
# slownik['klucz'] += 1  # KeyError!

# defaultdict z wartością domyślną 0
licznik = defaultdict(int)
licznik['a'] += 1  # Działa! Domyślnie 0
licznik['a'] += 1
print(licznik)  # defaultdict(<class 'int'>, {'a': 2})

deque – kolejka dwustronna

from collections import deque

kolejka = deque([1, 2, 3])

# Dodawanie
kolejka.append(4)       # Dodaj na końcu
kolejka.appendleft(0)   # Dodaj na początku
print(kolejka)          # deque([0, 1, 2, 3, 4])

# Usuwanie
kolejka.pop()           # Usuń z końca
kolejka.popleft()       # Usuń z początku
print(kolejka)          # deque([1, 2, 3])

Biblioteka json – praca z formatem JSON

JSON (JavaScript Object Notation) to popularny format wymiany danych.

Konwersja Python ↔ JSON

import json

# Python → JSON (serializacja)
dane_python = {
    "imie": "Jan",
    "wiek": 25,
    "miasto": "Warszawa",
    "hobby": ["programowanie", "sport"]
}

json_string = json.dumps(dane_python, indent=4, ensure_ascii=False)
print(json_string)

Wynik:

{
    "imie": "Jan",
    "wiek": 25,
    "miasto": "Warszawa",
    "hobby": [
        "programowanie",
        "sport"
    ]
}

Parametry dumps()

import json

dane = {"PLW": 360.0, "TEN": 320.0, "CDR": 329.0}

# Sortowanie po kluczach + wcięcie
json_str = json.dumps(dane, sort_keys=True, indent=4)
print(json_str)

Wynik:

{
    "CDR": 329.0,
    "PLW": 360.0,
    "TEN": 320.0
}

JSON → Python (deserializacja)

import json

json_string = '{"imie": "Jan", "wiek": 25}'

# JSON → Python
dane = json.loads(json_string)
print(dane)        # {'imie': 'Jan', 'wiek': 25}
print(type(dane))  # <class 'dict'>
print(dane['imie'])  # Jan

Zapis i odczyt plików JSON

import json

# Zapis do pliku
dane = {"imie": "Jan", "wiek": 25}
with open('dane.json', 'w', encoding='utf-8') as f:
    json.dump(dane, f, indent=4, ensure_ascii=False)

# Odczyt z pliku
with open('dane.json', 'r', encoding='utf-8') as f:
    wczytane = json.load(f)
    print(wczytane)

Biblioteka pickle – serializacja obiektów

pickle służy do zapisywania obiektów Pythona do plików binarnych.

Zapis i odczyt

import pickle

# Dane do zapisania
ids = ['001', '003', '011']

# Zapis do pliku
with open('data.pickle', 'wb') as f:  # 'wb' = write binary
    pickle.dump(ids, f)

# Odczyt z pliku
with open('data.pickle', 'rb') as f:  # 'rb' = read binary
    wczytane = pickle.load(f)
    print(wczytane)  # ['001', '003', '011']

Pickle vs JSON:

  • pickle – tylko Python, pliki binarne, wszystkie typy Pythona
  • json – uniwersalny, tekstowy, tylko podstawowe typy

Biblioteka re – wyrażenia regularne

Moduł re służy do pracy z wyrażeniami regularnymi (regex) – wzorcami tekstowymi.

Podstawowe funkcje

findall() – znajdź wszystkie wystąpienia:

import re

# Znajdź wszystkie cyfry
string = 'Python 3.8'
cyfry = re.findall(r'\d', string)
print(cyfry)  # ['3', '8']

# Znajdź wszystkie znaki alfanumeryczne
string = '!@#$%^&45wc'
alfanum = re.findall(r'\w', string)
print(alfanum)  # ['4', '5', 'w', 'c']

Znajdowanie adresów email:

import re

raw_text = "Wyślij email na adres: info@template.com lub sales-info@template.it"
emails = re.findall(r'[\w\.-]+@[\w\.-]+', raw_text)
print(emails)
# ['info@template.com', 'sales-info@template.it']

split() – dzielenie tekstu:

import re

text = 'Programowanie w języku Python – od A do Z'

# Podział po białych znakach
slowa = re.split(r'\s+', text)
print(slowa)
# ['Programowanie', 'w', 'języku', 'Python', '–', 'od', 'A', 'do', 'Z']

Podstawowe wzorce regex

WzorzecZnaczenie
\dCyfra (0-9)
\wZnak alfanumeryczny (a-z, A-Z, 0-9, _)
\sBiały znak (spacja, tab, nowa linia)
.Dowolny znak
+Jeden lub więcej
*Zero lub więcej
?Zero lub jeden
^Początek stringa
$Koniec stringa
[abc]Jeden z: a, b lub c
[a-z]Dowolna mała litera

Instalowanie pakietów zewnętrznych

Biblioteka standardowa nie zawiera wszystkiego. Można instalować pakiety zewnętrzne za pomocą pip.

Czym jest pip?

pip to menedżer pakietów dla Pythona. Pobiera pakiety z repozytorium PyPI (Python Package Index): https://pypi.org/

Podstawowe komendy pip

W terminalu wpisujemy:

# Instalacja pakietu:
pip install numpy

# Instalacja konkretnej wersji:
pip install numpy==1.24.0

# Aktualizacja pakietu:
pip install --upgrade numpy

# Odinstalowanie pakietu:
pip uninstall numpy

# Lista zainstalowanych pakietów:
pip list

# Informacje o pakiecie:
pip show numpy

# Zapisanie zainstalowanych pakietów:
pip freeze > requirements.txt

# Instalacja z pliku requirements.txt:
pip install -r requirements.txt

Popularne biblioteki zewnętrzne

NumPy – operacje numeryczne

Biblioteka do obliczeń numerycznych, praca z tablicami wielowymiarowymi.

import numpy as np

# Tworzenie tablicy
arr = np.array([1, 2, 3, 4, 5])
print(arr)

# Operacje na całej tablicy
print(arr * 2)      # [2, 4, 6, 8, 10]
print(arr + 10)     # [11, 12, 13, 14, 15]

# Statystyki
print(np.mean(arr))  # Średnia
print(np.std(arr))   # Odchylenie standardowe
print(np.max(arr))   # Maksimum

Dokumentacja: https://numpy.org/

Pandas – analiza danych

Biblioteka do analizy i przetwarzania danych tabelarycznych.

import pandas as pd

# DataFrame - tabela danych
dane = {
    'Imie': ['Jan', 'Anna', 'Piotr'],
    'Wiek': [25, 30, 28],
    'Miasto': ['Warszawa', 'Kraków', 'Gdańsk']
}

df = pd.DataFrame(dane)
print(df)

Dokumentacja: https://pandas.pydata.org/

Matplotlib – wykresy

Biblioteka do tworzenia wykresów i wizualizacji danych.

import matplotlib.pyplot as plt

# Prosty wykres
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

plt.plot(x, y)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Wykres y = x²')
plt.show()

Dokumentacja: https://matplotlib.org/

Requests – zapytania HTTP

Biblioteka do wysyłania zapytań HTTP.

import requests

# Pobranie danych z API
response = requests.get('https://api.github.com')
print(response.status_code)  # 200
print(response.json())        # Dane w formacie JSON

Dokumentacja: https://requests.readthedocs.io/

Tworzenie własnych modułów

Możesz tworzyć własne moduły – pliki .py z funkcjami do wielokrotnego użytku.

Przykład – moduł matematyczny

Plik moj_modul.py:

"""
Mój własny moduł matematyczny.
"""

def dodaj(a, b):
    """Dodaje dwie liczby."""
    return a + b

def odejmij(a, b):
    """Odejmuje dwie liczby."""
    return a - b

def pomnoz(a, b):
    """Mnoży dwie liczby."""
    return a * b

PI = 3.14159

Użycie w innym pliku:

import moj_modul

wynik = moj_modul.dodaj(5, 3)
print(wynik)  # 8

print(moj_modul.PI)  # 3.14159

Lub:

from moj_modul import dodaj, PI

wynik = dodaj(5, 3)
print(wynik)  # 8
print(PI)     # 3.14159

Dobre praktyki

1. Importuj tylko to czego potrzebujesz

# DOBRZE - konkretne funkcje
from math import sqrt, pi

# ŹLE - wszystko niepotrzebnie
from math import *

2. Używaj aliasów dla długich nazw

# DOBRZE
import datetime as dt
dzisiaj = dt.date.today()

# ŹLE - za długie
import datetime
dzisiaj = datetime.date.today()

3. Grupuj importy

# DOBRZE - pogrupowane
import os
import sys

import numpy as np
import pandas as pd

from my_module import funkcja

# ŹLE - chaotyczne
from my_module import funkcja
import numpy as np
import os
import pandas as pd
import sys

4. Dokumentuj własne moduły

"""
Moduł do obliczeń geometrycznych.

Zawiera funkcje do obliczania:
- pola figur
- objętości brył
- obwodów
"""
from math import pi

def pole_kola(promien):
    """
    Oblicza pole koła.
    
    Args:
        promien (float): Promień koła
    
    Returns:
        float: Pole koła
    """
    return pi * promien ** 2

Przykłady kompleksowe

Przykład 1: Program do analizy tekstu

import string
from collections import Counter

def analizuj_tekst(tekst):
    """Analizuje podany tekst."""
    
    # Usuwanie znaków przestankowych
    tekst_czysty = tekst.translate(str.maketrans('', '', string.punctuation))
    
    # Lista słów
    slowa = tekst_czysty.lower().split()
    
    # Statystyki
    liczba_slow = len(slowa)
    liczba_znakow = len(tekst)
    
    # Najczęstsze słowa
    licznik = Counter(slowa)
    najczestsze = licznik.most_common(5)
    
    # Wyniki
    print(f"Liczba słów: {liczba_slow}")
    print(f"Liczba znaków: {liczba_znakow}")
    print(f"Średnia długość słowa: {liczba_znakow / liczba_slow:.2f}")
    print(f"\nNajczęstsze słowa:")
    for slowo, ilosc in najczestsze:
        print(f"  {slowo}: {ilosc}")

# Test
tekst = """Python to język programowania wysokiego poziomu.
Python jest łatwy w nauce. Python jest wszędzie."""

analizuj_tekst(tekst)

Przykład 2: Generator raportów z datą

from datetime import datetime
import json

def generuj_raport(dane):
    """Generuje raport z bieżącą datą."""
    
    raport = {
        "data_utworzenia": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        "autor": "System",
        "dane": dane,
        "liczba_rekordow": len(dane)
    }
    
    # Zapis do pliku JSON
    nazwa_pliku = f"raport_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
    
    with open(nazwa_pliku, 'w', encoding='utf-8') as f:
        json.dump(raport, f, indent=4, ensure_ascii=False)
    
    print(f"Raport zapisany: {nazwa_pliku}")
    return nazwa_pliku

# Test
dane_sprzedazy = [
    {"produkt": "Laptop", "cena": 3000},
    {"produkt": "Mysz", "cena": 50},
    {"produkt": "Klawiatura", "cena": 200}
]

generuj_raport(dane_sprzedazy)

Przykład 3: Walidator danych

import re
from datetime import datetime

class Walidator:
    """Klasa do walidacji różnych typów danych."""
    
    @staticmethod
    def email(adres):
        """Sprawdza poprawność adresu email."""
        wzorzec = r'^[\w\.-]+@[\w\.-]+\.\w+$'
        return bool(re.match(wzorzec, adres))
    
    @staticmethod
    def telefon(numer):
        """Sprawdza poprawność numeru telefonu (9 cyfr)."""
        return bool(re.match(r'^\d{9}$', numer))
    
    @staticmethod
    def data(data_str):
        """Sprawdza poprawność daty (YYYY-MM-DD)."""
        try:
            datetime.strptime(data_str, "%Y-%m-%d")
            return True
        except ValueError:
            return False

# Test
print(Walidator.email("jan@example.com"))   # True
print(Walidator.email("niepoprawny"))        # False
print(Walidator.telefon("123456789"))        # True
print(Walidator.telefon("12345"))            # False
print(Walidator.data("2024-01-15"))          # True
print(Walidator.data("15-01-2024"))          # False

Podsumowanie

Biblioteka Standardowa:

  • math – funkcje matematyczne
  • random – liczby losowe
  • datetime – data i czas
  • calendar – operacje kalendarzowe
  • string – stałe i operacje na stringach
  • collections – zaawansowane kolekcje
  • json – format JSON
  • pickle – serializacja
  • re – wyrażenia regularne

Instalowanie pakietów:

Importowanie:

  • import moduł
  • from moduł import funkcja
  • import moduł as alias

Własne moduły:

  • Twórz pliki .py z funkcjami
  • Importuj jak standardowe moduły
  • Dokumentuj funkcje

Dobre praktyki:

  • Importy na początku pliku
  • Importuj tylko to czego potrzebujesz
  • Używaj aliasów dla długich nazw
  • Grupuj importy tematycznie

Ćwiczenia – Biblioteki, moduły, pakiety

Biblioteka math

  1. Użyj modułu math do obliczenia pierwiastka kwadratowego z liczby 144.
  2. Oblicz pole koła o promieniu 5 używając stałej pi z modułu math.
  3. Oblicz sinus kąta 30 stopni (najpierw skonwertuj na radiany).
  4. Użyj funkcji math.ceil() i math.floor() do zaokrąglenia liczby 7.8 w górę i w dół.
  5. Oblicz 2 do potęgi 10 używając funkcji z modułu math.
  6. Oblicz silnię liczby 7 używając funkcji z modułu math.
  7. Oblicz logarytm naturalny (ln) liczby e.
  8. Oblicz logarytm dziesiętny (log₁₀) liczby 1000.
  9. Oblicz odległość między punktami (0, 0) i (6, 8) używając twierdzenia Pitagorasa i funkcji z math.
  10. Stwórz funkcję która sprawdza czy liczba jest liczbą pierwszą używając funkcji math.sqrt() do optymalizacji.

  1. Wygeneruj losową liczbę całkowitą z zakresu 1-100.
  2. Wylosuj losowy element z listy [„kamień”, „papier”, „nożyce”].
  3. Wygeneruj 5 losowych liczb z zakresu 1-50 (z powtórzeniami).
  4. Wylosuj 3 różne liczby z zakresu 1-10 (bez powtórzeń).
  5. Przetasuj listę [1, 2, 3, 4, 5] i wyświetl wynik.
  6. Ustaw ziarno losowe na 42 i wygeneruj 3 losowe liczby. Sprawdź czy za każdym uruchomieniem są takie same.
  7. Symuluj 100 rzutów kostką (liczby 1-6) i policz ile razy wypadła każda liczba.
  8. Napisz funkcję która generuje losowe hasło składające się z 12 znaków (litery i cyfry).
  9. Wylosuj 10 liczb z zakresu 1-100 i znajdź ich średnią.
  10. Symuluj grę „Orzeł czy Reszka” – 50 rzutów, policz ile razy wypadł orzeł.

Biblioteka datetime

  1. Wyświetl aktualną datę i czas.
  2. Wyświetl tylko aktualną datę (bez czasu).
  3. Stwórz datę swojego urodzenia i wyświetl ją.
  4. Oblicz ile dni minęło od 1 stycznia 2024 do dzisiaj.
  5. Oblicz jaka będzie data za 100 dni od dzisiaj.
  6. Sformatuj aktualną datę w formacie „DD.MM.YYYY”.
  7. Sformatuj aktualny czas w formacie „HH:MM:SS”.
  8. Wyświetl pełną nazwę dnia tygodnia dla dzisiejszej daty.
  9. Oblicz swój wiek w latach na podstawie daty urodzenia.
  10. Sprawdź czy data „2024-02-29” jest poprawna (luty 2024 ma 29 dni?).

Biblioteka calendar

  1. Wyświetl kalendarz dla roku 2024.
  2. Wyświetl kalendarz dla czerwca 2024.
  3. Sprawdź czy rok 2024 jest rokiem przestępnym.
  4. Sprawdź ile dni ma luty 2024.
  5. Sprawdź jaki dzień tygodnia to 1 stycznia 2024.

Biblioteka string

  1. Wyświetl wszystkie małe litery alfabetu używając modułu string.
  2. Wyświetl wszystkie cyfry używając modułu string.
  3. Wyświetl wszystkie znaki przestankowe dostępne w module string.
  4. Stwórz string zawierający wszystkie litery (małe i wielkie) oraz cyfry.
  5. Wygeneruj losowe hasło używając string.ascii_letters i string.digits (10 znaków).

Biblioteka collections

  1. Zlicz wystąpienia każdej litery w słowie „mississippi” używając Counter.
  2. Znajdź 3 najczęstsze słowa w zdaniu używając Counter.
  3. Stwórz Counter z listy [„a”, „b”, „a”, „c”, „b”, „a”] i wyświetl wynik.
  4. Użyj Counter do znalezienia najczęstszej cyfry w liczbie 11223344556.
  5. Zlicz wystąpienia każdego znaku w swoim imieniu i nazwisku.

Biblioteka json

  1. Stwórz słownik z danymi osoby (imię, wiek, miasto) i skonwertuj go na string JSON.
  2. Skonwertuj string JSON '{„name”: „Jan”, „age”: 25}’ na słownik Pythona.
  3. Zapisz listę produktów ze słownika do pliku JSON z wcięciami (indent=4).
  4. Odczytaj dane z pliku JSON i wyświetl je.
  5. Stwórz słownik z cenami produktów, posortuj po kluczach i zapisz do JSON.

Biblioteka pickle

  1. Zapisz listę [„Python”, „Java”, „C++”] do pliku używając pickle.
  2. Odczytaj dane zapisane w poprzednim zadaniu z pliku pickle.
  3. Zapisz słownik użytkowników do pliku pickle.
  4. Zapisz krotkę z 5 liczbami do pliku pickle i odczytaj ją.
  5. Porównaj rozmiar pliku JSON i pickle dla tych samych danych.

Biblioteka re (wyrażenia regularne)

  1. Znajdź wszystkie cyfry w tekście „Python 3.12 został wydany w 2023 roku”.
  2. Znajdź wszystkie słowa zaczynające się na literę „P” w tekście.
  3. Sprawdź czy string zawiera adres email (prosty wzorzec z @ i kropką).
  4. Znajdź wszystkie liczby (także wielocyfrowe) w tekście.
  5. Podziel tekst po przecinkach używając re.split().

Tworzenie własnych modułów

  1. Stwórz moduł kalkulator.py z funkcjami: dodaj, odejmij, pomnoz, podziel. Zaimportuj go i użyj.
  2. Stwórz moduł geometria.py z funkcjami obliczającymi pole koła, kwadratu i prostokąta.
  3. Stwórz moduł konwersje.py z funkcjami konwertującymi temperatury (C→F, F→C, C→K).
  4. Stwórz moduł walidatory.py ze funkcjami sprawdzającymi email, telefon, PESEL.
  5. Stwórz moduł statystyki.py z funkcjami: srednia, mediana, minimum, maksimum.

Instalowanie pakietów (teoretycznie)

  1. Napisz komendę która zainstaluje pakiet requests.
  2. Napisz komendę która zainstaluje konkretną wersję pakietu numpy (wersja 1.24.0).
  3. Napisz komendę która zaktualizuje pakiet pandas do najnowszej wersji.
  4. Napisz komendę która odinstaluje pakiet matplotlib.
  5. Napisz komendę która wyświetli wszystkie zainstalowane pakiety.

Zadania mieszane

  1. Napisz program który generuje 10 losowych dat z roku 2024 i sortuje je chronologicznie.
  2. Stwórz program który symuluje 1000 rzutów monetą i oblicza procent orłów i reszek.
  3. Napisz funkcję która sprawdza czy podany rok jest rokiem przestępnym (bez calendar.isleap).
  4. Stwórz generator losowych kolorów w formacie RGB (3 liczby 0-255).
  5. Napisz program który oblicza BMI i zapisuje historię pomiarów do pliku JSON.
  6. Stwórz program do generowania losowych pytań matematycznych (dodawanie, odejmowanie).
  7. Napisz funkcję która konwertuje datę ze stringa „DD-MM-YYYY” na obiekt datetime.
  8. Stwórz prosty system logowania który zapisuje czas logowania do pliku.
  9. Napisz program który liczy ile dni pozostało do końca roku.
  10. Stwórz funkcję która generuje unikalny identyfikator zawierający datę i losowe znaki.

Zadania algorytmiczne z bibliotekami

  1. Używając math.gcd() znajdź NWD trzech liczb.
  2. Napisz funkcję która sprawdza czy trzy odcinki mogą utworzyć trójkąt (używaj math).
  3. Symuluj grę w kości – rzucaj dwiema kostkami dopóki suma nie będzie równa 12.
  4. Napisz program który losuje 6 liczb z 49 (losy loterii).
  5. Stwórz kalkulator odsetek składanych używając math.pow().
  6. Napisz funkcję która generuje ciąg Fibonacciego do n-tego wyrazu i zapisuje do JSON.
  7. Stwórz program który mierzy czas wykonania różnych operacji (użyj time.time()).
  8. Napisz walidator kodu pocztowego (format XX-XXX) używając re.
  9. Stwórz funkcję która znajduje wszystkie palindromy w tekście.
  10. Napisz program który generuje tabelkę sinusów dla kątów 0-90 stopni (co 10°).

Zadania kompleksowe

  1. Stwórz system zarządzania zadaniami: dodawanie zadań z datą, zapis do JSON, wyświetlanie nadchodzących zadań.
  2. Napisz generator faktur: produkty, ceny, data wystawienia, zapis do pliku z unikalną nazwą (data + losowe ID).
  3. Stwórz prosty dziennik treningowy: data, rodzaj ćwiczenia, czas, zapis do JSON, statystyki.
  4. Napisz program do analizy haseł: długość, siła (wielkie/małe litery, cyfry, znaki specjalne), sugestie poprawy.
  5. Stwórz system rezerwacji: sprawdzanie dostępnych terminów, rezerwacja z datą, zapis do pliku.
  6. Napisz kalkulator kredytu hipotecznego: kwota, oprocentowanie, liczba rat, harmonogram spłat do JSON.
  7. Stwórz generator quizów: losowe pytania z pliku JSON, punktacja, zapis wyników z datą.
  8. Napisz program do śledzenia nawyków: codzienna lista nawyków, checklisty, statystyki za miesiąc.
  9. Stwórz prosty system księgowy: przychody, wydatki z datami, kategorie, raport miesięczny do JSON.
  10. Napisz generator CV: dane z formularza, szablony, zapis do różnych formatów (txt, JSON), walidacja danych.

PODSUMOWANIE

Pojęcia:

  • Moduł to pojedynczy plik .py z funkcjami, klasami i zmiennymi.
  • Biblioteka to zbiór modułów pogrupowanych tematycznie.
  • Pakiet to katalog z modułami i plikiem __init__.py.
  • Biblioteka standardowa instaluje się razem z Pythonem. Pakiety zewnętrzne trzeba doinstalować przez pip (repozytorium PyPI).
  • Funkcje wbudowane (print, len, sum, max, min, abs, round, sorted…) działają zawsze, bez import.

Importowanie:

  • import math – używasz math.sqrt(), czyli moduł.funkcja().
  • from math import sqrt, pi – używasz samego sqrt(), bez nazwy modułu.
  • import math as m – używasz m.sqrt(). Po zmianie nazwy math.sqrt() przestaje działać.
  • from math import * – nie zalecane. Nie wiesz, co zaimportowałeś, a nazwy mogą się nadpisać.
  • Importy umieszczamy na początku pliku w kolejności: biblioteka standardowa, potem pakiety zewnętrzne, potem własne moduły.

Najważniejsze moduły:

  • math: sqrt() zawsze zwraca float. ceil() zaokrągla w górę, floor() w dół. Funkcje trygonometryczne liczą w radianach, a przeliczają radians() i degrees(). Stałe: pi, e.
  • random:
    • randint(a, b) zawiera oba końce zakresu.
    • choice losuje jeden element, choices losuje z powtórzeniami, sample bez powtórzeń.
    • shuffle tasuje listę w miejscu.
    • seed() daje powtarzalne wyniki.
  • datetime: now() daje datę i czas, date.today() tylko datę. strftime() zamienia datę na tekst, strptime() zamienia tekst na datę. Różnica dat to timedelta (.days).
  • collections: Counter zlicza elementy, defaultdict ma wartość domyślną, deque to kolejka dwustronna.
  • json: dumps/loads pracują na tekście (string), a dump/load na pliku.
  • pickle: zapisuje obiekty Pythona do pliku binarnego (wb/rb). Pliki tego formatu otworzysz tylko w Pythonie.
  • re: wyrażenia regularne, np. findall, split.

Własny moduł: to zwykły plik .py leżący obok programu, który go importuje. Nazwa pliku (bez .py) jest nazwą modułu. Warto opisać go docstringiem.

Typowe źródła błędów:

  • NameError po from math import sqrt, gdy później piszesz math.sqrt().
  • NameError po import math as m, gdy później piszesz math.pi.
  • Własny plik o nazwie takiej jak moduł standardowy (np. random.py) przesłania prawdziwy moduł.
  • Zapis pickle w trybie tekstowym ('w' zamiast 'wb').
  • Pomylenie dump i dumps albo load i loads.
  • Zapomniany ensure_ascii=False powoduje, że polskie znaki w JSON wyglądają jak \u0142.

Minimum, które powinno wejść w pamięć

Jeżeli masz zapamiętać tylko kilka rzeczy z tej lekcji, zapamiętaj te:

  1. Moduł to plik .py, biblioteka to zbiór modułów, pakiet to katalog z __init__.py.
  2. Biblioteka standardowa jest wbudowana w Pythona. Resztę instalujesz przez pip install nazwa.
  3. Cztery sposoby importu i sposób wywołania po każdym z nich:
    • import math → math.sqrt(4)
    • from math import sqrt → sqrt(4)
    • import math as m → m.sqrt(4)
    • from math import * → nie używaj.
  4. Importy piszemy na początku pliku.
  5. math.sqrt(16) zwraca 4.0, czyli liczbę zmiennoprzecinkową.
  6. random.randint(1, 6) może zwrócić 1 i 6. sample losuje bez powtórzeń, choices z powtórzeniami.
  7. random.seed(x) ustawia „ziarno”, więc losowanie daje te same wyniki przy każdym uruchomieniu.
  8. Kody strftime: %Y rok, %m miesiąc, %d dzień, %H godzina, %M minuta, %S sekunda.
  9. Różnica dwóch dat to timedelta, a liczbę dni daje .days.
  10. json.dumps/json.loads pracują na tekście, json.dump/json.load na pliku.
  11. pickle wymaga trybu binarnego ('wb', 'rb').
  12. Własny moduł to plik .py w tym samym folderze. Importujesz go po nazwie pliku, bez .py.

Ściągawka – najważniejsze polecenia i składnia

Importowanie

import moduł
import moduł as alias
from moduł import funkcja1, funkcja2

math

ZapisZnaczenie
math.sqrt(x)pierwiastek (zawsze float)
math.pow(a, b)potęga (zawsze float)
math.ceil(x) / math.floor(x)w górę / w dół
math.factorial(n)silnia
math.sin(x), cos, tankąt w radianach
math.radians(st) / math.degrees(rad)stopnie ↔ radiany
math.log(x) / math.log10(x) / math.log(x, p)logarytm naturalny / dziesiętny / o podstawie p
math.pi, math.estałe

random

ZapisZnaczenie
random.random()liczba z [0.0, 1.0)
random.randint(a, b)liczba całkowita od a do b włącznie
random.uniform(a, b)liczba zmiennoprzecinkowa z zakresu
random.choice(lista)jeden element
random.choices(lista, k=3)k elementów, z powtórzeniami
random.sample(lista, k=3)k elementów, bez powtórzeń
random.shuffle(lista)tasuje listę w miejscu
random.seed(n)powtarzalne losowanie

datetime

from datetime import datetime, date, timedelta

datetime.now()                          # data i czas
date.today()                            # sama data
date(2024, 12, 31)                      # własna data
d.strftime("%d.%m.%Y")                  # data → tekst
datetime.strptime("2024-01-15", "%Y-%m-%d")   # tekst → data
date.today() + timedelta(days=7)        # za tydzień
(data2 - data1).days                    # różnica w dniach

calendar

calendar.isleap(2024)          # rok przestępny?
calendar.monthrange(2024, 2)   # (dzień tygodnia 1. dnia, liczba dni)
calendar.weekday(2024, 1, 15)  # 0 = poniedziałek ... 6 = niedziela

string, collections

import string
string.ascii_letters, string.digits, string.punctuation

from collections import Counter, defaultdict, deque
Counter(lista).most_common(2)
defaultdict(int)
deque([1, 2, 3])    # .append() .appendleft() .pop() .popleft()

json i pickle

json.dumps(dane, indent=4, ensure_ascii=False)   # → tekst
json.loads(tekst)                                # tekst → Python
json.dump(dane, plik, indent=4, ensure_ascii=False)   # → plik
json.load(plik)                                  # plik → Python

pickle.dump(dane, plik)    # plik otwarty jako 'wb'
pickle.load(plik)          # plik otwarty jako 'rb'

re (podstawy)

re.findall(r'\d', tekst)     # wszystkie cyfry
re.split(r'\s+', tekst)      # podział po białych znakach

Wzorce: \d cyfra, \w znak alfanumeryczny, \s biały znak, + jeden lub więcej, * zero lub więcej, ^ początek, $ koniec.

pip (w terminalu)

pip install numpy
pip install numpy==1.24.0
pip install --upgrade numpy
pip uninstall numpy
pip list
pip show numpy
pip freeze > requirements.txt
pip install -r requirements.txt

Własny moduł

# plik moj_modul.py
def dodaj(a, b):
    return a + b

# plik glowny.py (ten sam folder)
import moj_modul
moj_modul.dodaj(1, 2)
# lub: from moj_modul import dodaj

Quiz – sprawdź się

Pytanie 1. Przyporządkuj pojęcia do opisów: moduł, biblioteka, pakiet.

  • A) zbiór modułów pogrupowanych tematycznie
  • B) pojedynczy plik .py z funkcjami
  • C) katalog z modułami i plikiem __init__.py

Pytanie 2. Który z poniższych fragmentów zakończy się błędem NameError? Dlaczego?

# a)
import math
print(math.pi)

# b)
from math import sqrt
print(math.sqrt(9))

# c)
import math as m
print(m.sqrt(9))

# d)
import math as m
print(math.sqrt(9))

Pytanie 3. Co zostanie wyświetlone?

import math
print(math.sqrt(16))
print(math.floor(3.8), math.ceil(3.2))
print(abs(-10))

Pytanie 4. Dobierz funkcję z modułu random do zadania:

  • A) wylosuj jeden element z listy
  • B) wylosuj 3 różne elementy z listy
  • C) zmień kolejność elementów listy
  • D) wylosuj liczbę całkowitą od 1 do 6 (czy 6 może wypaść?)

Pytanie 5. Co zostanie wyświetlone? Dlaczego?

import random
random.seed(42)
a = random.randint(1, 100)
random.seed(42)
b = random.randint(1, 100)
print(a == b)

Pytanie 6. Co zostanie wyświetlone? (rok 2024 jest przestępny)

from datetime import date
d = date(2024, 2, 1)
print((date(2024, 3, 1) - d).days)
print(date(2024, 1, 15).strftime("%d.%m.%Y"))

Pytanie 7. Znajdź błąd w kodzie. Jaki wyjątek się pojawi i jak to naprawić?

import pickle
dane = ['001', '003']
with open('data.pickle', 'w') as f:
    pickle.dump(dane, f)

Pytanie 8. Uzupełnij kod, aby zapisać słownik do pliku JSON z wcięciami i polskimi znakami. Czym różni się ta funkcja od json.dumps?

import json
dane = {"imie": "Łukasz", "wiek": 25}
with open('dane.json', 'w', encoding='utf-8') as f:
    json.____(dane, f, indent=4, ensure_ascii=False)

Pytanie 9. Co zostanie wyświetlone?

from collections import Counter
print(Counter("aabbbc").most_common(1))

Pytanie 10. Napisz polecenia pip (w terminalu), które:

  • a) zainstalują pakiet requests,
  • b) zapiszą listę zainstalowanych pakietów do pliku requirements.txt,
  • c) zainstalują pakiety z pliku requirements.txt.

Pytanie 11. Masz plik kalkulator.py z funkcją dodaj(a, b), który leży w tym samym folderze co main.py. Napisz w main.py dwa różne sposoby zaimportowania i użycia tej funkcji.

Pytanie 12. Krótkie zadanie praktyczne. Napisz program, który korzystając z modułu math obliczy i wyświetli pole koła o promieniu 5.

Odpowiedzi

1. A – biblioteka, B – moduł, C – pakiet.

2. Błąd wystąpi w fragmentach b i d.

  • W (b) zaimportowano tylko sqrt, więc nazwa math nie istnieje.
  • W (d) moduł został zaimportowany pod aliasem m, więc nazwa math również nie istnieje.

3.

4.0
3 4
10

sqrt zwraca float. floor(3.8) daje 3, a ceil(3.2) daje 4. abs jest funkcją wbudowaną i nie wymaga importu.

4. A – random.choice(lista). B – random.sample(lista, k=3). C – random.shuffle(lista). D – random.randint(1, 6); tak, 6 może wypaść, bo oba końce zakresu są włączone.

5. True. Po ustawieniu tego samego ziarna generator losuje tę samą sekwencję liczb.

6.

29
15.01.2024

Luty 2024 ma 29 dni. Format %d.%m.%Y daje dzień, miesiąc i rok oddzielone kropkami.

7. Pojawi się TypeError, ponieważ plik otwarty w trybie tekstowym nie przyjmie danych binarnych. Naprawa: otworzyć plik w trybie 'wb'.

8. json.dump. Funkcja dump zapisuje dane do pliku, a dumps zwraca dane jako tekst (string).

9. [('b', 3)]. Litera b występuje 3 razy.

10.

pip install requests
pip freeze > requirements.txt
pip install -r requirements.txt

11. Dwie z możliwych wersji:

import kalkulator
print(kalkulator.dodaj(2, 3))
from kalkulator import dodaj
print(dodaj(2, 3))

Poprawny jest też wariant z aliasem: import kalkulator as k i wywołanie k.dodaj(2, 3).

12. Przykładowe rozwiązanie:

import math

promien = 5
pole = math.pi * promien ** 2
print(pole)   # 78.53981633974483