Elbette döngüler tek başlarına bir şey ifade etmezler. Döngülerle işe yarar kodlar yazabilmemiz için bazı araçlara ihtiyacımız var.
İşte bu bölümde döngüleri daha verimli kullanmamızı sağlayacak bazı fonksiyon ve deyimlerden söz edeceğiz.
range Fonksiyonu
range kelimesi İngilizcede ‘aralık’ anlamına gelir. Biz Python’da range()
fonksiyonunu belli bir aralıkta bulunan sayıları göstermek için kullanıyoruz. Örneğin:
>>> for i in range(0, 10):
... print(i)
...
0
1
2
3
4
5
6
7
8
9
Gördüğünüz gibi, range(0, 10)
kodu sayesinde ve for
döngüsünü de kullanarak, 0 ile 10 (10 hariç) aralığındaki sayıları ekrana yazdırdık.
Yukarıdaki kodda range()
fonksiyonuna 0 ve 10 olmak üzere iki adet parametre verdiğimizi görüyorsunuz. Burada 0 sayısı, aralıktaki ilk sayıyı, 10 sayısı ise aralıktaki son sayıyı gösteriyor.
Yani range()
fonksiyonunun formülü şöyledir:
range(ilk_sayı, son_sayı)
Eğer range()
fonksiyonunun ilk parametresi 0 olacaksa, bu parametreyi belirtmesek de olur. Yani mesela 0’dan 10’a kadar olan sayıları listeleyeceksek range()
fonksiyonunu şöyle yazmamız yeterli olacaktır:
>>> for i in range(10):
... print(i)
Elbette, eğer aralıktaki ilk sayı 0’dan farklı olacaksa bu sayıyı açık açık belirtmek gerekir:
>>> for i in range(3, 20):
... print(i)
Burada 3’ten itibaren 20’ye kadar olan sayılar ekrana dökülecektir.
Hatırlarsanız, biraz önce, kullanıcının 3 karakterden kısa, 8 karakterden uzun parola belirlemesini engelleyen bir uygulama yazmıştık. O uygulamayı range()
fonksiyonunu kullanarak da yazabiliriz:
while True:
parola = input("parola belirleyin: ")
if not parola:
print("parola bölümü boş geçilemez!")
elif len(parola) in range(3, 8): #eğer parolanın uzunluğu 3 ile 8 karakter
#aralığında ise...
print("Yeni parolanız", parola)
break
else:
print("parola 8 karakterden uzun 3 karakterden kısa olmamalı")
Bu fonksiyonu kullanarak bir döngünün kaç kez çalışacağını da belirleyebilirsiniz. Aşağıdaki kodları dikkatlice inceleyin:
for i in range(3):
parola = input("parola belirleyin: ")
if not parola:
print("parola bölümü boş geçilemez!")
elif len(parola) in range(3, 8):
print("Yeni parolanız", parola)
break
elif i == 2:
print("parolayı 3 kez yanlış girdiniz.",
"Lütfen 30 dakika sonra tekrar deneyin!")
else:
print("parola 8 karakterden uzun 3 karakterden kısa olmamalı")
Burada if i == 2
kodu sayesinde for
döngüsü içinde belirttiğimiz i adlı değişkenin değeri 2 olduğu anda ‘parolayı 3 kez yanlış girdiniz…’ uyarısı gösterilecektir.
range()
fonksiyonunun yetenekleri yukarıda anlattıklarımızla sınırlı değildir. Bu fonksiyonun bazı başka maharetleri de bulunur. Hatırlarsanız yukarıda bu fonksiyonun formülünü şöyle vermiştik:
range(ilk_sayı, son_sayı)
Aslında bu fonksiyonun üçüncü bir parametresi daha vardır. Buna göre formülümüzü güncelleyelim:
range(ilk_sayı, son_sayı, atlama_değeri)
Formüldeki son parametre olan atlama_değeri, aralıktaki sayıların kaçar kaçar ilerleyeceğini gösterir. Yani:
>>> for i in range(0, 10, 2):
... print(i)
...
0
2
4
6
8
Gördüğünüz gibi, son parametre olarak verdiğimiz 2 sayısı sayesinde 0’dan 10’a kadar olan sayılar ikişer ikişer atlayarak ekrana dökülüyor.
Bu arada, bir şey dikkatinizi çekmiş olmalı:
range()
fonksiyonu üç farklı parametre alan bir fonksiyon. Eğer ilk parametre 0 olacaksa bu parametreyi belirtmek zorunda olmadığımızı biliyoruz. Yani:
>>> range(10)
Python bu kodu range(0, 10)
olarak algılayıp buna göre değerlendiriyor. Ancak eğer range()
fonksiyonunda üçüncü parametreyi de kullanacaksak, yani range(0, 10, 2)
gibi bir komut vereceksek, üç parametrenin tamamını da belirtmemiz gerekiyor.
Bu yüzden, Python’un şaşırmaması için yukarıdaki örneği şu şekilde yazmalıyız:
>>> for i in range(0, 10, 2):
... print(i)
Gördüğünüz gibi, range()
fonksiyonunu kullanarak belirli bir aralıktaki sayıları alabiliyoruz. Peki bu sayıları tersten alabilir miyiz? Elbette:
>>> for i in range(10, 0, -1):
... print(i)
...
10
9
8
7
6
5
4
3
2
1
Burada range()
fonksiyonunu nasıl yazdığımıza çok dikkat edin. Sayıları tersten alacağımız için, ilk parametre 10, ikinci parametre ise 0. Üçüncü parametre olarak ise eksi değerli bir sayı veriyoruz.
Eğer sayıları hem tersten, hem de mesela 3’er 3’er atlayarak yazmak isterseniz şöyle bir komut verebilirsiniz:
>>> for i in range(10, 0, -3):
... print(i)
...
10
7
4
1
range(10)
ifadesinin taşıdığı sayıları görebilmek için for
döngüsü kurmak tek seçenek değildir. Bu işlem için yıldızlı parametrelerden de yararlanabiliriz.
Dilerseniz şimdi bu parametre tipini range()
fonksiyonuna nasıl uygulayabileceğimizi görelim:
>>> print(*range(10))
0 1 2 3 4 5 6 7 8 9
print()
fonksiyonunun sep parametresi yardımıyla bu çıktıyı istediğiniz gibi düzenleyebileceğinizi biliyorsunuz. Mesela çıktıdaki sayıları birbirlerinden virgülle ayırmak için şöyle bir komut verebiliyoruz:
>>> print(*range(10), sep=", ")
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
pass Deyimi
pass kelimesi İngilizcede ‘geçmek, pas geçmek’ gibi anlamlara gelir. Python’daki kullanımı da bu anlama oldukça yakındır. Biz bu deyimi Pyhon’da ‘görmezden gel, hiçbir şey yapma’ anlamında kullanacağız.
Dilerseniz pass
deyimini tarif etmeye çalışmak yerine bu deyimi bir örnek üzerinde açıklamaya çalışalım.
Hatırlarsanız yukarıda şöyle bir örnek vermiştik:
while True:
parola = input("parola belirleyin: ")
if not parola:
print("parola bölümü boş geçilemez!")
elif len(parola) in range(3, 8): #eğer parolanın uzunluğu 3 ile 8 karakter
#aralığında ise...
print("Yeni parolanız", parola)
break
else:
print("parola 8 karakterden uzun 3 karakterden kısa olmamalı")
Burada mesela eğer kullanıcı parolayı boş bırakırsa ‘parola bölümü boş geçilemez!’ uyarısı gösteriyoruz. Şimdi o if
bloğunu şöyle yazdığımızı düşünün:
while True:
parola = input("parola belirleyin: ")
if not parola:
pass
elif len(parola) in range(3, 8): #eğer parolanın uzunluğu 3 ile 8 karakter
#aralığında ise...
print("Yeni parolanız", parola)
break
else:
print("parola 8 karakterden uzun 3 karakterden kısa olmamalı")
Burada, eğer kullanıcı parolayı boş bırakırsa programımız hiçbir şey yapmadan yoluna devam edecektir. Yani eğer kullanıcı parolayı boş geçerse görmezden gel. Hiçbir şey yapmadan yoluna devam et!
Başka bir örnek daha verelim:
while True:
sayı = int(input("Bir sayı girin: "))
if sayı == 0:
break
elif sayı < 0:
pass
else:
print(sayı)
Burada eğer kullanıcı 0 sayısını girerse programımız sona erer. Eğer kullanıcı 0’dan küçük bir sayı girerse, pass
deyimininin etkisiyle programımız hiçbir şey yapmadan yoluna devam eder.
Bu koşulların dışındaki durumlarda ise programımız kullanıcının girdiği sayıları ekrana yazdıracaktır.
Yukarıda anlatılan durumların dışında, pass
deyimini kodlarınız henüz taslak aşamasında olduğu zaman da kullanabilirsiniz. Örneğin, diyelim ki bir kod yazıyorsunuz.
Programın gidişatına göre, bir noktada yapmanız gereken bir işlem var, ama henüz ne yapacağınıza karar vermediniz. Böyle bir durumda pass
deyiminden yararlanabilirsiniz.
Mesela birtakım if
deyimleri yazmayı düşünüyor olun:
if .....:
böyle yap
elif .....:
şöyle yap
else:
pass
Sözün özü, pass
deyimlerini, herhangi bir işlem yapılmasının gerekli olmadığı durumlar için kullanıyoruz. İlerde işe yarar programlar yazdığınızda, bu pass
deyiminin göründüğünden daha faydalı bir araç olduğunu anlayacaksınız.
break Deyimi
Python’da break
özel bir deyimdir. Bu deyim yardımıyla, devam eden bir süreci kesintiye uğratabiliriz. Bu deyimin kullanıldığı basit bir örnek verelim:
>>> while True:
... parola = input("Lütfen bir parola belirleyiniz:")
... if len(parola) < 5:
... print("Parola 5 karakterden az olmamalı!")
... else:
... print("Parolanız belirlendi!")
... break
Burada, eğer kullanıcının girdiği parolanın uzunluğu 5 karakterden azsa, Parola 5 karakterden az olmamalı! uyarısı gösterilecektir.
Eğer kullanıcı 5 karakterden uzun bir parola belirlemişse, kendisine ‘Parolanız belirlendi!’ mesajını gösterip, break
deyimi yardımıyla programdan çıkıyoruz.
Gördüğünüz gibi, break
ifadesinin temel görevi bir döngüyü sona erdirmek. Buradan anlayacağımız gibi, break
ifadesinin her zaman bir döngü içinde yer alması gerekiyor. Aksi halde Python bize şöyle bir hata verecektir:
SyntaxError: 'break' outside loop
Yani:
SözDizimiHatası: ``break`` döngü dışında ..
continue Deyimi
continue
ilginç bir deyimdir. İsterseniz continue
deyimini anlatmaya çalışmak yerine bununla ilgili bir örnek verelim:
while True:
s = input("Bir sayı girin: ")
if s == "iptal":
break
if len(s) <= 3:
continue
print("En fazla üç haneli bir sayı girebilirsiniz.")
Burada eğer kullanıcı klavyede iptal yazarsa programdan çıkılacaktır. Bunu;
if s == "iptal":
break
satırıyla sağlamayı başardık.
Eğer kullanıcı tarafından girilen sayı üç haneli veya daha az haneli bir sayı ise, continue
ifadesinin etkisiyle:
>>> print("En fazla üç haneli bir sayı girebilirsiniz.")
satırı es geçilecek ve döngünün en başına gidilecektir.
Eğer kullanıcının girdiği sayıdaki hane üçten fazlaysa ekrana:
En fazla üç haneli bir sayı girebilirsiniz.
cümlesi yazdırılacaktır.
Dolayısıyla buradan anladığımıza göre, continue
deyiminin görevi kendisinden sonra gelen her şeyin es geçilip döngünün başına dönülmesini sağlamaktır.
else Deyimi
Biz else
deyimini koşullu durumlarda da görmüştük, ancak else
deyimi döngüler ile de kullanılabilmektedir. Tabii döngüler ile kullanıldığında farklı bir işi üstlenmektedir. else
deyimi döngüler ile birlikte kullanılırken break
deyimi ile birlikte bir anlam kazanır. Şöyle bir kodumuz olduğunu varsayalım:
for i in range(5):
print(i)
else:
print("else çalıştı.")
Kodumuzu kaydedip çalıştırdığımızda bu çıktıyı alıyoruz:
1
2
3
4
else çalıştı.
>>>
Dediğimiz gibi Python’da else
ifadesi döngüler ile birlikte kullanılacaksa break
ifadesi ile birlikte bir anlam kazanır.
Eğer döngü break
ifadesi kullanılarak sonlandırıldı ise else
çalışmaz, döngü break
ifadesi ile sonlandırılmadı ise else
bölümü çalışır.
Yukarıdaki örneğimizde zaten break
deyimi bulunmadığı için else
bölümü çalıştı. Şimdi çalışmayacağı bir örnek verelim:
a = 0
while True:
a += 1
print(a)
if a==3:
break
else:
print("else çalıştı.")
Şimdi programımızı çalıştırdığımızda şu sonucu almaktayız:
1
2
3
Gördüğünüz gibi a
değişkenimiz 3
olduğunda döngümüz break
ifadesi ile kırılıyor ve bu yüzden else
çalışmıyor. else
ifadesini hem for
hem de while
döngüsü ile kullanabileceğimizi unutmayalım.
Şimdi bu konu ile ilgili işe yarar bir örnek verelim. Bir karakter dizimiz var ve 'a'
harfinin bu dizide bulunup bulunmadığını kontrol etmek istiyoruz. Eğer bulunuyorsa ekrana bunu belirten bir yazı yazacağız:
karater_dizisi = "Merhaba Dünya"
for harf in karater_dizisi:
if harf == 'a':
print("a harfi bulundu.")
Ancak bu programı çalıştırdığımızda şöyle bir sonuçla karşılaşıyoruz:
a harfi bulundu.
a harfi bulundu.
a harfi bulundu.
>>>
Gördüğünüz gibi her 'a'
harfi için bir defa a harfi bulundu.
yazılıyor. Eğer biz bir defa 'a'
harfine rastladığımızda döngüden çıkmak istiyorsak bunu şu şekilde yazabiliriz:
karater_dizisi = "Merhaba Dünya"
for harf in karater_dizisi:
if harf == 'a':
print("a harfi bulundu.")
break
Kodumuzu çalıştırıyoruz:
a harfi bulundu.
>>>
Peki şimdi 'a'
harfinin bulunmadığı durumda da a harfi bulunmadı.
yazmak istersek bunu nasıl yaparız? Bazı değişkenler oluşturup if
ifadesi ile bunu yapmak mümkündür ancak else
ifadesi ile de bu işi hemen halledebiliyoruz:
karater_dizisi = "Bu yAzıdA küçük A yok."
for harf in karater_dizisi:
if harf == 'a':
print("a harfi bulundu.")
break
else:
print("a harfi bulunmadı.")
Kodumuzu çalıştırdığımızda break
ifadesi hiç çalışmadığı için else
ifadesinin çalıştığını görebiliriz:
a harfi bulunmadı.
>>>
Evet, else
ifadesi de Python’da döngüler ile bu şekilde kullanılabiliyor. Peki olmasa da olur muydu? Olurdu. else
ifadesinin bu kullanım şekli de Python’daki çoğu kolaylıklardan biri sadece…
Bu eğitim seti Kaynak tarafından oluşturulmuştur.