Python Turtle ile Çizim: Kare, Yıldız, Spiral ve Desenler
Python turtle modülüyle kare, çokgen, yıldız ve renkli spiral çiz. Döngü, fonksiyon, renk ve dolgu komutlarını çocuklara uygun örneklerle adım adım öğren.
Python'un turtle modülü, ekranda kalem tutan küçük bir kaplumbağayı komutlarla yürütmeni sağlar. "100 adım ileri git", "90 derece sağa dön" dersin, kaplumbağa gittiği yere çizgi çizer. Yazdığın her satırın sonucunu anında gözünle gördüğün için kodlamaya başlamanın en keyifli yollarından biridir. Bu fikir, çocuklara programlama öğretmek için geliştirilen Logo dilinden gelir ve Python'a hazır olarak eklenmiştir.
Bu rehberin sonunda şunları yapabileceksin:
- Kaplumbağayı ileri, geri, sağa, sola hareket ettirmek ve koordinatlarla istediğin yere götürmek,
fordöngüsüyle kare, üçgen ve her tür düzgün çokgeni çizmek,- Beş köşeli yıldızın neden 144 derece döndüğünü anlamak,
- Renk değiştirmek, şekillerin içini boyamak ve renkli spiraller yapmak,
- Kendi fonksiyonlarını yazıp yıldızlı bir gökyüzü ve çiçek deseni oluşturmak.
Python'a yeni başlıyorsan önce Python derslerinin ilk birkaç bölümüne bakabilirsin. Blok kodlamadan geliyorsan iyi haber: Scratch'teki "10 adım git" ve "15 derece dön" bloklarının Python karşılığı tam olarak bu rehberde göreceğin komutlar. Ayrıntılar için Scratch'ten Python'a geçiş rehberine göz at.
Turtle kodunu nerede çalıştırmalıyım?
Turtle, Python'un standart kütüphanesinin bir parçasıdır; ayrıca bir şey indirmen gerekmez. Ancak çizim yapmak için ayrı bir pencere açar. Bu yüzden bu rehberdeki kodları en sorunsuz şekilde bilgisayarına kurduğun Python ile çalıştırırsın. Python'u python.org'dan kurduğunda gelen IDLE editörü yeterlidir: File → New File ile yeni dosya aç, kodu yapıştır, kaydet ve F5 ile çalıştır.
Turtle dışındaki Python denemelerin için (döngüler, hesaplamalar, metinler) tarayıcıdaki kod editörünü kullanabilirsin.
turtle.py koyma! Python, import turtle satırını görünce önce kendi klasörüne bakar ve senin dosyanı yükler. Sonuçta AttributeError: module 'turtle' has no attribute 'Turtle' gibi şaşırtıcı bir hata alırsın. Dosyaya kare.py, cizim1.py gibi bir ad ver.Kaplumbağanın dünyası: koordinatlar ve yön
Turtle penceresi bir koordinat düzlemidir. Tam orta nokta (0, 0)'dır. Sağa gittikçe x büyür, sola gittikçe küçülür (eksi olur). Yukarı gittikçe y büyür, aşağı gittikçe küçülür. Kaplumbağa ortada başlar ve sağa doğru bakar.
En çok kullanacağın komutlar şunlar:
| Komut | Ne yapar? |
|---|---|
t.forward(100) | Baktığı yöne 100 adım ilerler. |
t.backward(50) | 50 adım geri gider (yönü değişmez). |
t.right(90) / t.left(90) | Olduğu yerde 90 derece sağa / sola döner. |
t.penup() / t.pendown() | Kalemi kaldırır (çizmeden gider) / indirir (çizerek gider). |
t.goto(x, y) | Doğrudan (x, y) noktasına gider. |
t.circle(50) | Yarıçapı 50 olan bir çember çizer. |
t.color("red") | Kalem ve dolgu rengini kırmızı yapar. |
t.pensize(3) | Çizgi kalınlığını 3 yapar. |
t.speed(0) | Çizim hızını ayarlar: 1 en yavaş, 10 hızlı, 0 en hızlı. |
t.hideturtle() | Kaplumbağayı gizler, sadece çizim kalır. |
İlk çizim: kare
Bir kare çizmek için kaplumbağaya dört kez "ileri git, sağa dön" demen gerekir. Bunu dört kez alt alta yazabilirsin, ama aynı şeyi tekrarlıyorsan bir döngü kullanmanın zamanı gelmiştir:
import turtle
t = turtle.Turtle()
t.shape("turtle")
for i in range(4):
t.forward(100)
t.right(90)
turtle.done()
import turtle: Turtle modülünü programa çağırır.t = turtle.Turtle(): Yeni bir kaplumbağa oluşturur ve onatadını verir. Bundan sonra her komutut.ile başlatırız.t.shape("turtle"): Ok yerine gerçekten kaplumbağa şekli gösterir. Tamamen süs, istersen silebilirsin.for i in range(4):: İçerideki iki satırı 4 kez tekrar eder.turtle.done(): Çizim bitince pencerenin açık kalmasını sağlar. Bu satırı unutursan bazı ortamlarda pencere çizim biter bitmez kapanır.
Kaplumbağa dört kenarı çizdikten sonra tam başladığı noktaya döner ve yine sağa bakar. Toplamda 4 × 90 = 360 derece, yani tam bir tur dönmüştür. Bu gözlem bir sonraki bölümün anahtarı.
Her çokgen için tek fonksiyon
Kareyi çizerken kaplumbağa toplam 360 derece döndü. Bu her kapalı düzgün çokgen için geçerlidir: kaplumbağa başladığı yöne geri dönene kadar tam bir tur atar. O halde her köşede dönmesi gereken açı:
dönüş açısı = 360 ÷ kenar sayısı
Üçgen için 360 ÷ 3 = 120, beşgen için 72, altıgen için 60 derece. Bu kuralı bir fonksiyona dönüştürelim ve 3 kenardan 8 kenara kadar bütün çokgenleri üst üste çizelim:
import turtle
t = turtle.Turtle()
t.speed(0)
def cokgen(kenar_sayisi, uzunluk):
aci = 360 / kenar_sayisi
for i in range(kenar_sayisi):
t.forward(uzunluk)
t.left(aci)
for kenar in range(3, 9):
cokgen(kenar, 60)
turtle.done()
Fonksiyon (def), bir işi bir kez tanımlayıp istediğin kadar kullanmanı sağlar. cokgen(6, 60) yazdığında Python, kenar_sayisi yerine 6'yı, uzunluk yerine 60'ı koyar. Alttaki for kenar in range(3, 9): döngüsü ise fonksiyonu 3, 4, 5, 6, 7 ve 8 değerleriyle sırayla çağırır. Sonuçta aynı köşeden başlayan altı çokgen, iç içe geçmiş bir desen oluşturur.
cokgen(72, 5)), şekil neredeyse bir daireye dönüşür. Bilgisayarlar daireleri de aslında çok sayıda küçük düz çizgiyle çizer.Beş köşeli yıldız ve 144 derecenin sırrı
Yıldızı çizmek için kaplumbağa her köşede çok keskin bir dönüş yapar: 144 derece. Peki neden 144? Yıldızı çizerken kaplumbağa, kare çizerken olduğu gibi bir değil, iki tam tur döner: 2 × 360 = 720 derece. Beş köşe olduğu için 720 ÷ 5 = 144. Bu yıldızın içini de altın sarısıyla boyayalım:
import turtle
ekran = turtle.Screen()
ekran.bgcolor("midnightblue")
t = turtle.Turtle()
t.color("gold")
t.pensize(3)
t.begin_fill()
for i in range(5):
t.forward(150)
t.right(144)
t.end_fill()
t.hideturtle()
turtle.done()
Renkler ve dolgu
turtle.Screen(): Çizim penceresini verir.ekran.bgcolor("midnightblue")ile arka plan rengini değiştiririz.t.color("gold"): Hem kalem hem dolgu rengini ayarlar. Ayrı ayrı ayarlamak istersent.pencolor("red")vet.fillcolor("yellow")kullanabilirsin ya da iki renk birden verebilirsin:t.color("red", "yellow").t.begin_fill()vet.end_fill(): Bu ikisinin arasında çizilen şeklin içi dolgu rengiyle boyanır.end_fill()çalışana kadar boyama yapılmaz.
Renk adları İngilizcedir: "red", "blue", "green", "orange", "purple", "pink", "gold" gibi. Tam istediğin tonu bulmak için "#ff8800" gibi onaltılık (hex) renk kodları da kullanabilirsin; bu kodlar web sayfalarında da kullanılır. Bunu ilk web sayfası rehberinde de göreceksin.
Yıldızı farklı açılarla denemek eğlencelidir. Sadece köşe sayısını ve açıyı değiştirerek farklı yıldızlar elde edebilirsin. Örneğin 7 köşeli bir yıldız için kaplumbağa 3 tur dönebilir: 3 × 360 ÷ 7 ≈ 154,3 derece, ve döngü 7 kez tekrar eder.
Renkli spiral
Şimdi döngünün gücünü gerçekten görelim. Kaplumbağa her adımda biraz daha uzun bir çizgi çizsin ve 90 yerine 91 derece dönsün. O 1 derecelik fark, kareleri her turda hafifçe döndürür ve büyüleyici bir spiral ortaya çıkar:
import turtle
ekran = turtle.Screen()
ekran.bgcolor("black")
t = turtle.Turtle()
t.speed(0)
t.pensize(2)
renkler = ["red", "orange", "yellow", "green", "blue", "purple"]
for i in range(180):
t.pencolor(renkler[i % 6])
t.forward(i * 2)
t.right(91)
t.hideturtle()
turtle.done()
Bu kodda iki önemli fikir var:
- Döngü değişkenini kullanmak:
iher turda bir artar (0, 1, 2, ... 179).t.forward(i * 2)sayesinde çizgiler giderek uzar; son çizgi 358 adım uzunluğundadır. - Kalan (mod) işlemi:
i % 6,i'nin 6'ya bölümünden kalanı verir ve sonuç hep 0 ile 5 arasındadır. Böylece listedeki altı renk sırayla, tekrar tekrar kullanılır: 0 kırmızı, 1 turuncu, ..., 5 mor, 6 yine kırmızı.
Fonksiyonlarla desen: yıldızlı gökyüzü ve çiçekler
Son projede öğrendiğimiz her şeyi birleştiriyoruz. Yıldız çizen bir fonksiyon yazacağız ama bu sefer fonksiyon nereye, ne büyüklükte ve hangi renkte çizeceğini parametre olarak alacak. Sonra random modülüyle gökyüzüne rastgele yıldızlar serpeceğiz. Alt kısma da çemberlerden oluşan iki çiçek ekleyeceğiz.
import turtle
import random
ekran = turtle.Screen()
ekran.bgcolor("midnightblue")
t = turtle.Turtle()
t.speed(0)
t.hideturtle()
def yildiz(x, y, boyut, renk):
t.penup()
t.goto(x, y)
t.pendown()
t.color(renk)
t.begin_fill()
for i in range(5):
t.forward(boyut)
t.right(144)
t.end_fill()
def cicek(x, y, yaprak_sayisi, renk):
t.penup()
t.goto(x, y)
t.pendown()
t.pencolor(renk)
for i in range(yaprak_sayisi):
t.circle(40)
t.left(360 / yaprak_sayisi)
renkler = ["white", "gold", "lightblue", "pink"]
for i in range(15):
x = random.randint(-280, 260)
y = random.randint(0, 260)
yildiz(x, y, random.randint(10, 30), random.choice(renkler))
cicek(-150, -150, 12, "hotpink")
cicek(150, -150, 8, "orange")
turtle.done()
Bu projede neler öğrendik?
- Kalemi kaldırmak:
yildizfonksiyonu öncet.penup()ile kalemi kaldırır,t.goto(x, y)ile hedef noktaya çizgi çekmeden gider, sonrat.pendown()ile kalemi indirir. Bu üçlü olmadan yıldızlar birbirine çizgilerle bağlanırdı. - Parametreli fonksiyon:
yildiz(x, y, boyut, renk)tek tanım, ama 15 farklı yıldız. Çizim mantığı bir yerde durduğu için yıldızın şeklini değiştirmek istersen tek bir yeri düzeltmen yeter. - Rastgelelik:
random.randint(-280, 260)rastgele bir x konumu,random.choice(renkler)listeden rastgele bir renk seçer. Programı her çalıştırdığında farklı bir gökyüzü görürsün. - Çemberden çiçek:
cicekfonksiyonu bir çember çizer, biraz döner, bir çember daha çizer. 12 çember 30'ar derece arayla dizilince bir çiçek ortaya çıkar (360 ÷ 12 = 30).
Pencere küçükse kenara yakın yıldızların bir kısmı dışarıda kalabilir; o zaman randint sınırlarını küçült.
t.speed(0) en yüksek hızdır. Daha da hızlı istersen, çizime başlamadan önce ekran.tracer(0) yazıp ara adımların gösterilmesini kapatabilir, çizim bitince ekran.update() ile sonucu tek seferde ekrana getirebilirsin.Sık yapılan hatalar
- Dosyayı
turtle.pydiye kaydetmek: Yukarıda anlattığımız gibi Python senin dosyanı modül sanar. Dosyanın adını değiştir ve programı yeniden çalıştır. - Pencerenin hemen kapanması: Kodun sonuna
turtle.done()eklemeyi unutma. - İstenmeyen çizgiler:
gotoile yeni bir yere gitmeden öncepenup()demezsen kaplumbağa giderken çizgi bırakır. Gittikten sonrapendown()demeyi unutursan da hiçbir şey çizilmez. - İç açı ile dönüş açısını karıştırmak: Eşkenar üçgenin iç açısı 60 derecedir ama kaplumbağa her köşede 120 derece döner.
t.right(60)yazarsan üçgen değil, altıgenin yarısını çizersin. Kural: dönüş açısı = 360 ÷ kenar sayısı. - Boyanmayan şekil:
begin_fill()yazıpend_fill()'i unutursan şeklin içi boyanmaz. - Yanlış renk adı:
t.color("kirmizi")gibi Türkçe ya da yanlış yazılmış bir adTurtleGraphicsError: bad color stringhatası verir. Renk adlarını İngilizce yaz. - Parantezleri unutmak:
t.penupyazmak hata vermez ama hiçbir şey de yapmaz; komutun çalışması içint.penup()şeklinde parantez gerekir.
Daha fazla hata örneği ve çözümü için Yeni başlayanların en sık kod hataları rehberine bakabilirsin.
Kendin dene
- Ev: Bir kare çiz, üstüne bir üçgen ekleyerek basit bir ev yap. Kapı için kareye küçük bir dikdörtgen ekle. İpucu: üçgenin dönüş açısı 120 derece.
- Gökkuşağı çemberleri: Aynı merkezden büyüyen 6 renkli çember çiz. İpucu: her çemberden önce kalemi kaldırıp kaplumbağayı biraz aşağı taşı, çünkü
circlekaplumbağanın bulunduğu noktadan başlar. - Döndürülmüş kareler: Bir kare çizen fonksiyon yaz, sonra bu kareyi 36 kez, her seferinde 10 derece dönerek çiz. Ortaya çiçeğe benzeyen bir desen çıkacak.
- Yıldız fonksiyonu:
yildiz(kose_sayisi, boyut)adında bir fonksiyon yaz. 5, 7 ve 9 köşeli yıldızlar çizebilsin. İpucu: tek sayıda köşesi olan yıldızlarda dönüş açısı180 - 180 / kose_sayisiolarak hesaplanabilir; 5 için bu 144 eder. - Kendi manzaran: Fonksiyonlarla bir manzara oluştur: güneş (dolu çember), çimen (yeşil dikdörtgen), rastgele yerlerde birkaç ağaç ve çiçek. Her öğe için ayrı bir fonksiyon yaz.
Sık sorulan sorular
Turtle modülünü ayrıca kurmam gerekiyor mu?
Hayır. Turtle, Python'un standart kütüphanesiyle birlikte gelir. Python'u python.org'dan kurduysan import turtle yazman yeterlidir. Çizim ayrı bir pencerede açıldığı için kodları bilgisayarındaki Python ile, örneğin IDLE editöründe çalıştırmak en sorunsuz yoldur.
Çizim penceresi açılıp hemen kapanıyor, ne yapmalıyım?
Kodunun en sonuna turtle.done() satırını ekle. Bu satır, çizim bittikten sonra pencerenin sen kapatana kadar açık kalmasını sağlar. Ayrıca dosyanın adının turtle.py olmadığından emin ol; bu ad modülle çakışır ve hatalara yol açar.
Kaplumbağayı daha hızlı nasıl çizdirebilirim?
t.speed(0) komutu en yüksek çizim hızını seçer. Çok uzun çizimlerde ekran.tracer(0) ile ara adımların gösterilmesini kapatıp çizim bitince ekran.update() ile sonucu tek seferde gösterebilirsin. t.hideturtle() ile kaplumbağayı gizlemek de çizimi biraz hızlandırır.
Turtle hangi yaş için uygun?
Klavyede rahat yazabilen ve temel açı kavramını tanıyan çocuklar, genellikle 10 yaş ve üzeri, turtle ile rahatça çalışabilir. Daha küçük çocuklar aynı ileri git ve dön mantığını önce blok kodlamayla denerse metin tabanlı koda geçiş kolaylaşır. Yetişkin yeni başlayanlar için de döngü ve fonksiyonları görsel olarak anlamanın iyi bir yoludur.
Turtle'dan sonra ne öğrenmeliyim?
Döngü, fonksiyon ve rastgelelik konularında rahatladıysan Python ile sayı tahmin oyunu rehberiyle etkileşimli bir oyun yazabilirsin. Çizimle devam etmek istersen JavaScript'in canvas özelliğiyle tarayıcıda çalışan Pong ve yılan oyunları iyi bir sonraki adımdır.