Dział o programowaniu w Pythonie trzeba ułożyć tak, by każdy nowy temat opierał się na wcześniejszych: pętle przed listami, funkcje po instrukcjach warunkowych, projekt na końcu. Błąd w kolejności objawia się tym, że uczniowie „nie rozumieją”, choć problemem jest brak przygotowania. Poniżej plan 13 lekcji z zależnościami oraz niewielki program, który wyznacza poprawną kolejność, liczy czas i sprawdza własny układ nauczyciela.
Materiał jest przeznaczony dla nauczyciela. Założenia: każda lekcja trwa jedną godzinę lekcyjną (projekt — dwie), nauka odbywa się dwie godziny tygodniowo, a zależności są propozycją — inna kolejność też może być uzasadniona; ważne, by świadomie. Lekcje poniżej to opublikowane na blogu materiały z zadaniami i rozwiązaniami.
Przygotowanie stanowisk
Potrzebny jest Python 3 i edytor lub IDLE. Rozpakuj pakiet z sekcji materiałów do osobnego folderu i uruchamiaj skrypty z tego folderu. Program uruchomisz przez Run → Run Module albo poleceniem python start.py, python3 start.py lub py start.py.
Cele i plan lekcji
Po zajęciach uczeń potrafi:
- ułożyć dział w kolejności uwzględniającej zależności między tematami;
- policzyć liczbę godzin i tygodni potrzebnych na dział;
- sprawdzić, czy własny układ lekcji nie narusza zależności;
- zaplanować skrócenie działu przez pominięcie lekcji bez naruszenia zależności.
| Czas | Praca na lekcji |
|---|---|
| 0–10 min | Zależności między tematami |
| 10–25 min | Wyznaczenie kolejności w programie |
| 25–40 min | Kontrola własnego układu i skracanie działu |
| 40–45 min | Wnioski i planowanie ocen |
Plan 13 lekcji
Razem 14 godzin, czyli 7 tygodni przy dwóch godzinach tygodniowo (bez godzin na sprawdziany i powtórki).
Co robi program
Funkcja kolejnosc wybiera w każdym kroku lekcję, której wszystkie zależności są już zrealizowane (sortowanie topologiczne); gdy żadna nie jest gotowa, plan ma cykl. Funkcja naruszenia sprawdza, czy w proponowanym układzie jakaś lekcja stoi przed swoją zależnością.
Skracanie działu
Przy mniejszej liczbie godzin zachowaj „trzon”: pierwsza lekcja, wejście/wyjście, typy, warunki, pętle, listy, funkcje, a z końcówki — jeden z tematów (słowniki lub pliki) zależnie od projektu. Pomijając lekcję, sprawdź, które inne od niej zależą (zadanie 3: od funkcji zależy tylko testowanie).
Sprawdziany i powtórki
Warto zaplanować mały sprawdzian po pętlach i funkcjach (patrz Sprawdzian z Pythona — dwa warianty z kluczem) oraz ocenę projektu na końcu działu.
Zadania
Zadanie 1. Kolejność. Wyznacz poprawną kolejność lekcji z zależności i policz lekcje, godziny i tygodnie przy 2 godz./tydz.
Zadanie 2. Własny układ. Zamień miejscami lekcje „Napisy” i „Pliki tekstowe” i sprawdź, jakie zależności zostały naruszone.
Zadanie 3. Zależności. Wypisz lekcje zależne od „Funkcji” i sprawdź, że dodanie zależności od projektu do pierwszej lekcji tworzy cykl.
Dla chętnych: ułóż plan skrócony do 10 godzin bez naruszania zależności i uzasadnij wybór pominiętych lekcji.
Rozwiązanie i wyniki
# Plan dzialu: lekcja -> (godziny, lekcje, ktore musza byc wczesniej)
PLAN = {
"Pierwsza lekcja": (1, []),
"input i print": (1, ["Pierwsza lekcja"]),
"Typy danych": (1, ["input i print"]),
"Warunki": (1, ["Typy danych"]),
"Petle": (1, ["Warunki"]),
"Listy": (1, ["Petle"]),
"Napisy": (1, ["Petle"]),
"Funkcje": (1, ["Warunki", "Petle"]),
"Slowniki": (1, ["Listy"]),
"Pliki tekstowe": (1, ["Napisy", "Listy"]),
"Wyjatki": (1, ["Pliki tekstowe"]),
"Testowanie funkcji": (1, ["Funkcje"]),
"Projekt quiz": (2, ["Slowniki", "Pliki tekstowe", "Wyjatki", "Testowanie funkcji"]),
}
def kolejnosc(plan):
"""Jedna z poprawnych kolejnosci (sortowanie topologiczne); None, gdy zaleznosci tworza cykl."""
zrobione, wynik = set(), []
while len(wynik) < len(plan):
gotowe = [l for l in plan if l not in zrobione and all(w in zrobione for w in plan[l][1])]
if not gotowe:
return None
zrobione.add(gotowe[0])
wynik.append(gotowe[0])
return wynik
def naruszenia(plan, propozycja):
wynik = []
pozycje = {l: i for i, l in enumerate(propozycja)}
for lekcja, (_, wymagane) in plan.items():
for w in wymagane:
if pozycje[w] > pozycje[lekcja]:
wynik.append(lekcja + " przed " + w)
return wynik
# Zadanie 1: kolejnosc i czas
proponowana = kolejnosc(PLAN)
print("Kolejnosc:", " > ".join(proponowana))
godziny = sum(h for h, _ in PLAN.values())
print("Lekcji:", len(PLAN), "| godzin:", godziny, "| tygodni przy 2 godz./tydz.:", -(-godziny // 2))
# Zadanie 2: kontrola wlasnego ukladu
wlasny = list(proponowana)
i, j = wlasny.index("Napisy"), wlasny.index("Pliki tekstowe")
wlasny[i], wlasny[j] = wlasny[j], wlasny[i]
print("Wlasny uklad ma naruszenia:", naruszenia(PLAN, wlasny))
# Zadanie 3: co zalezy od funkcji i co odpada przy skracaniu dzialu
zalezne = [l for l, (_, w) in PLAN.items() if "Funkcje" in w]
print("Zalezne od Funkcji:", zalezne)
print("Cykl w planie:", kolejnosc(dict(PLAN, **{"Pierwsza lekcja": (1, ["Projekt quiz"])})) is None)
Program wypisze:
Kolejnosc: Pierwsza lekcja > input i print > Typy danych > Warunki > Petle > Listy > Napisy > Funkcje > Slowniki > Pliki tekstowe > Wyjatki > Testowanie funkcji > Projekt quiz
Lekcji: 13 | godzin: 14 | tygodni przy 2 godz./tydz.: 7
Wlasny uklad ma naruszenia: ['Pliki tekstowe przed Napisy']
Zalezne od Funkcji: ['Testowanie funkcji']
Cykl w planie: True
Program układa lekcje w kolejności zgodnej z zależnościami (od pierwszej lekcji do projektu), a razem plan ma 13 lekcji i 14 godzin, czyli 7 tygodni. Układ z zamienionymi „Napisami” i „Plikami” narusza jedną zależność: „Pliki tekstowe” stoją przed „Napisami”. Od „Funkcji” zależy tylko „Testowanie funkcji”, więc przy skracaniu działu można je pominąć łącznie z funkcjami albo zostawić funkcje bez testowania. Dodanie do pierwszej lekcji zależności od projektu tworzy cykl i funkcja zwraca None.
Plik rozszerzenie.py (zadanie dla chętnych) wypisze:
7 7.0
Typowe błędy
| Objaw | Co sprawdzić |
|---|---|
| Funkcje przed pętlami | Uczniowie muszą znać warunki i pętle, zanim zaczną pisać funkcje. |
| Projekt bez wcześniejszych tematów | Projekt wymaga słowników, plików, wyjątków i testów. |
| Pominięcie lekcji bez sprawdzenia zależności | Inne tematy mogą od niej zależeć. |
| Brak godzin na powtórki | Zaplanuj sprawdziany i poprawki. |
| Ten sam plan dla każdej klasy | Dostosuj tempo do klasy; zależności zostają. |
| Cykliczne zależności | Plan, w którym A czeka na B, a B na A, jest niewykonalny. |
Pytania kontrolne i punktacja
- Dlaczego pętle są przed listami?
- Co oznacza cykl w planie zależności?
- Co sprawdzisz, zanim pominiesz lekcję?
Odpowiedzi: Bo listy najczęściej przetwarza się w pętlach, więc uczeń musi najpierw znać pętle. Że dwie lekcje czekają na siebie nawzajem i żadnej nie da się zacząć. Które inne lekcje od niej zależą.
Proponowana punktacja (razem 10 punktów): zadanie 1 — kolejność i liczby 3 pkt; zadanie 2 — naruszenie zależności 3 pkt; zadanie 3 — zależności i cykl 2 pkt; planowanie w pytaniach 2 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.
Materiały do pobrania
Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.
Co dalej?
Następny krok to planowanie działów HTML i CSS oraz SQL i dobór sprawdzianów. Ten materiał rozwija dział o planowaniu nauczania programowania w kursie Python w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.
Źródła techniczne: sortowanie topologiczne w Wikipedii oraz dokumentacja języka Python. Zobacz też lekcję o sprawdzianie z Pythona.
Poprowadź kolejne lekcje Python
Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.
Kup dostęp do kursu Python →