17donguler ilgili.fw min

Python Ders 17 | Döngüler – İlgili Araçlar

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ı girersepass 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.

İletişim: admin@herseymi.com
Yazı oluşturuldu 96

Bir Yorum Yazın

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.

Üste dön