Yazdığımız kodları tekrar tekrar döndürmemizi sağlayan, programımıza bir süreklilik katan öğelere döngü adı verilir. while döngüsü, yukarıda verilen tanıma tam olarak uyar. Yani yazdığımız bir programdaki kodların tamamı işletilince programın kapanmasına engel olur ve kod dizisinin en başa dönmesini sağlar. Ne demek istediğimizi anlatmanın en iyi yolu bununla ilgili bir örnek vermek olacaktır. O halde şu küçücük örneği bir inceleyelim bakalım:
Bu minicik kodun yaptığı iş, birinci satırda a değişkeninin değerine bakıp ikinci satırda bu değere 1 eklemek, üçüncü satırda da bu yeni değeri ekrana yazdırmaktır. Dolayısıyla bu kod parçasının vereceği çıktı da 1 olacaktır. Bu çıktıyı verdikten sonra ise program sona erecektir. Şimdi bu koda bazı eklemeler yapalım:
Bu kodu çalıştırdığımızda, 1den 100e kadar olan sayıların ekrana yazdırıldığını görürüz.
Konuyu anlayabilmek için şimdi de satırları teker teker inceleyelim:
İlk satırda, 0 değerine sahip bir a değişkeni tanımladık.
İkinci ve üçüncü satırlarda, a değişkeninin değeri 100 sayısından küçük olduğu müddetçe a değişkeninin değerine 1 ekle, cümlesini Pythoncaya çevirdik.
Son satırda ise, bu yeni a değerini ekrana yazdırdık.
İşte bu noktada while döngüsünün faziletlerini görüyoruz. Bu döngü sayesinde programımız son satıra her gelişinde başa dönüyor. Yani:
Şimdiye kadar aslında bu işleçlerden birkaç tanesini gördük. Mesela:
Şimdi konumuza geri dönebiliriz:
Bu konunun başında, bir önceki bölümde yazdığımız hesap makinesi programına değinmiştik. Şimdi bu programı görelim tekrar:
Dediğimiz gibi, program bu haliyle her defasında yalnızca bir kez işlem yapmaya izin verecektir. Yani mesela toplama işlemi bittikten sonra program sona erecektir. Ama eğer biz bu programda şu ufacık değişikliği yaparsak işler değişir:
Burada şu değişiklikleri yaptık:
İlk önce from __future__ import division satırı ile secenek1 = (1) toplama satırı arasına:
ifadesini ekledik. Bu sayede programımıza şu komutu vermiş olduk: Doğru olduğu müddetçe aşağıdaki komutları çalıştırmaya devam et! Zira yukarıda verdiğimiz işleç tablosundan da hatırlayacağınız gibi True, doğru anlamına geliyor.
Peki, ne doğru olduğu müddetçe? Neyin doğru olduğunu açıkça belirtmediğimiz için Python burada her şeyi doğru kabul ediyor. Yani bir nevi, aksi belirtilmediği sürece aşağıdaki komutları çalıştırmaya devam et! emrini yerine getiriyor.
İkinci değişiklik ise while True: ifadesinin altında kalan bütün satırları bir seviye sağa kaydırmak oldu. Eğer Kwrite kullanıyorsanız, kaydıracağınız bölümü seçtikten sonra CTRL+i tuşlarına basarak bu kaydırma işlemini kolayca yapabilirsiniz. Bir seviye sola kaydırmak için ise CTRL+SHIFT+i tuşlarını kullanıyoruz.
Bir de şu örneğe bakalım:
Dikkat ederseniz burada da işleçlerimizden birini kullandık. Kullandığımız işleç eşit değildir anlamına gelen != işleci.
Bu programı çalıştırdığımızda sorulan soruya Python cevabı vermezsek, program biz müdahale edene kadar ekrana Yanlış cevap! çıktısını vermeye devam edecektir. Çünkü biz Pythona şu komutu vermiş olduk bu kodla:
Soru değişkeninin cevabı Python olmadığı müddetçe ekrana Yanlış cevap! çıktısını vermeye devam et!
Eğer bu programı durdurmak istiyorsak CTRL+C tuşlarına basmamız gerekir...
Aynı kodları bir de şu şekilde denerseniz if ile while arasındaki fark bariz bir biçimde ortaya çıkacaktır:
Şimdilik while döngüsüne ara verip bu konuda incelememiz gereken ikinci döngümüze geçiyoruz.
Kod:
#!/usr/bin/ env python # -*- coding: utf-8 -*- a = 0 a = a + 1 print a
Bu minicik kodun yaptığı iş, birinci satırda a değişkeninin değerine bakıp ikinci satırda bu değere 1 eklemek, üçüncü satırda da bu yeni değeri ekrana yazdırmaktır. Dolayısıyla bu kod parçasının vereceği çıktı da 1 olacaktır. Bu çıktıyı verdikten sonra ise program sona erecektir. Şimdi bu koda bazı eklemeler yapalım:
Kod:
#!/usr/bin/env python # -*- coding: utf-8 -*- a = 0 while a < 100: a = a + 1 print a
Bu kodu çalıştırdığımızda, 1den 100e kadar olan sayıların ekrana yazdırıldığını görürüz.
Konuyu anlayabilmek için şimdi de satırları teker teker inceleyelim:
İlk satırda, 0 değerine sahip bir a değişkeni tanımladık.
İkinci ve üçüncü satırlarda, a değişkeninin değeri 100 sayısından küçük olduğu müddetçe a değişkeninin değerine 1 ekle, cümlesini Pythoncaya çevirdik.
Son satırda ise, bu yeni a değerini ekrana yazdırdık.
İşte bu noktada while döngüsünün faziletlerini görüyoruz. Bu döngü sayesinde programımız son satıra her gelişinde başa dönüyor. Yani:
- a değişkeninin değerini kontrol ediyor,
- anın 0 olduğunu görüyor,
- a değerinin 100den küçük olduğunu idrak ediyor,
- a değerine 1 ekliyor (0 + 1 = 1),
- Bu değeri ekrana yazdırıyor (1),
- Başa dönüp tekrar a değişkeninin değerini kontrol ediyor,
- anın şu anda 1 olduğunu görüyor,
- a değerinin hâlâ 100den küçük olduğunu anlıyor,
- a değerine 1 ekliyor (1 + 1 = 2),
- Bu değeri ekrana yazdırıyor (2),
- Bu işlemi 99 sayısına ulaşana dek tekrarlıyor ve en sonunda bu sayıya da 1 ekleyerek vuslata eriyor.
Şimdiye kadar aslında bu işleçlerden birkaç tanesini gördük. Mesela:
+ işleci toplama işlemi yapmamızı sağlıyor.
- işleci çıkarma işlemi yapmamızı sağlıyor.
/ işleci bölme işlemi yapmamızı sağlıyor.
* işleci çarpma işlemi yapmamızı sağlıyor.
> işleci büyüktür anlamına geliyor.
< işleci küçüktür anlamına geliyor.
Bir de henüz görmediklerimiz, ama bilmemiz gerekenler var:- işleci çıkarma işlemi yapmamızı sağlıyor.
/ işleci bölme işlemi yapmamızı sağlıyor.
* işleci çarpma işlemi yapmamızı sağlıyor.
> işleci büyüktür anlamına geliyor.
< işleci küçüktür anlamına geliyor.
>= işleci büyük eşittir anlamına geliyor.
<= işleci küçük eşittir anlamına geliyor.
!= işleci eşit değildir anlamına geliyor. (örn. 2 * 2 != 5)
and işleci ve anlamına geliyor.
or işleci veya anlamına geliyor.
not işleci değil anlamına geliyor.
True işleci Doğru anlamına geliyor.
False işleci Yanlış anlamına geliyor.
Bu işleçleri şu anda ezberlemenize gerek yok. Bunlar yalnızca size kılavuz olsun diye veriliyor. Yeri geldikçe bunları kullanacağımız için muhakkak aklınıza yerleşeceklerdir...<= işleci küçük eşittir anlamına geliyor.
!= işleci eşit değildir anlamına geliyor. (örn. 2 * 2 != 5)
and işleci ve anlamına geliyor.
or işleci veya anlamına geliyor.
not işleci değil anlamına geliyor.
True işleci Doğru anlamına geliyor.
False işleci Yanlış anlamına geliyor.
Şimdi konumuza geri dönebiliriz:
Bu konunun başında, bir önceki bölümde yazdığımız hesap makinesi programına değinmiştik. Şimdi bu programı görelim tekrar:
Kod:
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import division secenek1 = "(1) toplama" secenek2 = "(2) çıkarma" secenek3 = "(3) çarpma" secenek4 = "(4) bölme" print secenek1 print secenek2 print secenek3 print secenek4 soru = raw_input("Yapacağınız işlemin numarasını girin: ") if soru == "1": sayi1 = input("Toplama için ilk sayıyı girin: ") print sayi1 sayi2 = input("Toplama için ikinci sayıyı girin: ") print sayi1, "+", sayi2, ":", sayi1 + sayi2 if soru == "2": sayi3 = input("Çıkarma için ilk sayıyı girin: ") print sayi3 sayi4 = input("Çıkarma için ikinci sayıyı girin: ") print sayi3, "-", sayi4, ":", sayi3 - sayi4 if soru == "3": sayi5 = input("Çarpma için ilk sayıyı girin: ") print sayi5 sayi6 = input("Çarpma için ikinci sayıyı girin: ") print sayi5, "x", sayi6, ":", sayi5 * sayi6 if soru == "4": sayi7 = input("Bölme için ilk sayıyı girin: ") print sayi7 sayi8 = input("Bölme için ikinci sayıyı girin: ") print sayi7, "/", sayi8, ":", sayi7 / sayi8
Dediğimiz gibi, program bu haliyle her defasında yalnızca bir kez işlem yapmaya izin verecektir. Yani mesela toplama işlemi bittikten sonra program sona erecektir. Ama eğer biz bu programda şu ufacık değişikliği yaparsak işler değişir:
Kod:
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import division while True: secenek1 = "(1) toplama" secenek2 = "(2) çıkarma" secenek3 = "(3) çarpma" secenek4 = "(4) bölme" print secenek1 print secenek2 print secenek3 print secenek4 soru = raw_input("Yapacağınız işlemin numarasını girin: ") if soru == "1": sayi1 = input("Toplama için ilk sayıyı girin: ") print sayi1 sayi2 = input("Toplama için ikinci sayıyı girin: ") print sayi1, "+", sayi2,":", sayi1 + sayi2 if soru == "2": sayi3 = input("Çıkarma için ilk sayıyı girin: ") print sayi3 sayi4 = input("Çıkarma için ikinci sayıyı girin: ") print sayi3, "-", sayi4,":", sayi3 - sayi4 if soru == "3": sayi5 = input("Çarpma için ilk sayıyı girin: ") print sayi5 sayi6 = input("Çarpma için ikinci sayıyı girin: ") print sayi5, "x", sayi6,":", sayi5 * sayi6 if soru == "4": sayi7 = input("Bölme için ilk sayıyı girin: ") print sayi7 sayi8 = input("Bölme için ikinci sayıyı girin: ") print sayi7, "/", sayi8,":", sayi7 / sayi8
Burada şu değişiklikleri yaptık:
İlk önce from __future__ import division satırı ile secenek1 = (1) toplama satırı arasına:
Kod:
while True:
ifadesini ekledik. Bu sayede programımıza şu komutu vermiş olduk: Doğru olduğu müddetçe aşağıdaki komutları çalıştırmaya devam et! Zira yukarıda verdiğimiz işleç tablosundan da hatırlayacağınız gibi True, doğru anlamına geliyor.
Peki, ne doğru olduğu müddetçe? Neyin doğru olduğunu açıkça belirtmediğimiz için Python burada her şeyi doğru kabul ediyor. Yani bir nevi, aksi belirtilmediği sürece aşağıdaki komutları çalıştırmaya devam et! emrini yerine getiriyor.
İkinci değişiklik ise while True: ifadesinin altında kalan bütün satırları bir seviye sağa kaydırmak oldu. Eğer Kwrite kullanıyorsanız, kaydıracağınız bölümü seçtikten sonra CTRL+i tuşlarına basarak bu kaydırma işlemini kolayca yapabilirsiniz. Bir seviye sola kaydırmak için ise CTRL+SHIFT+i tuşlarını kullanıyoruz.
Bir de şu örneğe bakalım:
Kod:
#!/usr/bin/env python # -*- coding: utf-8 -*- soru = raw_input("Python mu Ruby mi?") while soru != "Python": print "Yanlış cevap!"
Dikkat ederseniz burada da işleçlerimizden birini kullandık. Kullandığımız işleç eşit değildir anlamına gelen != işleci.
Bu programı çalıştırdığımızda sorulan soruya Python cevabı vermezsek, program biz müdahale edene kadar ekrana Yanlış cevap! çıktısını vermeye devam edecektir. Çünkü biz Pythona şu komutu vermiş olduk bu kodla:
Soru değişkeninin cevabı Python olmadığı müddetçe ekrana Yanlış cevap! çıktısını vermeye devam et!
Eğer bu programı durdurmak istiyorsak CTRL+C tuşlarına basmamız gerekir...
Aynı kodları bir de şu şekilde denerseniz if ile while arasındaki fark bariz bir biçimde ortaya çıkacaktır:
Kod:
#!/usr/bin/env python # -*- coding: utf-8 -*- soru = raw_input("Python mu Ruby mi?") if soru != "Python": print "Yanlış cevap!"
Şimdilik while döngüsüne ara verip bu konuda incelememiz gereken ikinci döngümüze geçiyoruz.
