#Python: Python Dersleri 26: While Döngüsü
#WHILE Döngüsü
#While döngüsü standart olarak aşağıdaki örnek kalıpta kullanılır:
sayi=1
while sayi<=100:
print(sayi)
sayi+=1
print("Tamam")
"""
Yukarıdaki kalıp incelendiğinde şu hususlar öne çıkacaktır:
1. while yazıldıktan sonra hemen sağ tarafına bir koşul eklenir. Bunun değeri True/False şeklindedir.
2. Burada yazılan koşul True olduğu müddetçe alttaki işlemler sürekli tekrar edecektir. Ta ki ilgili koşul False olana kadar. False olduğu anda döngü sonlanacaktır.
3. while döngüsünün içindeki kodlar tab tuşu ile bir sağa alınmıştır. Yukarıdaki örnekte alttaki 2 satır while döngüsünün parçası olup en alttaki print("Tamam") kodu ise döngünün bir parçası değildir.
4. while KOŞUL yazıldıktan sonra mutlaka : konmalıdır.
############################################################
Yukarıdaki kodlar incelendiğinde
1. Önce sayi=1 diye bir değişken tanımlandı. Daha sonra while sayi<=100 koşuluna bakıldı. sayi değişkeni 1 olduğu için sayi<=100 koşulunun cevabı True oldu. Doğal olarak alttaki iki kod çalıştırıldı.
2. Alttaki kodlar önce print(sayi) kodu ile ekrana 1 yazar. Daha sonra sayi+=1 kodu ile sayi bir artar ve 2 olur.
3. Döngü tekrar while sayi<=100 kodunu çalıştırır. Artık sayi=2 olduğu için bu soru yine True sonucunu verir.
4. Bu işlemler sürekli tekrar eder. En son sayi+=1 kodu ile sayının değeri 101 olunca while sayi<=100 kodu False cevabını verir ve döngü son bulur.
5. Döngü son bulduğu için döngüden çıkılır ve print("Tamam") kodu devreye girer.
6. Burada özellikle döngü içinde geçen sayi+=1 kodu önemli. Bu kod olmazsa sayi sürekli 1 olarak kalır ve while sayi<=100 kodu sürekli True sonucunu üreteceği için döngü sonsuza kadar sürer. Yani sayi+=1 kodu döngüyü bitirmek için vardır.
"""
#Şimdi bir kaç örnek yapalım. Öncelikle faktoriyel hesaplayalım:
sayi=int(input("Lütfen faktoriyeli alınacak sayıyı giriniz:"))
faktoriyel=1
a=1
while a<=sayi:
faktoriyel*=a
a+=1
print(sayi,"sayısının faktöriyeli:",faktoriyel)
#Burada eğer (while a<=sayi) kodunu yanlışlıkla (while a) şeklinde girerseniz bu durumda girdiğiniz sayının bir eksiğinin faktöriyelini bulur. <= ifadesi ile sayi'nin kendisi de katılmış olur.
#Buradaki mantık örgüsünü şöyle de kurabilirsiniz:
sayi=int(input("Lütfen faktoriyeli alınacak sayıyı giriniz:"))
faktoriyel=1
devam=True
a=1
while devam:
faktoriyel*=a
a+=1
if a<=sayi:
devam=True
else:
devam=False
print(faktoriyel)
#Yukarıda görüldüğü gibi devam=True olduğu müddetçe döngü devam eder. Eğer a<=sayi koşulu son bulursa if koşulu bunu False yapar ve doğal olarak döngü de son bulur.
#Konuyu biraz daha pekiştirmek amacıyla 1-100 arası sayılardan 7'ye bölünebilenlerin listesini üretelim:
liste=list()#Bu liste 7'ye bölünebilen sayılar ile oldurulacaktır.
sayi=1
while sayi<=100:
if sayi%7==0:
liste+=[sayi]#liste.append(sayi) kodu da aynı sonucu verir.
sayi+=1
print(liste)
#Yukarıdaki işlemde TAB ile yapılan gruplamalara dikkat ediniz.
#Aşağıdaki örnekte ise bir sayı soracaktır. Sayıyı bulana kadar döngü tekrar sayı soracaktır.
tuttugum_sayi=15
bulamadim=True
while bulamadim:
sayi=int(input("Tuttuğum sayıyı tahmin edin. 1-20 arası bir sayıdır:"))
if sayi==tuttugum_sayi:
bulamadim=False
print("Doğru buldunuz!")
else:
print("Bulamadınız.")
#####################################################
#WHILE döngüsü ile birlikte kullanılan CONTINUE ve BREAK deyimleri de önemlidir.
#BREAK kelimesi sonlandırmak anlamında olup CONTINUE ise devam etmek anlamındadır.
#Buradaki iki deyim önemlidir. Örneklerle kullanım şeklini izah edelim. Önce yukarıdaki örneği değiştirelim:
while True:#Burada True atayarak bu döngünün sonsuza kadar devam etmesi gerektiğini belirttik.
sayi=int(input("Tuttuğum sayıyı tahmin edin. 1-20 arası bir sayıdır:"))
if sayi==tuttugum_sayi:
print("Doğru buldunuz!")
break#Buradaki break deyimi, döngüden çıkma komutudur. Bu komut olmazsa döngü (while True) ile ifade edildiği için sonsuza kadar devam edecektir. break ise (while True) ifadesini doğrudan kırarak koşul gerçekleştiği anda döngüyü sonlandırır.
else:
print("Bulamadınız.")
#Bir örnek daha verelim. 1000000-2000000 arasında 171321 sayısına bölünen ilk sayıyı bulacağız. Bulduğumuz anda sonucu üretip işlemi sonlandıracağız.
sayi=1000000
while sayi<=2000000:
if sayi%171321==0:
print(sayi)
break#Dikkat ederseniz print(sayi) ifadesinin arkasına eklendi. Tersi olup önce break yazıp sonra print(sayi) yazarsak bu durumda print(sayi) kodunu çalıştırmadan sonlandırır.
sayi+=1#Bunu da koymak zorundayız. Yoksa sayi hep 1000000'da sabit kalır ve döngü de sonsuza kadar devam eder.
#Yukarıdaki döngüde while sayi<=2000000 ifadesi döngüyü her türlü 2000000'da sonlandırır. break kodu ise aradığını bulduğunda sonlandırır. Hangisi önce gerçekleşirse döngü o anda sonlanır.
#CONTINUE deyimi ise ilgili döngünün bir sonraki adımına geçer. Yani siz döngü içinde herhangi bir satıra break yazdığınızda işlemi orada sonlandırır ve döngünün diğer hiç bir koduna bakmadan döngüyü orada bitirir.
#Continue kodu ise geçtiği anda döngünün sonraki adımlarında geçen kodların hiç birine bakmaz ve tekrar döngünün başına gelir.
#Örneğin 50-100 arası sayılardan 7'ye bölünebilenleri yazdıralım:
sayi=50
while sayi<=100:
sayi+=1
if sayi%7>0:
continue#Burada sayı 7'ye tam bölünmediği için alttaki kodu okumadan while sayi<=100 satırına geçti. Eğer 7'ye bölünüyorsa bu durumda zaten bu satır okunmayacağı için bir alttaki satır okunmuş oldu.
print(sayi)
"""
Yukarıdaki işlemde dikkat edilmesi gereken bazı konular şunlardır:
1. sayi+=1 kodu continue ifadesinin önüne yazıldı. Eğer arkasına yazılsaydı bazı durumlarda bu kod okunmayacağı için döngü sonsuza kadar devam edecekti.
2. continue kodu devreye girdiği anda döngü içinde olup da kendisinin ardında yer alan kodlardan hiç birini okumaz ve while kodunun olduğu satıra iletir.
"""
##############################################
#break ve continue deyimleri for döngüsü içinde de aynı mantık ile çalışır.
#Şimdi aşağıda satış toplamlarını inceleyip 10000 TL'yi geçen satışları gösterelim:
satislar=[
["İngiltere","Manchester","Bilgisayar",12800],
["Türkiye","İzmir","Duvar Tipi",3240],
["İspanya","Barcelona","Kuru Süpürgeler",3800],
["İngiltere","Liverpool","Ütü",11200],
["ABD","California","Halı Yıkama Makineleri",15300],
["İspanya","Barcelona","Fırın",2600],
["ABD","California","Salon Tipi",3500],
["İngiltere","Liverpool","Kuru Süpürgeler",2450],
["ABD","California","Siemens",1400],
["Çin","Shangai","Salon Tipi",9000],
["Çin","Tianjin","Televizyon",5870],
["Almanya","Berlin","Doğalgaz Isıtıcısı",10000],
["ABD","Washington","Doğalgaz Isıtıcı",600],
["ABD","Boston","Kuru Süpürgeler",980],
["ABD","Boston","Pencere Tipi",750],
["Türkiye","Aydın","Termosifon",9520],
["Çin","Shangai","Şofben",1480],
["Çin","Shangai","Ütü",1280],
["ABD","Washington","DVD-Video",18600],
["İspanya","Madrid","Motorola",7840],
["Türkiye","Aydın","Motorola",22100],
["Çin","Shangai","Müzik Seti",3620],
["ABD","Washington","Bulaşık Makinesi",1900],
["İspanya","Madrid","LCD-TV",3280],
["Çin","Tianjin","Bulaşık Makinesi",3000],
["İngiltere","Liverpool","Nokia",26400],
["Çin","Shangai","Pencere Tipi",1250],
["Türkiye","İzmir","Pişirici",2590],
["İspanya","Madrid","Halı Yıkama Makineleri",6800],
["İspanya","Madrid","Çamaşır Makinesi",6240],
["Çin","Tianjin","Doğalgaz Isıtıcı",4500],
["İngiltere","Manchester","Çamaşır Makinesi",14800],
["ABD","California","Vantilatör",26250],
["İspanya","Madrid","Kombi",9560],
["Almanya","Berlin","Bulaşık Makinesi",1200],
["İspanya","Barcelona","Isıtıcı",1700],
["İngiltere","Londra","Termosifon",3410],
["ABD","California","Şofben",16750],
["İspanya","Barcelona","Duvar Tipi",4200],
["Çin","Tianjin","Siemens",4500],
["İngiltere","Londra","Buzdolabı",15200],
["İspanya","Madrid","Vantilatör",17000],
["Türkiye","Balıkesir","Setüstü Ocak",7800],
["Türkiye","Aydın","LCD-TV",6800],
["Türkiye","Balıkesir","Nokia",1540],
["Türkiye","İzmir","Halı Yıkama Makineleri",6870],
["İngiltere","Londra","Duvar Tipi",5800],
["Türkiye","Aydın","Fırın",7500],
["Türkiye","Aydın","Isıtıcı",1700],
["Çin","Shangai","Kuru Süpürgeler",6500],
["İngiltere","Londra","Televizyon",2500]
]
sayi=-1
while True:
sayi+=1
if sayi>=len(satislar):#Eğer son elemana kadar geldiyse sonlandırması gerekiyor. Aksi taktirde sonsuza kadar döngü devam eder.
break
if satislar[sayi][3]<10000:
continue
print(satislar[sayi])
Python: Python Dersleri 26: While Döngüsü
Kodu Kopyala
TÜM PYTHON KODLARI
Youtube Kanalımız
Aşağıdaki makrolar işinize yarayabilir.
Aşağıdaki makrolar işinize yarayabilir.