Python ile “for” Döngüsü Kullanımı
Bu yazımızda, Python programlama dilinde sıkça kullanılan “for” döngüsü kavramını detaylı bir şekilde inceleyeceğiz.
Python “for” Döngüsü
Döngüler, genellikle bir problemin parçalarını adım adım çözmek, bir görevi tekrar etmek ya da bir veri koleksiyonu üzerinde işlem yapmak için kullanılır. “For” döngüsü ise, baştan itibaren ne kadar döneceğini bildiğimiz döngüler için idealdir. Örneğin, bir liste üzerindeki tüm elemanları tek tek işlemek, bir dosyadaki satırları okumak gibi görevler için “for” döngüsü biçilmiş kaftandır.
While döngüsü ile beraber Python’da kullanılan iki temel döngü yapısından biri olan “for” döngüsü, “while” döngüsünden dan farklı olarak sonu belli olan (sınırlı) döngülerde tercih edilir.
Python’da “for” döngüsü, “while” döngüsü ile benzer bir işleve sahip olsa da kullanımı ve çalışma mantığı farklıdır. Haliyle, bu iki döngünün birbirlerinin alternatifi olarak kullanılabileceği düşüncesi her durum için geçerli olmayacaktır.
Pekala “while” döngüsü ile yapılabilen bir işlem “for” döngüsü ile de yapılabilmektedir. Ancak bu döngülerin belli şartlar altında tek alternatif olduğu durumlar da vardır. Bu yüzden, uygun olan döngünün seçilmesi gerekir.
Koleksiyon yapıları genellikle yinelenebilir (iterable) objeler olduğundan “for” döngüsü bu tür objelerle çalışmayı son derece kolaylaştırır. Bu yapılarda, “for” döngüsü ile çeşitli manipilasyonlar yapabiliriz. Zaten “for” döngüsünün kullanıldığı kodları incelediğinizde bunu net bir şekilde görebilirsiniz.
Python’daki for
döngüsünün temel sözdizimi (syntax) şu şekildedir:
for degisken_adi in yinelenebilir_obje:
# yapılacak işlemler
Bu yapıda degisken_adi
, her döngü turunda yinelenebilir_obje
içindeki bir elemana eşit olacaktır. yinelenebilir_obje
ise üzerinde döngü kurulabilecek (liste, tuple, string) bir obje olmalıdır. Örneği bir liste üzerinde döngü kurmak isteyelim:
sayilar = [1, 2, 3, 4, 5]
for sayi in sayilar:
print(sayi)
"""
Çıktı:
1
2
3
4
5
""""
Bu örnekte sayi
değişkeni, her bir döngü turunda sayilar
listesinin bir elemanına eşit olacak ve bu eleman ekrana yazdırılacaktır. Bir başka örnek:
element = ["ateş", "su", "toprak", "tahta"]
for x in element:
print(x)
"""
Çıktı:
ateş
su
toprak
tahta
"""
Python “for” Döngüsü ile “String” Veri Tipini Harf Harf Sıralamak
String’ler de Python’da yinelenebilir (iterable) objelerdendir, bu yüzden for
döngüsü ile kolayca üzerinde işlem yapabiliriz. Temel fikir, bir string’in her bir karakterini sırayla işlemektir. Her döngü turunda string içerisinden bir karakter alınır ve belirlenen değişkene atanır, ardından bu karakter üzerinde istediğimiz işlemleri gerçekleştirebiliriz.
Örneğin, bir kelimenin her bir harfini ekrana yazdırmak isteyelim:
kelime = "Python"
for harf in kelime:
print(harf)
"""
Çıktı:
P
y
t
h
o
n
"""
Bu kodu çalıştırdığınızda, “Python” kelimesindeki her bir harf ayrı ayrı yeni bir satırda ekrana yazdırılacaktır.
“Peki, böyle bir şeyi niye kullanıyoruz?” Aslında dil işleme uygulamalarında, metin madenciliğinde veya basitçe bir metinde belirli harfleri veya kelimeleri aramak gibi işlemlerde sıkça karşımıza çıkmaktadır.
“for” döngüsünde “break” Kullanımı
Python “for” döngüsünde “break” anahtar kelimesi, döngünün belirli bir koşulda tamamen durmasını sağlar. Yani, döngü koşulu ne olursa olsun, Python yorumlayıcısı “break” ifadesini gördüğünde döngüyü sonlandırır ve “for” döngüsü dışındaki kodlara geçer.
Bu, özellikle bir dizi veya liste içinde belirli bir elemanı ararken, o elemana ulaştığınızda daha fazla döngü çalıştırmadan kodunuzu durdurmak için oldukça faydalıdır. Örneğin, bir sayı listesi içerisinde ilk kez karşılaşılan çift sayıyı bulmak için şöyle bir kod yazabiliriz:
sayilar = [1, 3, 5, 8, 9, 10]
for sayi in sayilar:
if sayi % 2 == 0:
print(f"İlk çift sayı: {sayi}")
break
"""
Çıktı:
İlk çift sayı: 8
"""
Bu kod parçası sayılar listesini döngüye alır ve her bir sayı için çift olup olmadığını kontrol eder. İlk çift sayıyı (bu durumda 8) bulduğunda, “break” anahtar kelimesi ile döngüyü sonlandırır ve daha fazla kontrol yapmaz.
“for” döngüsünde “continue” Kullanımı
Python “for” döngüsünde “continue” anahtar kelimesi kullanıldığında, döngü içindeki o turu atlayarak döngünün başına döner. Yani, “continue” ifadesi görüldüğünde, döngünün geri kalan kısmı o tur için atlanır ve döngü bir sonraki tura geçer.
Özellikle, belirli bir koşul altında döngünün o turunu atlamak ama döngüyü tamamen sonlandırmamak istediğimizde oldukça yararlıdır. Örneğin, bir sayı listesi içinde sadece çift sayıları yazdırmak istiyoruz:
sayilar = [1, 2, 3, 4, 5, 6]
for sayi in sayilar:
if sayi % 2 != 0:
continue
print(sayi)
"""
Çıktı:
2
4
6
"""
Bu örnekte, sayı çift değilse “continue” ifadesi çalışır ve döngü bir sonraki sayıya geçer. Bu şekilde sadece çift sayılar ekrana yazdırılır.
“continue” ifadesi, döngü içerisinde belirli koşullar altında geriye kalan işlemleri yapmamamıza, fakat döngüyü tamamen sonlandırmamamıza olanak tanır. Bu, döngülerin daha esnek ve kontrol edilebilir olmasını sağlar. Özellikle döngü içerisinde birçok farklı işlem yapılıyorsa ve sadece belirli koşullar altında birkaçını atlamak istiyorsak, “continue” ifadesi oldukça kullanışlı olabilir.
“for” Döngüsünde “range()” Fonksiyonu Kullanımı
Python’da range()
fonksiyonu, “for” döngüsü ile birlikte sıkça kullanılır. Türkçede “aralık “ anlamına gelen range()
fonksiyonu, belirli bir sayı aralığı oluşturur ve bu sayede belirli bir sayıda döngü yinelemesi yapmamıza olanak sağlar. Fonksiyonumuz, “başlangıç”, “bitiş “ve “adım büyüklüğü” olmak üzere üç parametre alabilir, fakat sadece bitiş değeri zorunludur. Bakınız: range (başlangıç değeri, bitiş değeri, değişim miktarı)
- Başlangıç değeri belirtilmezse default olarak 0 atanır.
- Değişim miktarı belirtilmezse default olarak 1 atanır.
- Başlangıç değeri aralığa dahil edilirken bitiş değeri dahil edilmez.
Örneğin, 0’dan (0 dahil) 5’e kadar (5 dahil değil) olan sayıları yazdırmak için şu şekilde bir kod yazabiliriz. Bakınız:
for x in range(5):
print(x)
"""
Çıktı:
0
1
2
3
4
"""
Bu kod, 2’den (2 dahil) başlayarak 5’e kadar (5 dahil değil) olan tamsayıları ekrana yazdırır. Eğer başlangıç değerini de belirtmek istersek aşağıdaki gibi yazabiliriz:
for x in range(2, 5):
print(x)
"""
Çıktı:
2
3
4
"""
Pekala, artış miktarını yani adım büyüklüğünü de belirtebiliriz. Örneğin, 2’şer 2’şer arttırmak için aşağıdaki gibi yazabiliriz:
for i in range(0, 10, 2):
print(i)
"""
Çıktı:
0
2
4
6
8
"""
❗ Döngüdeki değeri saklamak veya kullanmak istemediğimizde “_
” işaretini kullanırız. Zira “_
” karakteri, Python lügatında genellikle “ben bu değeri umursamıyorum” veya “bu değeri kullanmayacağım” anlamına gelmektedir.
Eğer bir işlemi belirli bir sayıda tekrarlamak istiyorsak, ama kaçıncı tekrarda olduğumuzla ilgilenmiyorsak aşağıdaki gibi bir kod yazabiliriz:
for _ in range(3):
print("Merhaba")
"""
Çıktı:
Merhaba
Merhaba
Merhaba
"""
Özetle, range()
fonksiyonu, özellikle belirli bir sayıda yineleme yapmak istediğimizde veya belirli bir aralıkta işlem yapmak istediğimizde oldukça kullanışlıdır. Kodumuzu daha düzenli ve okunabilir kılar, aynı zamanda belirli bir sayı aralığı veya adım büyüklüğü üzerinde işlem yapmayı kolaylaştırır.
Python “İç İçe for” Döngüsü (Nested for loop)
Python’da “iç içe for döngüsü” (Nested for loop), bir for döngüsünün içinde başka bir for döngüsü yer aldığı yapıdır. Yani, bir döngü diğerinin içerisinde çalışır. Bu tür döngüler, genellikle iki ya da daha fazla boyutlu veri yapıları üzerinde işlem yaparken, örneğin matrisler veya çok boyutlu listelerde, oldukça faydalıdır. Ayrıca, birbiriyle ilişkili çoklu elemanları yinelemek veya çeşitli kombinasyonları oluşturmak için de kullanılırlar.
Örneğin, aşağıdaki gibi bir iç içe döngü kullanabiliriz:
rakam = ["1","2","3"]
harf = ["A","B","C"]
for x in harf:
for y in rakam:
print(x, y)
"""
Çıktı:
A 1
A 2
A 3
B 1
B 2
B 3
C 1
C 2
C 3
"""
Başka bir örnek olarak, bir liste içindeki tüm olası çiftleri oluşturmak için de iç içe döngüler kullanabiliriz. Bakınız:
elemanlar = [1, 2, 3]
for i in elemanlar:
for j in elemanlar:
print(f"({i}, {j})", end=" ")
"""
Çıktı:
(1, 1) (1, 2) (1, 3) (2, 1) (2, 2) (2, 3) (3, 1) (3, 2) (3, 3)
"""
İç içe döngüler, daha karmaşık işlemleri ve çok boyutlu veri yapılarını yönetmeyi kolaylaştırır, fakat dikkatli kullanılmaları gerekir. Çünkü iç içe çok fazla döngü kullanmak, kodun karmaşıklığını artırabilir ve performans sorunlarına yol açabilir.
“for else” İfadesi
Python’da “for-else” ifadesi genellikle yabancı gelebilecek bir konsepttir, fakat oldukça kullanışlıdır. Bu yapı, “for” döngüsü tamamlandıktan (yani döngüdeki tüm elemanlar yinelendikten) sonra çalışacak olan else
bloğunu ifade eder. Ancak burada dikkat etmemiz gereken bir nokta, “else” bloğunun sadece döngü “break” ifadesi ile kesilmediği zaman çalışacağıdır. Yani, döngü normal bir şekilde sona ererse “else” bloğu çalışır.
Bu yapının en yaygın kullanıldığı senaryolar, genellikle bir dizi veya liste içinde belirli bir elemanı aramak ve o elemanı bulamazsak, bir mesaj veya işlem yapmaktır.
Örneğin, bir sayı listesinde asal sayı olup olmadığını kontrol etmek isteyelim:
for n in [2, 3, 4, 5, 6]:
for x in range(2, int(n ** 0.5) + 1):
if n % x == 0:
print(f"{n} asal sayı değildir.")
break
else:
print(f"{n} asal sayıdır.")
"""
Çıktı:
2 asal sayıdır.
3 asal sayıdır.
4 asal sayı değildir.
5 asal sayıdır.
6 asal sayı değildir.
"""
Yukarıdaki örneğimizde, dış döngü 2’den 6’ya kadar olan sayıları, iç döngü ise bu sayıların asal olup olmadığını kontrol ediyor. Eğer bir sayı asal değilse, iç döngüdeki break
ifadesi döngüyü sonlandırır ve “else” bloğu atlanır. Eğer döngü normal bir şekilde sona ererse (yani sayı asal ise), “else” bloğu çalışır ve sayının asal olduğunu ekrana yazdırır.