Rozdział 12 · Wiele fascynujących mini-projektów!
Projekt: Grafika pikselowa na siatce
algorytm → danych → graf: zagnieżdżony lista decyduje, co rysować, a zagnieżdżona pętla decyduje jak.
Zastosowanie
nested listnested forTurtlePoziom
★★★★ challenge
Rezultat
pixel art
Co tworzymy
Most między danymi a grafiką: macierz z zer i jedynek — oraz program, który rysuje
według niej obraz. 0 — pusto, 1 —
wypełniony kwadrat.
0
1
2
3
4
0
0
1
0
1
0
1
1
1
1
1
1
2
1
1
1
1
1
3
0
1
1
1
0
4
0
0
1
0
0
setka_piksel_art.py
import turtle
screen = turtle.Screen()
screen.setup(width=360, height=360)
artist = turtle.Turtle()
artist.speed(0)
artist.hideturtle()
artist.penup()
picture = [
[0, 1, 0, 1, 0],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[0, 1, 1, 1, 0],
[0, 0, 1, 0, 0],
]
razmer = 40
for row_index, row in enumerate(picture):
for col_index, value in enumerate(row):
if value == 1:
x = -100 + col_index * razmer
y = 100 - row_index * razmer
artist.goto(x, y)
artist.pendown()
artist.fillcolor("#DB2777")
artist.begin_fill()
for _ in range(4):
artist.forward(razmer)
artist.right(90)
artist.end_fill()
artist.penup()
screen.exitonclick()
Rezultat
Algorytm
setka_piksel_art.py
picture = [
[0, 1, 0, 1, 0],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[0, 1, 1, 1, 0],
[0, 0, 1, 0, 0],
]
razmer = 40
for row_index, row in enumerate(picture):
for col_index, value in enumerate(row):
if value == 1:
x = -100 + col_index * razmer
y = 100 - row_index * razmer
artist.goto(x, y)
artist.pendown()
artist.begin_fill()
for _ in range(4):
artist.forward(razmer)
artist.right(90)
artist.end_fill()
artist.penup()
Zagnieżdżona pętla – łańcuch znaków wiersz, kolumna po kolumnie
Zewnętrzna pętla (rozdział 10) przechodzi po łańcuch znaków macierzy, wewnętrzna — po wartościach w wierszu; ta sama schematyczna jak w macierzy z rozdziału 11 (§11.11), tylko teraz dla każdej jednostki rysowany jest kwadrat, a nie tylko drukowana liczba.
Challenge
Zmiana JEDNA: Twoje zdjęcie
Zastąp picture własną macierzą zer i jedynek o rozmiarze 5×5 (lub innym rozmiarze) – litery, emotikony, dowolny wzór. Algorytm nie wymaga zmian.
Debug Lab
Co się stanie, jeśli pomieszasz miejsca w wzorze współrzędnych
row_index oraz col_index?
debug_lab_grid.py
x = -100 + row_index * razmer # było col_index
y = 100 - col_index * razmer # było row_index
Obraz okaże się odbity lustrzanie (transponowany)
Wiersze i kolumny zamieniają się — tam, gdzie powinna być szeroka pozioma część serca, pojawi się wydłużona pionowa część. Wzory współrzędnych muszą być bardzo starannie sprawdzane względem znaczenia każdego indeksu.
Praktyka: pixel art w swojej matrycy
Moduł turtle otwiera natywne okno Python – uruchamiane lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie