Scratch'ten Python'a Geçiş: Blok Karşılıkları ve İlk 5 Program
Scratch bloklarının Python karşılıkları tek tabloda: döngü, koşul, değişken, liste ve fonksiyon. Girinti gibi kritik farklar ve çalışır ilk 5 Python programı.
Scratch'te karakterleri hareket ettirdin, skor tuttun, belki küçük bir oyun bitirdin. Şimdi sıra yazılı kodda. İyi haber şu: Scratch'te öğrendiğin her kavramın Python'da bir karşılığı var. Yeni öğreneceğin şey düşünme biçimi değil, aynı fikirleri yazmanın yeni bir yolu.
Bu rehberin sonunda şunları yapabileceksin:
- En çok kullanılan Scratch bloklarının Python'daki karşılığını tablodan bulup kullanmak,
- Scratch ile Python arasındaki dört kritik farkı (girinti, iki nokta,
=ile==, metin ile sayı) tanımak, - Scratch'te yapmaya alışkın olduğun beş programı Python'da yazıp çalıştırmak.
Kodları yazmak için bir şey kurmana gerek yok: tarayıcıdaki kod editörünü aç, dil olarak Python'u seç ve başla.
Bloklar ile yazılı kod arasındaki fark
Scratch'te bloklar yalnızca doğru yere oturur; "eğer" bloğunun içine bir koşul koymayı unutamazsın, çünkü boşluk göze batar. Python'da ise her şeyi sen yazarsın. Bu biraz daha dikkat ister ama karşılığında çok daha fazla özgürlük verir: Uzun bir programı Scratch'te sayfalarca blokla kurmak yerine Python'da birkaç satırla yazabilirsin.
Python, satırları tıpkı Scratch'teki blok yığını gibi yukarıdan aşağıya çalıştırır. Bir bloğun "içinde" olmak Scratch'te bloğun ağzına yerleşmekle, Python'da ise satırın içeriden (girintili) başlamasıyla gösterilir.
Scratch blokları ve Python karşılıkları
Aşağıdaki tabloda Scratch blokları Türkçe arayüzdeki adlarıyla verildi; sürüme göre adlarda küçük farklar görebilirsin. Tabloyu yazdırıp masanın yanına koymak ilk haftalarda çok işe yarar.
| Scratch bloğu | Python karşılığı | Not |
|---|---|---|
| yeşil bayrak tıklandığında | (programın ilk satırı) | Python programı çalıştır düğmesine basınca en üstten başlar. |
| Merhaba! de | print("Merhaba!") | Konuşma balonu yerine ekrana yazı yazar. |
| Adın ne? diye sor ve bekle / cevap | cevap = input("Adın ne? ") | Cevap her zaman metin olarak gelir. |
| skor değerini 0 yap | skor = 0 | Değişkeni önce "Değişken Oluştur" ile yaratmak gerekmez; ilk atama yeterli. |
| skor'u 1 değiştir | skor = skor + 1 ya da skor += 1 | İkisi aynı işi yapar. |
| 10 kez tekrarla | for i in range(10): | Altındaki girintili satırlar 10 kez çalışır. |
| sürekli tekrarla | while True: | Çıkmak için break kullanılır. |
| ... olana kadar tekrarla | while not kosul: | Koşul doğru olana kadar döner. |
| eğer ... ise | if kosul: | Sonundaki iki nokta zorunlu. |
| eğer ... ise / değilse | if kosul: ... else: | Arada başka koşullar için elif var. |
| ... ve ... / ... veya ... / ... değil | and / or / not | Örnek: if yas > 9 and yas < 13: |
| ... = ... (karşılaştırma) | == | Tek = değer atar, çift == karşılaştırır. |
| 1 ile 10 arasında rastgele sayı tut | random.randint(1, 10) | En üstte import random gerekir; 1 ve 10 dahildir. |
| elma ve muz'u birleştir | "elma" + "muz" | Sayıyı metne eklemek için str(sayi) kullanılır. |
| elma'nın uzunluğu | len("elma") | Sonuç 4'tür. |
| 1 saniye bekle | time.sleep(1) | En üstte import time gerekir. |
| listeye ekle | liste.append(oge) | Liste liste = [] ile oluşturulur. |
| listenin 1. öğesi | liste[0] | Dikkat: Python'da sayma 0'dan başlar. |
| Bloklarım: blok oluştur | def blok_adi(): | Kendi komutunu (fonksiyon) tanımlar. |
| 10 adım git / 15 derece dön (kalem) | turtle.forward(10) / turtle.right(15) | Çizim için Turtle rehberine bak. |
Dikkat etmen gereken dört kritik fark
1. Girinti, bloğun "içi" demektir
Scratch'te bir bloğu "tekrarla"nın ağzına koyduğunda o blok döngünün içindedir. Python'da aynı şeyi satırı 4 boşluk içeriden başlatarak söylersin. Girintisi olmayan satır döngünün dışındadır ve döngü bittikten sonra bir kez çalışır.
2. İki nokta üst üste unutulmaz
for, while, if, elif, else ve def satırları her zaman : ile biter. Bu iki nokta, "şimdi içerik geliyor" demektir; Scratch'teki bloğun açık ağzı gibi düşünebilirsin.
3. Tek eşittir ile çift eşittir farklı şeylerdir
Scratch'te "skor değerini 0 yap" ile "skor = 0" (yeşil karşılaştırma bloğu) farklı renkte ve şekilde bloklardır, karıştırılmaz. Python'da ikisi de eşittir işaretiyle yazılır: skor = 0 değer atar, skor == 0 ise "skor 0'a eşit mi?" diye sorar.
4. Metin ile sayı ayrıdır
Scratch, "5" yazısını gerektiğinde sayı gibi kullanır. Python bunu yapmaz: input ile gelen her şey metindir. Hesap yapacaksan int() ile sayıya çevirmelisin. Tersine, bir sayıyı metinle + kullanarak birleştireceksen str() ile metne çevirmelisin.
liste[0] olur. Bu, geçiş döneminde en sık karışan konulardan biridir.İlk 5 program: Scratch'te bildiğin, Python'da yeniden
Aşağıdaki her programda önce Scratch'te nasıl kurulduğunu, sonra Python karşılığını göreceksin. Kodları kopyalamak yerine elle yazmanı öneririz; parmakların işaretleri ezberledikçe hızlanırsın.
Program 1: Konuşan kedi
Scratch'te: yeşil bayrak tıklandığında → "Adın ne?" diye sor ve bekle → "Merhaba" ile cevap'ı birleştir de.
print("Miyav! Ben kod kedisiyim.")
isim = input("Adın ne? ")
print("Merhaba " + isim + ", tanıştığıma sevindim!")
print("Adında", len(isim), "harf var.")
"Zeynep" yazarsan son satır Adında 6 harf var. olur. print içinde virgülle ayrılan parçalar arasına Python kendiliğinden bir boşluk koyar; + ile birleştirirken boşlukları sen eklemelisin.
Program 2: Roket geri sayımı
Scratch'te: sayac değerini 5 yap → 5 kez tekrarla: sayac de, 1 saniye bekle, sayac'ı -1 değiştir → "Kalkış!" de.
import time
sayac = 5
for i in range(5):
print(sayac)
time.sleep(1)
sayac = sayac - 1
print("Kalkış!")
Çıktı, her satır arasında birer saniye beklenerek 5, 4, 3, 2, 1 ve ardından Kalkış! olur. print("Kalkış!") satırının girintisiz olduğuna dikkat et: döngünün dışında olduğu için yalnızca bir kez, en sonda çalışır. Onu da içeri itersen her saniye "Kalkış!" yazar.
Program 3: Not hesaplayıcı
Scratch'te: "Kaç puan aldın?" diye sor ve bekle → eğer cevap > 84 ise "Pekiyi" de, değilse eğer cevap > 69 ise ... şeklinde iç içe "eğer-değilse" blokları.
Scratch'te iç içe geçen "eğer-değilse" blokları Python'da elif ile düz bir merdivene dönüşür ve okuması kolaylaşır:
puan = int(input("Kaç puan aldın? (0-100) "))
if puan > 100 or puan < 0:
print("Puan 0 ile 100 arasında olmalı.")
elif puan >= 85:
print("Pekiyi! Harika iş.")
elif puan >= 70:
print("İyi! Biraz daha çalışırsan pekiyi gelir.")
elif puan >= 50:
print("Geçtin. Eksiklerini birlikte tamamlayalım.")
else:
print("Bu sefer olmadı, tekrar deneyelim.")
Python koşulları sırayla dener ve ilk doğru olanı çalıştırıp gerisini atlar. Bu yüzden 90 puan için yalnızca "Pekiyi! Harika iş." yazılır; 90, 70'ten de büyük olsa "İyi!" mesajı çıkmaz. 72 girersen İyi! Biraz daha çalışırsan pekiyi gelir. çıktısını görürsün.
Program 4: Sayı tahmin oyunu
Scratch'te: gizli değerini 1 ile 10 arasında rastgele sayı yap → tahmin = gizli olana kadar tekrarla: sor ve bekle, eğer cevap < gizli ise "Daha büyük" de...
import random
gizli = random.randint(1, 10)
tahmin = 0
deneme = 0
while tahmin != gizli:
tahmin = int(input("1 ile 10 arasında bir sayı tahmin et: "))
deneme = deneme + 1
if tahmin < gizli:
print("Daha büyük bir sayı dene.")
elif tahmin > gizli:
print("Daha küçük bir sayı dene.")
print("Bildin! Sayı " + str(gizli) + " idi.")
print("Deneme sayın:", deneme)
Scratch'teki "olana kadar tekrarla" bloğu, Python'da koşulun tersiyle yazılan bir while döngüsüdür: "tahmin gizliye eşit olana kadar" yerine "tahmin gizliden farklı olduğu sürece" (!=). tahmin = 0 satırı önemli: döngü ilk kez kontrol edilirken tahmin değişkeninin bir değeri olmalı. Bu oyunu deneme hakkı ve skor ekleyerek geliştirmek için Python sayı tahmin oyunu rehberine geçebilirsin.
Program 5: Kendi bloğunu yap ve listeyle çalış
Scratch'te: Bloklarım → "satır çiz (uzunluk)" adlı blok oluştur; bir liste yap, öğelerini sırayla gezip her biri için bloğu çağır.
def satir_ciz(uzunluk, isaret):
print(isaret * uzunluk)
boylar = [1, 3, 5, 7]
boylar.append(9)
for boy in boylar:
satir_ciz(boy, "*")
print("Listede", len(boylar), "öğe var. İlk öğe:", boylar[0])
Bu program şu çıktıyı verir:
*
***
*****
*******
*********
Listede 5 öğe var. İlk öğe: 1
Burada üç yeni şey var. def, Scratch'teki "blok oluştur" gibi kendi komutunu tanımlar; parantez içindeki uzunluk ve isaret, bloğa eklediğin girdi kutularıdır. "*" * 5 bir metni 5 kez yan yana yazar. for boy in boylar: ise listenin her öğesini sırayla boy değişkenine koyar; Scratch'te bunun için ayrıca bir sayaç değişkeni tutman gerekirdi.
Sık yapılan hatalar
Hata mesajları İngilizcedir ve korkutucu görünebilir, ama en son satır genellikle sorunu söyler. Aşağıdaki mesajlar Python'un güncel sürümlerinden alınmıştır; senin sürümünde ifadeler biraz farklı olabilir. Daha fazla örnek için En sık kod hataları rehberine bak.
| Hata mesajı | Ne oldu? | Çözüm |
|---|---|---|
IndentationError: expected an indented block | if ya da for satırından sonraki satır içeriden başlamamış. | Bloğun içindeki satırları 4 boşluk içeri al. |
SyntaxError: invalid syntax. Maybe you meant '==' ... | Koşulda == yerine = yazılmış: if puan = 100: | Karşılaştırmada çift eşittir kullan. |
SyntaxError: expected ':' | if, for, while ya da def satırının sonunda iki nokta yok. | Satırın sonuna : ekle. |
TypeError: can only concatenate str (not "int") to str | Metin ile sayı + ile birleştirilmeye çalışılmış. | Sayıyı str() ile çevir ya da print içinde virgül kullan. |
TypeError: '<' not supported between instances of 'str' and 'int' | input ile gelen metin, int() yapılmadan sayıyla karşılaştırılmış. | int(input(...)) kullan. |
NameError: name 'Print' is not defined | Komut yanlış yazılmış; Python büyük-küçük harfe duyarlıdır. | print küçük harfle yazılır. |
IndexError: list index out of range | Listede olmayan bir sıra numarası istenmiş, çoğu zaman Scratch alışkanlığıyla 1'den sayıldığı için. | İlk öğe [0], son öğe [len(liste) - 1] ya da [-1]. |
Bir de hata mesajı vermeyen ama yanlış çalışan durum var: Program 2'deki print("Kalkış!") gibi bir satırı yanlışlıkla döngünün içine girintilemek. Program çalışır ama beklediğin gibi davranmaz. Böyle durumlarda kendine şu soruyu sor: "Bu satır Scratch'te tekrarla bloğunun içinde mi olurdu, altında mı?"
Kendin dene
Görevler kolaydan zora doğru sıralandı. Hepsini kod editöründe çalıştırarak dene.
- Kedi daha çok konuşsun: Program 1'e en sevdiğin yemeği soran bir satır ekle ve cevabı tek bir cümle içinde kullan.
- Uzun geri sayım: Program 2'yi değiştirerek kullanıcıya "Kaçtan geri sayayım?" diye sor ve o sayıdan başla. İpucu:
rangeiçine de aynı sayıyı yazman gerekiyor. - Harf notu: Program 3'e "AA", "BA", "BB" gibi daha fazla kademe ekle. Kademelerin sırasının neden önemli olduğunu deneyerek gör:
>= 50satırını en üste taşırsan ne olur? - Hak sınırı: Program 4'te oyuncuya en fazla 4 deneme hakkı ver. Hakkı biterse "Kaybettin, sayı ... idi." yazsın. İpucu:
whilekoşulunaand deneme < 4ekleyebilirsin. - Piramit bloğu: Program 5'teki
satir_cizfonksiyonuna bir girdi daha ekle:bosluk. Satırın başına o kadar boşluk koysun. Bu yeni bloğu kullanarak yıldızlardan ortalanmış bir piramit çiz.
Sık sorulan sorular
Scratch'ten Python'a geçmek için ne zaman hazır olunur?
Scratch'te değişken, "tekrarla" ve "eğer" bloklarını kendiliğinden kullanıyor, klavyede kısa cümleleri rahatça yazabiliyorsan hazırsın. Birçok çocuk için bu dönem 10–12 yaş civarına denk gelir, ama belirleyici olan yaş değil bu becerilerdir.
Python'da Scratch'teki gibi karakterler ve çizimler yapılabilir mi?
Evet. Kalem bloklarına en yakın karşılık Python'un turtle modülüdür; ileri git, dön, kalemi kaldır gibi komutlar Scratch'tekine çok benzer. Daha karmaşık oyunlar için ayrıca oyun kütüphaneleri kullanılabilir.
Python'da neden her şeyi İngilizce yazmak zorundayım?
print, if, for gibi anahtar kelimeler İngilizcedir ve değiştirilemez. Ama değişken ve fonksiyon adlarını Türkçe kelimelerle (Türkçe karakter kullanmadan) seçebilirsin: skor, isim, satir_ciz gibi.
Girinti için boşluk mu, Tab tuşu mu kullanmalıyım?
Python'da yaygın kural her seviye için 4 boşluktur. Çoğu kod editörü Tab tuşuna basınca otomatik olarak 4 boşluk ekler. Önemli olan aynı dosyada ikisini karıştırmamaktır.
Scratch'e bir daha dönmemem mi gerekiyor?
Hayır. Scratch bir fikri hızlıca denemek ve görsel projeler yapmak için hâlâ çok kullanışlıdır. Bir algoritmayı önce Scratch'te kurup sonra Python'a çevirmek, geçiş döneminde verimli bir çalışma yöntemidir.