7C: Döngüler

7. derste üç bölüm var; A, B, C. İstediğiniz sırayla devam edebilirsiniz.

Şu ana kadar temel programlama komutları (değer atama, yazdırma, vb.) ve hangi cümelelerin  if ifadeleriyle kontrol edildiğini öğrendik. Bu derste döngüleri (loop) (tekrarlama  anlamında repetition veya iteration olarak da adlandırılır) öğreneceğiz. Döngü, bilgisayarda aynı (veya benzer) işleri defalarca tekrarlama yöntemidir. Bu derste Python'daki   while ve for  döngülerini ele alacağız.

while Döngüleri

while (... iken) ifadeleri bir kod parçasını, koşul gerçekleştiği sürece tekrarlamakta kullanılır. Bir örnek verelim:

Genel yapı şöyledir:

  • İlk satır  while «condition» (koşul): Buradaki koşul «condition» doğru True veya yanlış False  sonucunu getiren ifadedir.  (if ifadelerinde gördüğümüz gibi bir Boolean deyimi.)
  • Daha sonra, girintisi hizalanmış satırlardan oluşan bir blok  (yine if ifadelerindeki gibi) içinde defalarca tekrarlanmasını istediğimiz ifadeler yer alır. Buna gövde denir.
  • Programı çalıştırdığımızda tekrarlama şöyle başlar:
    • Koşul test edilir; eğer koşul doğru  True  ise gövde satırları işleme konur ve koşul yanlış  False çıkana kadar, bu şekilde tekrar tekrar başa dönülür.

Yukarıdaki örnekte kalanSüre 0'dan büyük olduğu sürece gövde işleme konup başa dönüldü.

Coding Exercise: İleri sayım
Yukarıdaki örneği değiştirin, programda 1'den 10'a kadar ileri sayarak, 10 olduğunda  Blastoff!  yazdırın
You may enter input for the program in the box below.

Bu döngülerle sonsuza kadar çalışan programlar yazmak çok kolaydır: infinite loop.
Example
Sonsuz döngü
Oluşacak hata "Time Limit Exceeded"; çünkü CS Circles web sunucusu bir süre limitini zorunlu kılar; 1 saniye sonunda program sona erdirilir. Eğer programı evde çalıştırsaydınız, sonsuza kadar çalışırdı (ya da siz durduruna kadar,  Ctrl-C'ye basarak durdurabilirsiniz). 

for Döngüleri

Python'daki bir diğer döngü de  for (...dığı için) döngüsüdür. Pek çok durumda bu iki döngü türü de (for/while) kullanılabilir ama biri her zaman daha kolay olan yoldur, dolayısıyla ikisini de öğrenmeliyiz.  for  döngüleri, işlem tekrarlarını sınırlı bir sayı aralığında (veya daha sonra göreceğimiz gibi belli bir veri listesi içinde) gerçekleştirmek için kurulur.

İşte size bir  for döngüsü örneği.

Sayısal for döngülerinin genel yapısı

for «değişken» in range(«ilkDeğer», «sonDeğer»):
  «aynı girintide hizalanmış komut satırları bloğu; döngü gövdesi»
Daha önce belirttiğimiz gibi gövdeyi oluşturan blok birden fazla satırdan oluşabilir, önemli olan bu satırların girintilerinin aynı hizada olmasıdır. Önce ilkDeğer  başlangıç noktası alınarak döngü gövdesi değişken  kullanılarak yürütülür.  Sonra ilkDeğer+1, ilkDeğer+2, vd. ile gövde döngüsü  sonDeğer-1,  sayısına gelene kadar döngü gövdesi değişken,  üzerinden işletilir. sonDeğer-1, işlem yapılacak son nokta olduğundan döngü son kez tekrar edilerek bitirilir.

Döngü sonDeğer-1, noktasında sona erer ve sonDeğer'i içermez!
Example

İç içe iki for  döngüsü örneğine bakalım.

Example
Bu kod 5×5 bir kare yazdırır.  
Not: Bir x sayısını 10'la çarpıp 1 eklediğimizde, aslında x sayısının sonuna  1 rakamını ekliyoruz. Mesela, (1867*10)+1=18671.

Coding Exercise: Üçgen
Önceki programı iki şekilde değiştirin. Önce, kare yerine, çöyle bir üçgen çizdirin: ◤. Sonra, 5 çizgi yerine, istenilen ölçüyü kullanıcı girdisi olarak  input() ile alın. Mesela,  input 3  olduğunda sonuç şöyle olmalı:

111
11
1
İpucu için tıklayın. 
You may enter input for the program in the box below.

Kes break ve Devam continue Deyimleri

Kes(break ) deyimi while ve for döngülerinin acil çıkış kapısı gibidir:  break döngü gövdesinin sonundan komutlara ilerlemeyi sağlar. İşte break deyimi ile bir örnek: inputun tüm satırlarını "END" yazanı bulana kadar okuyacak.

Example
Inputun tüm satırlarını döndürmek

continue deyimi bir döngünün kalanını atlayıp, gövdeyi sonraki aşamadan devam ettirmemizi sağlar (buna sonraki tekrarlama "iteration" denir).

Example

break ve continue  deyimlerini birlikte kullandığımız görselleştirilmiş bir örnek. Sonucu tahmin edebilir misiniz?

Alıştırmalar

Coding Exercise: Kare Sayımı
Kare sayılar K × K formunda tamsayılardır, yani mesela 9 bir karedir çünkü 3 × 3 = 9. Inputla kullanıcıdan n tamsayısını alan bir program yazın, sonuç olarak da n'den daha küçük tüm sayıların karelerini artan sırayla alt alta yazdırsın. Eğer input 16 ise, sonuç şöyle olmalı:

1
4
9
İpucu
You may enter input for the program in the box below.

Coding Exercise: Atla
Yukarıdaki "Inputun tüm satırlarını döndürmek" alıştırmasını genişterek (bunu biz sizin için kopyaladık) yeni bir özellik daha ekleyin: satırda  SKIP kelimesi varsa yazdırmasın ve de sayaça ekleme yapmasın. Örneği görmek için programı çaıştırın. İpucu
You may enter input for the program in the box below.

Coding Exercise: Çarpanları Bulmak
Eğer a × b = n ise,  a × b  n sayısının çarpanlarıdır.  Bu alıştırmada yazacağınız program inputtan pozitif n tamsayısını alarak, bu sayının tüm çarpanlarını yazdırsın; aşağıda n=10 örneğine göre verdiğimiz biçimi kurmanız gerekiyor.

1 kere 10 eşittir 10
2 kere 5 eşittir 10
5 kere 2 eşittir 10
10 kere 1 eşittir 10
İpucu
You may enter input for the program in the box below.