Süleyman ÖĞREKÇİ
suleymanogrekci.wordpress.com

For ve While Döngüleri

Aynı komutların tekrarlı çalıştırılması işlemi döngüler yardımıyla yapılır. Belirli bir sayıda tekrar için for döngüsü, belirli koşullar altında tekrar için while döngüsü kullanılır.

For Döngüsü

Bu döngü yapısıyla dizisel bir verinin (list, tuple veya string olabilir) her bir elemanı için belirtilen komutlar tekrarlanır. Örneğin aşağıdaki kodlarla bir mesajı 5 defa yazdırabiliriz.

In [9]:
for i in [1,2,3,4,5]:
    print "mesaj"
mesaj
mesaj
mesaj
mesaj
mesaj

Bu örnek üzerinde for döngüsü söz dizimini açıklayalım. Öncelikle döngünün ilk satırı for kelimesiyle başlıyor, daha sonra ismini bizim belirlediğimiz bir sayaç değişkeni yazıyoruz. Bu örnekte bu değişkeni i olarak tanımladık. Daha sonra in kelimesini yazıp bir dizisel veri yazıyoruz, veriyi doğrudan yazmak yerine önceden tanımladığımız bir değişken olarak da belirtebiliriz.

For döngüsü tanımlanırken ilk satırın sonunda mutlaka iki nokta üst üste konulmalıdır. Bu iki noktadan sonra 4 karakter boşluk bırakılarak yazılan bütün komutlar dizisel verinin her bir elemanı için ayrı ayrı çalıştırılır. Tekrarlama işlemi boşluk bırakılmadan yazılan bir komutla karşılaşılıncaya kadar olan tüm komutlar için yapılır.

Yukarıdaki örneği çeşitlendirelim. Öncelikle değişken ismi programın çalışmasını etkilemez.

In [10]:
for degisken in [1,2,3,4,5]:
    print "mesaj"
mesaj
mesaj
mesaj
mesaj
mesaj

For döngüsünün avantajını anlamamız için değişkeni tekrarlanacak komutlar içinde kullanalım. Kuvvet alma işleminin * * ile yapıldığını öğrenmiş olacağız bu örnekle.

In [11]:
for degisken in [1,2,3,4,5]:
    print "7'nin %d. kuvveti: %d" % (degisken, 7**degisken)
7'nin 1. kuvveti: 7
7'nin 2. kuvveti: 49
7'nin 3. kuvveti: 343
7'nin 4. kuvveti: 2401
7'nin 5. kuvveti: 16807

Belirli sayıda tekrar yapmak için verisel diziyi doğrudan yazmak yerine başka yöntemler de kullanılabilir. Örneğin range(start, stop, step) komutuyla start sayısından stop-1 sayısına kadar step adım boyu aralıklarla bir dizi oluşturulur. Start belirtilmezse 0, step belirtilmezse 1 kabul edilir.

In [12]:
print range(6)
print range(2,8)
print range(5,20,3)
[0, 1, 2, 3, 4, 5]
[2, 3, 4, 5, 6, 7]
[5, 8, 11, 14, 17]

Dolayısıyla yukarıdaki programı şöyle de yazabilirdik:

In [13]:
for degisken in range(1,6):
    print "7'nin %d. kuvveti: %d" % (degisken, 7**degisken)
7'nin 1. kuvveti: 7
7'nin 2. kuvveti: 49
7'nin 3. kuvveti: 343
7'nin 4. kuvveti: 2401
7'nin 5. kuvveti: 16807

Başka bir örnek daha yapalım. Aşağıdaki örneği dikkatlice inceleyin.

In [14]:
n = int(raw_input("Bir doğal sayı girin:"))
toplam = 0

for i in range(1,n+1):
    toplam = toplam + 1.0/i

print "1'den k=%d'ye kadar 1/k'ların toplamı: %f" % (n, toplam)
Bir doğal sayı girin: 1001'den k=100'ye kadar 1/k'ların toplamı: 5.187378

