Bir cümlelik özet
Döngü, aynı adımları tekrar tekrar yazmadan bilgisayara veya robota birçok kez yaptırmamızı sağlayan yapıdır.
Neden önemli?
Bir karakterin kenarı 100 adımlık bir kare çizmesini istediğini düşün. Aynı iki komutu ("ilerle", "dön") dört kez tek tek yazabilirsin. Peki ya bir robotun 50 adım ilerlemesini istiyorsan? Aynı komutu 50 kez yazmak hem yorucu hem de hataya açıktır.
Döngü tam da burada işe yarar. "Bu adımları N kez tekrarla" diyerek uzun bir işi tek bir küçük blokla anlatırız. Kod kısalır, okunması kolaylaşır ve bir yeri değiştirmek istediğimizde tek bir satırı düzeltmek yeterli olur.
Bir önceki derste koşulları öğrenmiştik: program bir duruma bakıp karar veriyordu. Döngüler de çoğu zaman koşullarla birlikte çalışır; çünkü bir döngünün ne zaman duracağına da bir koşul karar verir.
Sabit sayılı döngü: "N kez tekrarla"
Kaç kez tekrar edeceğimizi baştan biliyorsak sabit sayılı döngü kullanırız. Kodlamada bunun adı çoğu zaman for döngüsüdür.
Örnek: Karakterin kare çizmesi
Bir kare dört kenardan oluşur ve her köşede 90 derece dönülür. Aynı iki adımı dört kez tekrarlarız.
4 kez tekrarla
100 adım ilerle
90 derece sağa dön
Sayıyı ve açıyı değiştirirsek başka şekiller çıkar. Bir üçgen için 3 kez tekrarlar ve 120 derece döneriz. Bir altıgen için 6 kez tekrarlar ve 60 derece döneriz. Kural şudur: dönüş açısı, 360'ı kenar sayısına böldüğümüzde çıkan değerdir.
Sayaç nedir?
Döngü kaçıncı tekrarda olduğunu bilmek isteyebilir. Bu sayıyı tutan değişkene sayaç denir. Sayaç genellikle 0 veya 1'den başlar ve her tekrarda bir artar.
sayac değeri 1 olsun
5 kez tekrarla
"Adım numarası: " ve sayac değerini yaz
sayac değerini 1 artır
Bu döngü "Adım numarası: 1", "Adım numarası: 2" diye 5'e kadar yazar.
Python'da for döngüsü
Python'da sabit sayılı döngü for ve range ile yazılır. range(4) bize 0, 1, 2, 3 sayılarını verir; yani dört tekrar.
# Robot 4 kez ileri gidip sağa dönsün (kare)
for kenar in range(4):
print("100 adım ilerle")
print("90 derece sağa dön")
Burada kenar bir sayaçtır ve her turda 0'dan 3'e kadar değer alır.
Koşullu döngü: "koşul sağlanana kadar"
Bazen kaç kez tekrar edeceğimizi baştan bilmeyiz. "Engel görene kadar ilerle" gibi bir görevde döngü, bir koşul doğru olduğu sürece devam eder. Kodlamada bunun adı while döngüsüdür.
Örnek: Robotun engele kadar ilerlemesi
Mesafe 10 santimetreden büyük olduğu sürece tekrarla
1 adım ilerle
mesafeyi yeniden ölç
Robot her adımda önündeki mesafeyi ölçer. Mesafe 10 santimetre veya altına düştüğünde koşul artık sağlanmaz ve döngü kendiliğinden durur. Kaç adım atacağını önceden bilmemize gerek yoktur.
Python'da while döngüsü
# Robot 50 adım ilerlesin (sayaçla kontrol)
adim = 0
while adim < 50:
print("1 adım ilerle")
adim = adim + 1
adim değişkeni 0'dan başlar. Her turda 1 artar. adim 50'ye ulaştığında adim < 50 koşulu yanlış olur ve döngü biter. Ekrana tam 50 kez metin yazılır; bu Python örneği fiziksel bir motoru çalıştırmaz.
İç içe döngüler
Bir döngünün içine başka bir döngü koyabiliriz. Buna iç içe döngü denir. Dıştaki döngü her bir turunda, içteki döngünün tamamını çalıştırır.
Örnek: 3'e 3 nokta ızgarası
3 kez tekrarla (satırlar)
3 kez tekrarla (sütunlar)
bir nokta koy ve yana kay
bir satır aşağı in ve başa dön
Dıştaki döngü 3 kez, içteki döngü her seferinde yine 3 kez çalışır. Toplamda 3 × 3 = 9 nokta konur. İç içe döngüler tablo, ızgara ve satır-sütun düzeni gerektiren işlerde çok kullanışlıdır.
Mini uygulama
Bir karakterin beşgen (5 kenarlı şekil) çizmesini sağlayan bir döngü yaz.
- Kaç kez tekrar etmen gerekiyor?
- Her köşede kaç derece dönmelisin? (İpucu: 360'ı kenar sayısına böl.)
- Sözde kodunu yaz, sonra istersen Python'a çevir.
Bittiğinde tekrar sayısını 5 yerine 8 yap ve dönüş açısını yeniden hesapla. Şekil nasıl değişti?
Döngünün sınırını test et
Görev: 1’den n’ye kadar sayıları topla. Bu örnekte n, sıfır veya pozitif bir tam sayıdır. Kod yalnız sayısal hesap yapar; donanım bağlantısı gerekmez. Önce çıktıyı tahmin et, sonra testlerle karşılaştır.
def toplam(n):
sonuc = 0
for sayi in range(1, n + 1):
sonuc += sayi
return sonuc
assert toplam(0) == 0
assert toplam(1) == 1
assert toplam(4) == 10| n | Beklenen | Neden |
|---|---|---|
| 0 | 0 | Döngü gövdesi çalışmaz. |
| 1 | 1 | Yalnız 1 eklenir. |
| 4 | 10 | 1 + 2 + 3 + 4 |
Şimdi range(1, n + 1) yerine range(1, n) yazıldığını düşün: n=4 için 6 elde edilir, çünkü 4 eklenmez. Son sınırın dahil olup olmadığını açıklamak, yalnız bir doğru çıktı görmekten daha güçlü bir kontroldür.
Sık yapılan hatalar
Sonsuz döngü
Bir while döngüsünde durma koşulu hiç sağlanmazsa program asla durmaz. Buna sonsuz döngü denir.
adim değeri 0 olsun
adim 50'den küçük olduğu sürece tekrarla
1 adım ilerle
Bu kodda adim hiç artmıyor; yani hep 0 kalıyor ve 0 < 50 her zaman doğru. Döngü sonsuza kadar döner. Çözüm: döngünün içinde sayacı mutlaka artırmak.
Bir eksik veya bir fazla tekrar (off-by-one)
Çok karşılaşılan bir hata, döngünün bir kez eksik ya da bir kez fazla dönmesidir. Karakter kare çizerken 4 yerine 3 kez tekrarlarsa bir kenar eksik kalır. range kullanırken de range(1, 5) ifadesinin 5'i içermediğini hatırlamak gerekir; bu ifade 1, 2, 3, 4 verir.
Kontrol için basit bir yöntem: döngü bitince kaç tur döndüğünü küçük bir örnekle sayarak doğrula.
Güvenlik notu
Gerçek bir robotta while döngüsü kullanırken, motorların beklenmedik biçimde durmadan çalışmaya devam etmesi mümkündür. Bu yüzden her zaman güvenli bir durdurma yöntemi bırak: bir dur düğmesi, bir zaman sınırı veya sayaçla bir üst sınır. Motor ve pil içeren denemeleri bir yetişkinle birlikte yap ve robotu ilk denemede yumuşak, boş bir alanda çalıştır.
Ders özeti
- Döngü, aynı adımları tekrar tekrar yazmadan çok kez yaptırmamızı sağlar.
- Sabit sayılı (for) döngü, tekrar sayısını baştan bildiğimizde kullanılır.
- Koşullu (while) döngü, bir koşul sağlandığı sürece çalışır ve durma koşuluna bağlıdır.
- Sayaç, döngünün kaçıncı turda olduğunu tutan değişkendir.
- Sonsuz döngü ve off-by-one hataları döngülerde en sık yapılan iki hatadır.
Kontrol soruları
- Sabit sayılı döngü ile koşullu döngü arasındaki temel fark nedir?
- Bir karakterin altıgen çizmesi için döngüyü kaç kez tekrarlaman ve her köşede kaç derece dönmen gerekir?
- Sayaç nedir ve ne işe yarar?
- Aşağıdaki while döngüsü neden sonsuza kadar döner?
adim değeri 0 olsun
adim 10'dan küçük olduğu sürece tekrarla
"ilerle" yaz
for sayi in range(3):satırı döngüyü kaç kez çalıştırır?
Cevaplar
- Sabit sayılı döngüde tekrar sayısını baştan biliriz. Koşullu döngüde ise döngü, bir koşul doğru olduğu sürece devam eder; tekrar sayısı koşula bağlıdır ve bazı örneklerde önceden hesaplanabilir.
- 6 kez tekrarlamak ve her köşede 60 derece (360 ÷ 6) dönmek gerekir.
- Sayaç, döngünün kaçıncı turda olduğunu tutan bir değişkendir. Genellikle her tekrarda bir artarak turları saymamızı sağlar.
- Çünkü
adimdeğeri döngünün içinde hiç artmıyor. Hep 0 kaldığı içinadim 10'dan küçükkoşulu her zaman doğru olur ve döngü hiç durmaz. Döngünün içindeadimdeğeri artırılmalıdır. - 3 kez.
range(3)ifadesi 0, 1, 2 değerlerini üretir; bu da üç tekrar demektir.
Kaynak ve doğrulama notu
“Döngüler: Tekrar Eden İşleri Kolaylaştırmak” dersi için doğrulama odağı Sabit sayılı döngü: "N kez tekrarla" ile Sayaç nedir? arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Bu dersteki algoritmalar, örnek girdiler elle izlenerek ve beklenen çıktılarla karşılaştırılarak doğrulanmıştır. Sözde kod, belirli bir programlama diline bağlı kalmadan düşünme sırasını görünür kılmak için kullanılır.
Sonraki ders
Değişkenler: Bilgiyi Saklamak