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:
1 2 |
while koşul: ifade(ler) |
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:
1 2 3 4 |
print('No:1') print('No:2') ... print('No:9') |
Döngü kullanılarak çözüm:
1 2 3 4 5 6 |
count = 0 while (count < 10): print('No:', count) count = count + 1 print("Bye!") |
Çıktı:
1 2 3 4 5 6 7 8 9 10 11 |
No: 0 No: 1 No: 2 No: 3 No: 4 No: 5 No: 6 No: 7 No: 8 No: 9 Bye! |
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.
1 2 3 4 5 |
var = 1 while (var == 1) : # Sonsuz döngü, hep true değeri döndürür. print("Sonsuz döngü") print("Bye!") #Bye demek kısmet olmayacak. |
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.
1 2 3 4 5 6 |
count = 0 while count < 5: print(count, " sayısı 5'ten küçük") count = count + 1 else: print(count, " sayısı 5'ten küçük değil.") |
1 2 3 4 5 6 |
0 sayısı 5'ten küçük 1 sayısı 5'ten küçük 2 sayısı 5'ten küçük 3 sayısı 5'ten küçük 4 sayısı 5'ten küçük 5 sayısı 5'ten küçük değil. |
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,
1 2 3 |
flag = 1 while (flag): print('Merhaba') #sonsuz döngü, ifade tek satır olduğu için yanına yazılır print("Bye!") #hiçbir zaman ulaşamayacağımız bir bye... |
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:
1 2 |
for 'arttırılan_değer' in 'sıra': ifade(ler) |
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.
1 2 3 4 5 6 7 8 |
for harf in 'Python': # İlk örnek print('Geçerli harf: ', harf) meyveler = ['banana', 'apple', 'mango'] for meyve in meyveler: # İkinci örnek print('Geçerli meyve:', meyve) print("Bye!") |
1 2 3 4 5 6 7 8 9 10 |
Geçerli harf: P Geçerli harf: y Geçerli harf: t Geçerli harf: h Geçerli harf: o Geçerli harf: n Geçerli meyve: banana Geçerli meyve: apple Geçerli meyve: mango Bye! |
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.
1 2 3 4 5 6 |
fruits = ['banana', 'apple', 'mango'] meyveler = ['banana', 'apple', 'mango'] for index in range(len(fruits)): print('Geçerli meyve:', meyveler[index]) #index ile ulaşım print("Bye!") |
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,
1 2 3 4 5 6 7 8 9 10 11 12 13 |
for harf in 'Python': # İlk örnek if harf == 'h': break print('Geçerli harf :', harf) var = 10 # İkinci örnek while var > 0: print('Geçerli değer :', var) var = var -1 if var == 5: break print("Bye!") |
1 2 3 4 5 6 7 8 9 |
Geçerli harf : P Geçerli harf : y Geçerli harf : t Geçerli değer : 10 Geçerli değer : 9 Geçerli değer : 8 Geçerli değer : 7 Geçerli değer : 6 Bye! |
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.
1 2 3 4 5 6 7 8 9 10 11 |
for harf in 'Python': # İlk örnek if harf == 'h': continue print('Geçerli harf:', harf) var = 10 # İkinci örnek while var > 0: var = var - 1 if var == 5 or var == 8: continue print('Geçerli değer :', var) print("Bye!") |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Geçerli harf: P Geçerli harf: y Geçerli harf: t Geçerli harf: o Geçerli harf: n Geçerli değer : 9 Geçerli değer : 7 Geçerli değer : 6 Geçerli değer : 4 Geçerli değer : 3 Geçerli değer : 2 Geçerli değer : 1 Geçerli değer : 0 Bye! |
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.
1 2 3 4 5 |
for harf in 'Python': if harf == 'h': pass print('Bu pass bloğu içinde') print('Geçerli harf:', harf) |
1 2 3 4 5 6 7 8 |
Geçerli harf: P Geçerli harf: y Geçerli harf: t Bu pass bloğu içinde Bu pass bloğu içinde Geçerli harf: h Geçerli harf: o Geçerli harf: n |
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.
1 2 3 4 5 6 7 8 9 10 11 12 |
sayi = 653 #herhangi bir sayı yazılabilir asal = True for i in range(2, sayi): if sayi % i == 0: print(i) asal = False break if asal == True: print("Asal sayı") else: print("Asal değil") |
1 |
Asal sayı |
1 2 3 4 5 6 7 8 9 |
#1 ile 100 arası asal sayılar for sayi in range(2, 100): asal = True for i in range(2, sayi): if sayi % i == 0: asal = False break if asal: print(sayi) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 |