Yazdığımız kod kendini bazen bir kaç defa bazen defalarca tekrar edebilir, tekrar etmesi gerekebilir. Aynı kodu defalarca yazmak kötü bir programcılık örneğidir şayet tekrarlanan kodlar gereksiz kod fazlalığı yapar. İşte bunun için programlama dillerinde döngü (loop) denilen mekanizmalar mevcuttur. Python dilinde 2 döngü mevcut: For ve While döngüleri.
For döngüsü daha çok kaç kez tekrar edeceği belli olan döngüler de kullanılır. Örneğin "5 kere tekrar etsin", "falanca listenin eleman sayısı kadar tekrar etsin" dediğiniz kod bloklarında for döngüsü tercih edilir.
While ise biraz daha kaç kez tekrar edeceği belli olmayan döngüler de kullanılır. Örneğin "internet bağlantısı olduğu sürece", "saat 17:00 olmadığı sürece", "sonuç doğru olduğu sürece" gibi.
Hadi ayrı ayrı işleyelim.
Dediğimiz gibi for döngüsü kaç kez tekrar edeceği bildiğimiz / tahmin ettiğimiz durumlarda kullanılır. Programcılıkta ise buna "iterasyon" denilmektedir. Bu yüzdendir ki listeleri itere ederken sıklıkla kullanmaktayız. Aşağıda ki yapıdadır.
for i in listemiz:
kodlar
Burada listemiz isimli lise elemanlarını tek tek i değişkenine aktardık. Daha sonra iki nokta koyup tekrar edecek kod bloklarını 4 adet boşluk bırakarak (1 tab) yazmaya başladık. Şimdi içi isim dolu bir liste hayal edelim.
Not: Etkileşimli kabuk üzerinde çalıştık. ">>>" olanlar etkileşimli kabuk üzerinde yazılan kodlardır. Diğerleri text editöre yazılıp çalıştırılmıştır.
>>> kisiler = ["hürol aslan", "jale bektaş", "evrim ersin kangal"]
Bu listedeki bütün elemanlara tek tek ulaşıp işlem yapmak istiyorsak for döngüsünü kullanabiliriz.
>>> for kisi in kisiler:
... print(kisi)
>>> "hürol aslan"
>>> "jale bektaş"
>>> "evrim ersin kangal"
Gördüğünüz gibi listenin bütün elemanlarına tek tek ulaşıp ekrana bastırdık. Yani aslında burada kisiler listesini itere etmiş olduk.
>>> for i in range(10):
... print(i)
>>> 0
>>> 1
.
..
...
>>> 9
Yukarıda ki kodda daha önce görmediğimiz bir fonksiyon mevcut: range() fonksiyonu. Bu fonksiyon argüman olarak aldığı sayıca elemandan oluşan bir liste oluşturur. Dolayısı ile 0 dan 9 a kadar ardışık sayılardan oluşan bir liste oluşturdu ve bunları tek tek erkana bastırdı.
Gelin beraber küçük bir oyun tasarlayalım. 0 dan 100 e kadar olan sayıları ekrana bastıran bir program yazalım. Ama program 3 ve 3 ün katları olan sayılarda "Fizz", 5 ve 5 in katları olan sayılarda "Buzz", hem 3 hem 5 in katı olan sayılarda ise "FizzBuzz" yazsın.
for i in range(1, 100):
if i % 3 == 0 and i % 5 == 0:
print("FizzBuzz!")
elif i % 3 == 0:
print("Fizz!")
elif i % 5 == 0:
print("Buzz!")
else:
print(i)
Gelin kodları satır satır inceleyelim.
Yazdığımız programı çalıştırınca böyle bir çıktı üretecek. Bu uygulama, yani FizzBuzz programlamaya yeni başlayanlar için yapılması istenen uygulamalardan biridir. Döngüleri ve koşullu ifadeleri kullanarak ortaya çıkarılan başarılı programlardan biridir.
Yukarıda da bahsettiğimiz gibi While, daha çok ne kadar tekrar edeceği çok bilinmeyen durumlarda kullanılan bir döngüdür. Genel manada bir koşulun doğru olup olmadığını denetleyerek kendini tekrar eder. Temel yapısı aşağıda ki şekilde olduğu gibidir.
>>> while True:
... kodlar
while dedikten sonra bir koşul belirleriz. Bu koşul sağlandığı sürece while bloğunda ki kodlar çalışmaya devam edecektir.
>>> while True:
... print("Python Programlama Dili")
Yukarıda ki kodu yazıp çalıştırdığınız zaman ekrana bilgisayarınızın gücü yettiğince "Python Programlama Dili" yazısı dökülmeye başlayacaktır. Sürekli bu işlem devam edecektir, ta ki siz CTRL + C diyerek programı hata verdirerek durdurana kadar.
>>> deger = 1
>>> while deger <= 10:
... print(deger)
... deger = deger + 1
Yazdığımız kodu satır satır incelersek eğer deger değişkenine 1 değerini atıyoruz. Daha sonra deger 10'dan küçükse yada eşitse, ekrana deger değişkenini bastır daha sonra değer değişkenine 1 ekle dedik.
İlk döngüde değer 1 olduğu için ekrana 1 yazdıracak ve 1 ekleyerek 2 olacak.
2 sayısı yine 10 dan küçük olduğu için yine ekrana bastıracak ve 1 daha ekleyerek 3 olacak. Bu şekilde 10 olana kadar devam edecek. Ekrana 10 bastırıp 11 olduktan sonra koşulu sağlamadığı için döngü bitecek.
Koşul haricinde programdan çıkmak için break
ifadesi kullanılır.
deger = 1
while deger <= 10:
if deger == 5:
break
print(deger)
print("Teşekkürler...")
Burada normalde döngümüz deger 10 olana kadar çalışmayı sürdürmesi gerekiyor. Ancak değer 5 olduğunda döngü içerisinde ki koşula yakalanacağı için döngü sona erecektir. 5 bastıktan sonra devam etmeyecek, teşekkürler deyip program sonlanacaktır.
Örnek bir program ile konuyu noktalayalım. Hadi bir sayı tahmin oyunu yazalım.
sayi = 54
print("Bir sayı tuttum, hadi tahmin et! (1 ile 100 arası).")
while True:
tahmin = int(input("Tahmininiz: "))
if tahmin < 1 or tahmin > 100:
print("Sayı 1 ila 100 arasında.")
elif tahmin > sayi:
print("Yanlış! Daha küçük.")
elif tahmin < sayi:
print("Yanlış! Daha büyük.")
else:
print("Tebrikler, doğru tahmin!")
break
Basit ve güzel bir sayı tahmin oyunu yazdık, gerçi sayıyı kendimiz tanımladık ama olsun. Ziyanı yok, ilerledikçe bilgisayara da tuttururuz.
Döngü "doğru olduğu sürece" çalışacak şekilde ayarladık. Her seferinde kullanıcıdan veri alarak integer tipine çevirdik ve 1 ile 100 arasında olup olmadığını denetledik. Tahmin edilen sayı, tanımlanan sayıdan büyük ise büyük küçük ise küçük dedik. Doğru ise tebrikler dedik ve break
diyerek döngüyü sonlandırdık.
Tebrikler, 2. programımızı da yazmış olduk!