Rozdział 7 · Głębokie zanurzenie w Turtle
Debugowanie grafiki
Bardziej zaawansowane grafiki wprowadzają nowe, konkretne sposoby popełniania błędów — analizujmy je według schematu „objawy → powodują → korekcję”
Grafika dodaje kilka nowych, bardziej zaawansowanych Turtle sposobów Aby zrobić coś źle, przeanalizujmy je według schematu „objawy → wywołać → korektę”
| Objaw | Przyczyna | Poprawka |
|---|---|---|
| Okrąg jest narysowany w niewłaściwym kierunku niż się spodziewano | Promień ma nieprawidłowy znak — dodatni zamiast ujemnego lub odwrotnie | Sprawdź znak: promień dodatni jest przeciwny do ruchu wskazówek zegara, promień ujemny to |
| Tekst wcale nie pojawił się tam, gdzie się spodziewałeś | Zapomniałem przesunąć żółwia goto()/penup() wcześniej write() — tekst wyświetlany jest z pozycji CURRENT | Pan do pożądanego punktu przed rozpoczęciem write() |
| Fill nie przemalował, mimo że fillcolor() był ustawiony | Kontur pomiędzy begin_fill() oraz end_fill() nie zbliżył się – żółw nie wrócił do punktu startowego | Sprawdź, czy ścieżka tworzy ZAMKNIĘTĄ figurę — koniec pokrywa się z początkiem |
| RGB-color powoduje błąd typu „nieprawidłowa wartość koloru” | Liczby nie odpowiadają aktualnemu colormode — na przykład, (255, 0, 0) at colormode(1.0) | Sprawdź liczby w trybie aktywnym – 0-255 lub 0,0-1,0 |
| Kod działa bez błędów, ale na ekranie nic się nie pojawia | Wezwany screen.tracer(0), ale zapomniany screen.update() — ekran ani razu się nie odświeżył | Dodaj screen.update() po wszystkich komendach rysowania |
| Na ekranie pozostała pieczątka, chociaż wydawało się, że powinna zniknąć | clearstamp() wywołana z nieprawidłowym id, albo id w ogóle nie został zapisany podczas wywołania stamp() | Zachowaj id każdego stamp() w zmiennej/lista od razu przy tworzeniu |
| Dwa żółwie poruszają się w ten sam sposób, choć powinny się od siebie oddalić | Obie zmienne faktycznie odnoszą się do TEGO samego żółwia (np. bob = alice zamiast bob = turtle.Turtle()) | Twórz każdą żółwia osobnym wywołaniem turtle.Turtle() czy przez clone() |
| Kursor żółwia wygląda w złą stronę, mimo że porusza się poprawnie | Zdezorientowany heading (kierunek ruchu) i tilt (wizualna rotacja kursora) – są niezależne | heading zmieniać left()/right()/setheading(); wygląd – tylko tilt()/tiltangle() |
| Część obrazu nie jest widoczna, choć kod rysuje ją dokładnie | Współrzędne wyszły poza granice okna — nie jest ono nieskończone | Sprawdź screen.setup()/screensize() i trzymaj współrzędne w obrębie widocznego obszaru |
tracer(0) bez update() — przeanalizujmy to szczegółowo
To tak powszechny i tak dyskretny błąd, że zasługuje na osobną analizę. Program działa całkowicie, bez żadnego błędu, ale ekran pozostaje nieskazitelnie pusty:
tracer_bug.py
screen.tracer(0)
for _ in range(4):
artist.forward(100)
artist.right(90)
# jeśli nie ma tu screen.update(), okno pozostanie puste!
Model mentalny
tracer(0) — to nie „wyłączyć rysowanie”, lecz „nie pokazywać go na ekranie, dopóki nie poproszą”. Rysowanie nadal się odbywa naprawdę, po prostu jest niewidoczne, dopóki nie zostanie wywołane update().Praktyka: Debugowanie grafiki (bez Turtle)
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji