KWALIFIKACJA ELM6 - TEST WIEDZY NR 2

PYTANIE NR 27.
Rozważ następujący fragment kodu w języku Python, który jest częścią większego programu do sterowania robotem mechatronicznym:
def move_robot(direction):
    if direction == "forward":
        # kod sterujący ruchem do przodu
    elif direction == "backward":
        # kod sterujący ruchem do tyłu
    else:
        # kod obsługujący nieprawidłowy kierunek
Jakie działanie wykona funkcja move_robot, jeśli jako argument podasz wartość "left"?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Dla argumentu "left" warunki direction == "forward" i direction == "backward" nie są spełnione, więc wykonuje się gałąź else. Oznacza to uruchomienie fragmentu przewidzianego do obsługi nieprawidłowego lub nieobsługiwanego kierunku, bez przejścia do kodu ruchu w przód lub w tył.

Pełne wyjaśnienie:

W pokazanej funkcji działanie zależy wyłącznie od wartości parametru direction. Program sprawdza kolejno warunki:

  • czy direction jest równe napisowi "forward",
  • a jeśli nie, czy jest równe napisowi "backward".

Jeżeli żaden z tych warunków nie jest prawdziwy, sterowanie trafia do gałęzi else, czyli "przypadku domyślnego". Dla argumentu "left" oba porównania są fałszywe, bo to inny napis niż "forward" i "backward". W efekcie zostanie wykonany kod opisany jako obsługa nieprawidłowego kierunku.

Dlaczego pozostałe odpowiedzi są błędne?

  • Stwierdzenie, że robot poruszy się do przodu, byłoby prawdziwe tylko wtedy, gdyby argument wynosił dokładnie "forward".
  • Stwierdzenie, że robot poruszy się do tyłu, byłoby prawdziwe tylko dla argumentu "backward".
  • "Funkcja zwróci błąd" nie wynika z tego kodu: samo podanie innej wartości napisu nie powoduje wyjątku w Pythonie. Błąd mógłby wystąpić dopiero, gdyby w gałęzi else (lub innej) znajdował się kod, który jawnie zgłasza wyjątek albo odwołuje się do nieistniejących elementów.

W praktyce sterowania robotem taki układ jest typowy do walidacji komend: nieznane polecenie powinno trafić do bezpiecznej obsługi (np. zatrzymanie, komunikat diagnostyczny, log), zamiast powodować niekontrolowane zachowanie.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Gałąź else wykonuje się wtedy, gdy żaden z wcześniejszych warunków if ani elif nie jest spełniony. To "przypadek domyślny" używany np. do obsługi niepoprawnych danych wejściowych, logowania błędnych komend albo wyboru bezpiecznego działania.
Ponieważ w kodzie porównujesz napisy: direction == "forward" oraz direction == "backward". Napis "left" nie jest równy żadnemu z nich, więc oba warunki są fałszywe. W takiej sytuacji interpreter przechodzi do gałęzi else.
Nie. Sam fakt podania innego napisu (np. "left") nie wywołuje wyjątku. Wyjątek pojawi się tylko wtedy, gdy program jawnie go zgłosi (np. raise) albo wykona niedozwoloną operację. W tym przykładzie nieobsługiwane wejście jest przechwycone przez else.
Najczęściej w gałęzi else robi się działanie bezpieczne: zatrzymanie ruchu, ustawienie prędkości na zero, wysłanie komunikatu do operatora, zapis do logu lub zwrócenie kodu statusu. Dzięki temu błędna komenda nie powoduje niekontrolowanego ruchu i ułatwia diagnostykę.
Najczęściej myli się "co by było w realnym robocie" z tym, co wynika z warunków w kodzie. Drugi błąd to pomijanie gałęzi else i zakładanie, że program ma tylko dwa przypadki. Trzeci: automatyczne uznanie, że nieznana wartość zawsze daje wyjątek.
Możesz użyć łańcucha if/elif/else, ale przy wielu komendach wygodniejsze bywa mapowanie w słowniku (komenda → funkcja) albo w nowszym Pythonie użycie match-case. Kluczowe jest, by mieć też przypadek domyślny dla wartości nieobsługiwanych.
Komentarze (linie zaczynające się od #) nie są wykonywane przez interpreter. Logika wyboru gałęzi działa, ale bez dodatkowych instrukcji gałąź else nie zrobi "nic praktycznego". Na egzaminie ocenia się jednak poprawne wskazanie, która gałąź zostałaby wybrana.
Wyjątek warto rozważyć, gdy niepoprawny argument oznacza błąd programisty i nie powinien wystąpić w normalnym działaniu (np. błąd integracji modułów). W sterowaniu robotem często preferuje się jednak bezpieczną obsługę i zwrot statusu, aby system nie zatrzymał się awaryjnie.
W testach jednostkowych wywołaj funkcję z wartościami poprawnymi ("forward", "backward") i kilkoma niepoprawnymi (np. "left", pusty napis, None jeśli dopuszczasz). Sprawdź, czy wywołuje się właściwa ścieżka: log, status lub zatrzymanie.
Tak. Porównanie napisów w Pythonie jest czułe na wielkość liter, więc "Forward" i "forward" to różne wartości. Jeśli komendy mogą przyjść w różnych formach, przed porównaniem zwykle normalizuje się wejście (np. lower()) albo stosuje stały zestaw dozwolonych wartości.
info

Statystycznie 70% uczniów zna prawidłową odpowiedź. średnio łatwe

Eksperci podkreślają: "Dla argumentu "left" warunki direction == "forward" i direction == "backward" nie są spełnione, więc wykonuje się gałąź else."

Źródła:

  • Python Software Foundation, "The Python Tutorial" – "4. More Control Flow Tools" (if/elif/else), https://docs.python.org/3/tutorial/controlflow.html (dostęp: 2026-03-01)
  • Python Software Foundation, "The Python Language Reference" – "Compound statements" (if statement), https://docs.python.org/3/reference/compound_stmts.html#if (dostęp: 2026-03-01)
  • Python Software Foundation, "Built-in Exceptions" (kiedy powstają wyjątki), https://docs.python.org/3/library/exceptions.html (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja Pythona: instrukcje sterujące (if/elif/else)
  • Krótkie ćwiczenia z przewidywania przepływu programu (trace/flow)
  • Materiały o walidacji danych wejściowych i obsłudze błędów w programach sterujących

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego