Python · planowanie działu

Jak zaplanować dział Python? Od pierwszego programu do projektu

Planowanie działu Python: kolejność 13 lekcji od pierwszego programu do projektu, zależności między tematami, liczba godzin i kontrola własnego układu. Narzędzie w Pythonie i lista lekcji z linkami.

45 minutPoziom podstawowyPliki i rozwiązania

Materiał redakcyjny TablicaPro · liceum i technikum

kolejnosc(PLAN)  # lista lekcji w poprawnej kolejnosci
Kolejność lekcji wyznaczona.
Własny układ sprawdzony.

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.
CzasPraca na lekcji
0–10 minZależności między tematami
10–25 minWyznaczenie kolejności w programie
25–40 minKontrola własnego układu i skracanie działu
40–45 minWnioski 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

ObjawCo sprawdzić
Funkcje przed pętlamiUczniowie muszą znać warunki i pętle, zanim zaczną pisać funkcje.
Projekt bez wcześniejszych tematówProjekt wymaga słowników, plików, wyjątków i testów.
Pominięcie lekcji bez sprawdzenia zależnościInne tematy mogą od niej zależeć.
Brak godzin na powtórkiZaplanuj sprawdziany i poprawki.
Ten sam plan dla każdej klasyDostosuj tempo do klasy; zależności zostają.
Cykliczne zależnościPlan, w którym A czeka na B, a B na A, jest niewykonalny.

Pytania kontrolne i punktacja

  1. Dlaczego pętle są przed listami?
  2. Co oznacza cykl w planie zależności?
  3. 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 →

Zobacz program kursu