06. Döngüler

Bir programlama dili öğrenirken “karar verme (if)” ve döngüler (for, while) en önemli konulardır. Bu bölüm döngüler konusuna ayrılmıştır. Döngü, sırasıyla yürütülen birkaç ifadeyi tekrar tekrar yazmak yerine döngü bloğu içine yazmaktır. Belli bir şarta kadar döngü devam eder. Şart sağlanınca döngü dışına çıkılır ve program kaldığı yerden çalışmaya devam eder.

Döngü, basitçe aşağıdaki akış şemasıyla açıklanabilir.

Aslında bir döngü için sadece bir if ve geri dönüşü sağlayan bir kod (çoğu eski programlama dilinde goto deyimi) yeterlidir. Ancak, programlama dilleri bize daha karmaşık yürütme yollarına izin veren çeşitli kontrol yapıları sağlar. Şimdi, bu yapılar üzerine basit örnekler yapalım.

6.1. While loop

Python programlama dilindeki bir while döngüsü ifadesi, belirli bir koşul doğru olduğu sürece tekrar tekrar bir hedef ifadesi yürütür. Sözdizimi:

Burada, ifade (ler) tek bir açıklama veya bir ifade bloğu olabilir. Durum herhangi bir ifade olabilir ve doğru herhangi bir sıfır olmayan değerdir. Durum doğru olduğunda döngü yinelenir. Durum yanlış olduğunda program kontrolü, döngüyü takip eden çizgiye geçer.

Python’da, bir programlama yapısından sonra aynı sayıda karakter boşluğu tarafından girilen tüm ifadelerin tek bir kod bloğunun parçası olduğu düşünülür. Python, gruplama ifadeleri yöntemi olarak girinti kullanır. Örneğin:

Döngü kullanılarak çözüm:

Çıktı:

Döngü olmadan önce 9 satırda yazdığımız kodu, döngü sayesinde 3 satıra düşürdük.

6.1.1. Sonsuz döngü

Bir koşul asla FALSE olmuyorsa, bir döngü sonsuz döngü haline gelir. Döngüleri kullanırken kullanırken dikkatli olmalısınız, çünkü bu durumun hiçbir zaman bir FALSE değerine dönüşme olasılığı yoktur. Bu asla bitmeyen bir döngü ile sonuçlanır. Böyle bir döngü sonsuz döngü olarak adlandırılır. Ancak, istemci programlarının gerektiğinde ve onunla iletişim kurabilmesi için, sunucunun sürekli olarak çalışması gereken istemci / sunucu programlamasında sonsuz bir döngü yararlı olabilir. Sonsuz döngülü bir kod yazalım.

Jupyter programında stop işaretine tıklayıp sonsuz döngüyü durdurabilirsiniz. Terminal ekranında ise CTRL+C ile program sonlandırılabilir.

6.1.2. Else ifadesini döngüde kullanma

Python programlama dilinin güzel taraflarından biri de diğer dillerde olmayan ilginç özelliklere sahip olmasıdır. Bunlardan biri de else ifadesini döngüde kullanmadır. Else ifadesi for döngüsüyle kullanılırsa, döngü yinelenen listeyi yineleyen bittiğinde else ifadesi çalıştırılır. Başka bir deyim bir while döngüsü ile kullanılırsa, koşul yanlış olduğunda, else ifadesi yürütülür.

Aşağıdaki örnek, 5’den küçük olduğu sürece bir sayıyı yazdıran bir while ifadesiyle başka bir ifadenin birleşimini gösterir, aksi halde ifade çalıştırılır.

6.1.3. Tek satırda döngü

İf deyimi sözdizimine benzer şekilde, while cümlesi yalnızca tek bir ifadeden oluşuyorsa, while başlığıyla aynı satır üzerine yerleştirilebilir. Örneğin,

Sonsuz döngü kesmeyi 6.1.1.’de anlatmıştık.

6.2. For Loop

Çoğu programlama dilinin olmazsa olmazıdır. Özellikle bir liste veya string içinde öğelere erişmek için yineleme yeteneğine sahiptir. Sözdimi:

Bir “sıra” bir ifade listesi içeriyorsa, önce değerlendirilir. Daha sonra, sıradaki ilk öğe attırılan_değer değişkenine atanır. Ardından, ifadeler bloğu yürütülür. Listedeki her öğe attırılan_değer öğesine atanır ve ifade (ler) bloğu tüm dizi bitene kadar yürütülür. Şart sağlandığında döngü biter.

C# ve Java gibi dillerde foreach kullanan arkadaşlar, bu kullanım şeklinin foreach çok benzediğini görmüşlerdir. Şimdi index üzerinden aynı verilere ulaşmaya çalışalım.

6.2.1. İndeks sırası ile öğelere ulaşım

Bir önceki örnekte indeks kullanmadan verilere ulaşmayı başardık. Bir listedeki öğelere indeks ile ulaşmamız mümkündür. Örneğin meyveler listesinde mango öğesine meyveler[2] şeklinde ulaşabiliriz.

range hiçbir değer verilmediğinde 0’dan başlar ve belirli bir sayıya kadar teker teker gider. len komutu nesnenin uzunluğu hakkında bilgi verir. Burada 3 oluncuya kadar index değeri 0’dan başlayıp artar. range esnek kullanıma sahip bir yapıdır. Range metodu:

range([start], stop[, step])

Burada start (başlangıç değeri) ve step (adım değeri) seçimlik parametrelerdir. Eğer sadece 3 değerini verirsek stop (durma değeri) aktive olur ve start otomatik olarak 0 değerini alırken step’te 1 değerini alır. Örneğin range(2, 10, 2) şeklinde bir tanımlamada start=2, stop=10, step=2 değerini alır. range(2, 10) tarzı bir tanımlamada step değeri 1 olur.

6.3. Döngü kontrol ifadeleri

Döngü kontrol deyimleri, programın normal akışını değiştirir. Python aşağıdaki üç kontrol ifadelerini desteklemektedir.

  • break
  • continue
  • pass

6.3.1. break ifadesi

Geçerli döngüyü sonlandırır ve C’deki geleneksel break ifadesinde olduğu gibi sonraki ifadede yürütmeyi sürdürür. Break deyimi hem süre hem while hem de for için kullanılabilir. Eğer içiçe döngüde kullanıyorsanız kullandığınız konumdaki döngüyü durdurur. Diğer blokları çalışmaya devam eder. Örneğin,

6.3.2. continue ifadesi

Continue şartı gerçekleşince altta kalan tüm ifadeler atlanıp döngünün başına gidilir. Hem for hem de while döngüsünde kullanılabilir.

Birinci örnekte sevmediğim bir harfi attım. Alt satıra geçmemesine dikkat edelim. İkinci örnekte ise iki sayısal değeri yazdırmadım. Continue ifadesi kullanıldığı noktadan itibaren döngünün başına gittiğini ve döngüyü sonlandırmadığına dikkat edin.

6.3.3. pass ifadesi

Continue ifadesi gerçekleştiği anda döngünün başına gidilirken pass ifadesinin bulunduğu blok içindeki kodlar çalışmaya devam eder.

6.4. Asal sayı örneği ile döngü konusu

Asal sayı bulma tüm programlama dillerinde yapılabilecek temel bir antrenman olarak görülebilir. İlk örneğimiz bir sayının asal olup olmadığına karar verirken ikinci örneğimiz 1 ile verdiğimiz bir sayı arasında asal sayıları bulmayı hedeflemektedir.