Bu örnekte toplam = toplam + 1.0/i satırına dikkat edelim. Bu komutla toplam isimli integer değişkene bir sayı ekleyip yeni elde edilen sayıya tekrar toplam ismini veriyoruz. Döngülerde bu işlem çok sık kullanılır.

Dikkat edilirse program başında toplam değişkenini integer olarak tanımladık, döngünün içinde bu değere bir float verisi ekliyoruz, pythonda bir integer ile bir float toplanınca bir float verisi elde edilir.

Ayrıca 1/i yerine 1.0/i yazarak float bölmesi yapıyoruz, aksi halde integer bölmesi yapılırdı ve hatalı sonuç elde ederdik.

In [15]:
type(toplam)
Out[15]:
float

toplam = toplam + 1.0/i satırı yerine kısaca toplam += 1.0/i de yazabilirdik, aynı anlama gelir pythonda.

In [16]:
n = int(raw_input("Bir doğal sayı girin:"))
toplam = 0

for i in range(1,n+1):
    toplam += 1.0/i

print "1'den k=%d'ye kadar 1/k'ların toplamı: %f" % (n, toplam)
Bir doğal sayı girin: 2501'den k=250'ye kadar 1/k'ların toplamı: 6.100675

While Döngüsü

Komutları belirli bir sayıda değil fakat belirli koşullar sağlandığı sürece tekrarlamak için while döngülerini kullanırız. İşlevleri benzer olsa da while döngüsünün yapısı for döngüsünden farklıdır.

For döngüsünde bir dizisel veri belirtip bu dizisel verinin elemanları boyunca tekrar yaptırıyorduk. While döngüsünde ise dizisel veri yerine bir bool verisi belirtiriz, benzer söz dizimi içinde ilgili komutlar bu bool verisi True olduğu sürece tekrarlanır.

In [17]:
parola = 'suleyman'

Mesela yukarıda bir değişken tanımladık, bunu kullanarak aşağıda bir while döngüsü örneği vereceğiz. Ama önce bu değişkenler bool verisi nasıl oluşturulabilir kısaca hatırlayalım.

In [18]:
type(parola == 'mehmet')
Out[18]:
bool
In [19]:
parola == 'mehmet'
Out[19]:
False
In [20]:
parola != 'mehmet'
Out[20]:
True
In [21]:
parola == 'suleyman'
Out[21]:
True

Artık ilk while döngüsü örneğini çalıştıralım.

In [22]:
giris = raw_input('Parolayı girin:')

while giris != parola:
    giris = raw_input('Yanlış parola, tekrar deneyin:')

print "Giriş başarılı!"
Parolayı girin: süleymanYanlış parola, tekrar deneyin: öğrekçiYanlış parola, tekrar deneyin: suleyman12Yanlış parola, tekrar deneyin: suleymanGiriş başarılı!

Bu örnekte kritik bir nokta var; while satırı altında tekrarlanacak komutun yapısı.

Bu programda biz giris değişkeni değeri parola değişkeni değerine eşit olmadığı sürece devamlı olarak bir komutu çalıştırmasını istiyoruz. giris değişkeni döngünün her devirinde değişiyor, dolayısıyla herhangi bir devirde bu değişkenin değeri ilgili değer ile aynı olursa döngü sonlanır ver program kaldığı yerden devam eder.

Eğer döngü devirlerinde giriş değişkeni yeniden değer değiştirmeseydi, her devirde giriş değişkeni aynı kalırdı ve dögü sonsuza dek devam ederdi, ya da hiç başlamazdı.

Başka bir örnek olarak aşağıdaki kodları inceleyin. Burada kullanacağımız % operatörü mod işlemi yapar, yani bölümden kalanı verir.

In [23]:
35 % 3
Out[23]:
2

Şimdi aşağıdaki programı inceleyebiliriz.

In [24]:
giris = int(raw_input('Pozitif bir tamsayı girin:'))

k = 2

while k < giris and giris%k != 0:
    k += 1

if giris == k:
    print 'Bu bir asal sayı galiba...'
else:
    print str(giris) + ' sayısının en küçük böleni: ' + str(k)
Pozitif bir tamsayı girin: 101Bu bir asal sayı galiba...