Python turtle ile desen çizmek: döngüden fraktala kod örnekleri
Turtle, birkaç komutla ekranda çizim yaptırır ve algoritmik düşünmeyi gözle görülür kılar. Döngüyle çokgen ve spiral, özyinelemeyle Koch eğrisi çizmeyi kısa kod örnekleriyle öğrenirsiniz.
Bir bakışta
- Turtle, Python'un standart kütüphanesinde gelir. Python belgesine göre Tk arayüzü paketine dayanır; Linux dağıtımlarında ayrı kurulması gerekebilir.
- Desen, tekrarlanan küçük bir kuraldır. İlerle ve dön komutlarını döngüye koymak çokgeni, parametreyi büyütmek spirali verir.
- Fonksiyon, deseni parametreli ve yeniden kullanılabilir yapar. Uzunluk ve kenar sayısı parametre olduğunda aynı fonksiyon farklı şekiller üretir.
- Özyineleme, fraktalın doğal diliyle yazılmasıdır. Fonksiyon kendini daha küçük parçalarla çağırır; durma koşulu temel durumdur.
- Hız, animasyonu kapatıp ekranı toplu güncellemekten gelir. Derin fraktallarda tracer ve update kullanmak çizimi belirgin biçimde hızlandırır.
Turtle neden algoritmik çizim için iyi bir başlangıçtır?
Turtle'da ekranda bir kaplumbağa vardır. Siz ona ilerle, dön, kalemi kaldır komutlarını verirsiniz; kaplumbağa gittiği yere çizgi bırakır. Bu basit model, algoritmanın sonucunu anında gözle görmenizi sağlar: bir döngüyü yanlış yazdığınızda şekil bozulur, doğru yazdığınızda desen belirir.
Bu yüzden turtle, döngü, fonksiyon ve özyineleme gibi kavramları somutlaştırmak için sık kullanılır. Bir sayıyı yazdıran program soyuttur; kenar sayısını değiştirince çokgenin değiştiğini görmek ise sezgiseldir. Aynı zamanda sınırlıdır: turtle, hızlı ya da veri odaklı çizim aracı değildir. Veri grafikleri için başka kütüphaneler, etkileşimli yaratıcı kodlama için başka ortamlar daha uygundur; turtle'ın değeri öğretici ve deneysel çizimdedir.
Python belgesine göre turtle standart kütüphanenin parçasıdır ve çalışmak için Tk arayüz paketine ihtiyaç duyar. Windows ve macOS için python.org yükleyicileri bunu içerir; bazı Linux dağıtımlarında ayrıca kurulması gerekir. İçe aktarırken hata alıyorsanız mesajda Tk ile ilgili bir ifade geçiyorsa bu pakettir.
İlk program ve temel komutlar
Belgedeki önerilere uyarak turtle'ı kısa bir adla içe aktarın. Her şeyi birden içe aktaran biçimden kaçının: Python belgesi bunun çok sayıda nesneyi getirdiğini ve ad çakışmasına yol açabileceğini söyler.
import turtle as t t.speed(0) for _ in range(4): t.forward(100) t.left(90) t.done()
forward verilen uzaklık kadar ilerler, left saat yönünün tersine verilen açı kadar döner. Açı, varsayılan olarak derecedir. speed ile 0 verilirse animasyon kapanır ve çizim ani gerçekleşir; belge hız için sayısal bir değer ya da fast, slow gibi adlar kabul ettiğini söyler. done, olay döngüsünü başlatır ve belgenin deyişiyle turtle programının son ifadesi olmalıdır. Onu yazmazsanız betik biter ve pencere kapanır.
Dosyanıza turtle.py adını vermeyin; yerel dosya standart modülün önüne geçer ve içe aktarma bozulur. Bu kısa döngü karenin dört kenarını çizer; döngüyle desenin en küçük örneğidir.
Kalemi kaldırmak için penup, indirmek için pendown, belirli bir noktaya gitmek için goto kullanılır. Böylece çizgi bırakmadan başka bir konuma taşınıp yeni bir şekil çizilebilir. Dolgu için begin_fill ve end_fill kullanılır; belge, doldurmanın end_fill çağrıldığında yapıldığını belirtir.
Öğrenme basamakları
Turtle ile ilerlemek, bu basamakları sırayla çıkmaktır. Önce tek tek komutlarla elle bir şekil çizersiniz; sonra tekrarı döngüye taşırsınız; sonra bu döngüyü bir fonksiyona sararsınız; en son fonksiyonun kendini çağırdığı özyinelemeli çizime geçersiniz. Her basamak, öncekinin eksik bıraktığı soruya cevap verir: komutlar çok uzadığında döngü, döngü tekrar edilecekse fonksiyon, parçalar kendine benzediğinde özyineleme.
Bu sırayı atlamayın. Özyinelemeye doğrudan atlamak, ne olduğunu anlamadan kopyalanmış bir kodla sonuçlanır. Önce kareyi elle, sonra döngüyle çizin; sonra bunun farklı kenar sayılarına nasıl genelleştiğine bakın.
Her basamak bir öncekinin üzerine kurulur
Turtle ile algoritmik düşünme
- Komutİlerle, dön, kalemi yönet.
- DöngüAynı adımı tekrarlayarak çokgen ve spiral üret.
- FonksiyonDeseni parametreli, yeniden kullanılır yap.
- ÖzyinelemeKendini küçülterek çağıran fonksiyonla fraktal çiz.
Döngüyle çokgen ve spiral
Düzgün bir çokgen çizmek için gereken tek fikir, tam turun kenar sayısına bölünmesidir. Kapalı bir yolda her köşede dönülen açıların toplamı tam turdur; kenar sayısı kadar eşit dönüş yapıldığında kaplumbağa başladığı yere ve yöne geri döner. Bu yüzden bir fonksiyon yazabilirsiniz:
def cokgen(kenar, uzunluk): for _ in range(kenar): t.forward(uzunluk) t.left(360 / kenar)
Kenar sayısını artırdıkça şekil daireye yaklaşır; kenar uzunluğunu küçültmek şekli sayfaya sığdırır. Aynı fonksiyonla üçgen, altıgen ve çok kenarlı yaklaşık daire çizersiniz.
Spiral için uzunluğu her adımda büyütürsünüz:
for adim in range(40): t.forward(adim * 5) t.left(90)
Burada açı sabit, uzunluk artan bir değerdir. Açıyı bir derece değiştirmek kareye yakın ama kayan bir spiral üretir; açı küçük bir farkla oynadığında desen belirgin biçimde dönüşür. Algoritmik çizimin keyfi buradadır: bir parametreyi değiştirip sonucu gözlemek.
Sık bir hata, açı yerine yön karıştırmaktır: left ile right'ı değiştirmek deseni aynalar. Sonuç beklediğiniz gibi değilse önce döngü sayısına ve açıya, sonra uzunluğa bakın.
Özyineleme ile fraktal: Koch eğrisi
Özyinelemede bir fonksiyon, problemi kendi küçük bir benzeriyle çözer. Koch eğrisi bunun klasik örneğidir: bir doğru parçasını üçe bölersiniz; ortadaki parçanın yerine dışa doğru bir tepe koyarsınız; elde edilen dört parçanın her birine aynı kuralı uygularsınız.
def koch(uzunluk, derinlik): if derinlik == 0: t.forward(uzunluk) return for aci in (60, -120, 60, 0): koch(uzunluk / 3, derinlik - 1) t.left(aci)
Temel durum, derinliğin sıfır olduğu andır: artık bölme yapmadan düz çizgi çizilir. Aksi hâlde fonksiyon dört kez kendini daha kısa uzunluk ve bir eksik derinlikle çağırır; aralarındaki dönüşler tepeyi oluşturur. Çağrı olarak koch(300, 3) denenebilir; derinliği artırdıkça şekil ayrıntı kazanır.
Özyinelemeyi anlamak için iki soru işe yarar. Durma koşulu nedir? Her çağrıda problem küçülüyor mu? Temel durum yoksa ya da problem küçülmüyorsa program sonsuza kadar çağrı yapar ve Python derinlik hatası verir.
Derinlik arttıkça çizgi sayısı katlanarak çoğalır. Büyük derinlikte animasyon yavaş görünür. Çözüm, animasyonu kapatıp ekranı toplu güncellemektir:
t.hideturtle() t.tracer(0) koch(300, 3) t.update() t.done()
Belgeye göre tracer ile sıfır vermek animasyonu kapatır; bu durumda ekranı update çağrısıyla kendiniz yenilersiniz. Koch eğrisini bir üçgenin her kenarına uygularsanız kar tanesi şeklini elde edersiniz.
Sık yapılan hatalar ve nereden başlanır?
Pencere hemen kapanıyorsa done ya da exitonclick eksiktir. Belge, exitonclick'in tıklamayla pencereyi kapattığını ve olay döngüsüne girdiğini belirtir.
Çizim beklediğinizden farklıysa dönüş açısını ve döngü sayısını kontrol edin; küçük açı hataları desenin kapanmamasına yol açar. Her seferinde tek parametre değiştirerek ilerleyin.
Özyinelemede derinlik sınırı hatası, temel durum eksik ya da erişilemez olduğu anlamına gelir. Önce küçük bir derinlikle deneyin.
Öğrenme yolu olarak şunu izleyin: düzgün çokgenler, ardından açı ve uzunluk oynayan spiraller, sonra renk ve dolgu, en son kendine benzeyen yapılar. Her adımda önceki programı küçük bir değişiklikle genişletin; sıfırdan başlamak yerine çalışan bir sürümü bozmadan evrimleştirin.
Turtle sınırlarına geldiğinizde yeni araç aramak makuldür. Veriyi çizime bağlamak ya da etkileşim eklemek için yaratıcı kodlama ortamlarına ve veri görselleştirme kütüphanelerine geçebilirsiniz.
Çizim bozulduğunda hata genellikle birkaç yerdedir
Turtle'da yaygın yanlışlar
Bu beceriyi Mindset programlarında nerede çalışırsınız?
Python ile Veri Görselleştirme ve Üretken Tasarım programında 'Python ile Algoritmik Tasarım' ve 'Veri Sanatı ve Üretken Tasarım Temelleri' modülleri buradaki fikirlerin, yani algoritmayla desen üretmenin alanıdır. Python ile Programlama Eğitimi'nin 'Döngüler', 'Fonksiyonlar' ve 'Sınıflar ve Objeler' modülleri ise döngü ve fonksiyon temelini verir.
Python'a yeni başlayanlar, görsel tasarımla kodu birleştirmek isteyenler ve öğretmenler için uygundur.
İlgili Mindset programı
Python ile Veri Görselleştirme ve Üretken Tasarım
Sık sorulan sorular
Turtle penceresi neden hemen kapanıyor?
Betik bittiğinde Python pencereyi kapatır. Belgeye göre done ya da mainloop çağrısı olay döngüsünü başlatır ve turtle programının son ifadesi olmalıdır. Tıklamayla kapanan bir pencere isterseniz exitonclick de kullanılabilir.
Turtle ile yaptığım çizim neden çok yavaş?
Varsayılan olarak her hareket canlandırılır. speed ile sıfır vermek animasyonu kapatır; daha fazla hız için tracer ile sıfır verip çizimi bitirince update çağırmak ekranı toplu günceller. Derin fraktallar için bu ikisi birlikte işe yarar.
Import turtle hatası alırsam ne yapmalıyım?
Hata mesajı Tk ile ilgili bir modülü anıyorsa Tk arayüz paketi eksiktir. Python belgesine göre python.org yükleyicileri Windows ve macOS için bunu içerir; bazı Linux dağıtımlarında ayrı bir paket olarak kurulur. Dağıtımınızın belgelerine bakın.
Turtle ile p5.js ya da Processing arasında nasıl seçim yapılır?
Turtle komut tabanlıdır ve algoritma mantığını öğretmek için uygundur. p5.js ve Processing ise etkileşimi, hareketi ve gelişmiş grafikleri hedefler. Önce turtle ile kavramı öğrenip sonra yaratıcı kodlama ortamlarına geçmek makul bir sıradır.
Özyinelemeyi turtle olmadan da öğrenebilir miyim?
Evet, ancak turtle ile görmek özyinelemenin çalışma biçimini sezgisel kılar. Bir çağrının daha küçük bir çağrıyı tetiklediğini gözle izleyebilirsiniz. Temel durumu ve problemi küçültmeyi anlamak için küçük derinliklerle başlayın.