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ę”

ObjawPrzyczynaPoprawka
Okrąg jest narysowany w niewłaściwym kierunku niż się spodziewanoPromień ma nieprawidłowy znak — dodatni zamiast ujemnego lub odwrotnieSprawdź 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 CURRENTPan do pożądanego punktu przed rozpoczęciem write()
Fill nie przemalował, mimo że fillcolor() był ustawionyKontur pomiędzy begin_fill() oraz end_fill() nie zbliżył się – żółw nie wrócił do punktu startowegoSprawdź, 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 pojawiaWezwany 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ę poprawnieZdezorientowany heading (kierunek ruchu) i tilt (wizualna rotacja kursora) – są niezależneheading zmieniać left()/right()/setheading(); wygląd – tylko tilt()/tiltangle()
Część obrazu nie jest widoczna, choć kod rysuje ją dokładnieWspółrzędne wyszły poza granice okna — nie jest ono nieskończoneSprawdź 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
Otwórz praktykę →