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 santimetreye 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. Toplam tam 50 adım atılır.
İç 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?
Uygulama laboratuvarı: Döngüler: Tekrar Eden İşleri Kolaylaştırmak
Döngüler: Tekrar Eden İşleri Kolaylaştırmak konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada Sabit sayılı döngü: "N kez tekrarla" ile Sayaç nedir? arasındaki ilişkiyi kullanarak açık bir algoritma, sözde kod ve test tablosu hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.
Görev senaryosu
Şu senaryoyu ele al: yanlış girdiyi fark edip yeniden isteyen bir kontrol sistemi. Dersin ana hedefi “Aynı adımları tekrar tekrar yazmak yerine döngülerle otomatikleştirmeyi; sabit sayılı ve koşullu tekrarı öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.
- Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
- En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
- Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
- Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
- Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.
Başarı ölçütleri
- Adımlar açık ve tek anlamlı mı?
- Başlangıç ve bitiş koşulu belli mi?
- Normal, sınır ve hatalı durumlar denendi mi?
- Gereksiz tekrar veya adım var mı?
- Başka biri algoritmayı aynı sonuçla uygulayabiliyor mu?
“Döngüler: Tekrar Eden İşleri Kolaylaştırmak” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın yanlış girdiyi fark edip yeniden isteyen bir kontrol sistemi senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, Sabit sayılı döngü: "N kez tekrarla" ve Sayaç nedir? ilişkisini daha küçük adımlara bölerek düzelt.
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 ve kaç kez döneceğini önceden bilmeyiz.
- 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