Python İle Programlamanın Temelleri-5

Döngüler

1. Döngü Yapıları

Döngüler, sıralı bir kod blokunun istenilen sayıda tekrarlanmasıdır. Döngü ve karar yapıları, algoritma oluşturma ve programlamada birçok problemin çözümünde kullanılır.

Aşağıdaki kod bloku 1’den 5’e kadar sayıları ekrana yazar.

prin t(1)
print(2)
print(3)
print(4)
print(5)

Ekran Çıktısı

1
2
3
4
5

Tekrar sayısı fazla olduğunda döngü yapıları tercih edilmelidir. Programlamada tekrar sayısının sayılması bir değişken yardımı ile elde edilebilir. Python dilinde döngü için while ve for döngü yapıları kullanılır.

2. For Döngüsü

For döngüleri belirli sayıda işlemlerin tekrarlanması için kullanılan döngülerdir. For döngüleri başlangıç ve bitiş değerleri arasında artım miktarına göre istenilen sayıda tekrar yapar.

Yukarıdaki örnek çıktı for döngüsüyle yapılmak istenseydi yazılması gereken kodlar şu şekilde olurdu:

for n in range(1,6)
print(n)

Örnek Kullanım

for n in range(1, 11):
print(n)

range (1,11) ifadesi, n değerinin hangi aralıkta çalışacağını gösterir. n’nin alacağı değerler: 1, 2 , 3 , 4, 5, 6, 7, 8, 9, 10 yani 1 ≤ n < 11’dir. n’in ilk değeri 1 olup her çalışma anında sırayla artmaktadır.

2.1. For Döngüsü İçin Söz Dizimi

Başlangıç değeri: Döngü değişkeninin alacağı ilk değerdir. Eğer boş bırakılırsa 0 olarak belirlenir.

Son değer: Döngü değişkeninin bitiş değeridir. Boş bırakılmamalıdır.

Artırma/azaltma değeri: Döngü değişkeninin artırma veya azaltma miktarını belirler. Eğer boş bırakılırsa, 1 olarak belirlenir. Başlangıç, bitiş, artırma ve azaltma değerlerinin hepsi tam sayı olmalıdır. Ondalıklı değerler veya diğer veri türleri kullanılmaz. Bunun dışında range ifadesi esnek kullanıma sahiptir:

for n in range(21, 0, -3):
print(n, end=” “)

Ekran Çıktısı

21 18 15 12 9 6 3

end parametresi: print() içerisinde kullanılan end, bir parametre olarak görev yapar. İşlevi ise yazdırılmak istenen ifadelerin sonuna hangi karakterin geleceğini belirler. Varsayılan olarak “\n” karakteri ile birlikte gelir. Yani yazılan ifade bitince bir alt satıra geçer.

Başka bir örnek

top= 0
for i in range(1, 100): # burada döngü değişkeni olarak i kullanılmıştır.
top+= i
print(top)

Ekran Çıktısı

4950

range(1000) denildiğinde 999’a kadar olan sayıların toplamı işlemini yapar ve ekrana 4950 yazar. Çünkü range() komutunda bitiş değeri döngüye dahil değildir.

2.2. For Döngüsü İçin Farklı Örnekler

Örnek

range(10) → 0,1,2,3,4,5,6,7,8,9
range(1, 10) → 1,2,3,4,5,6,7,8,9
range(1, 10, 2) → 1,3,5,7,9
range(10, 0, -1) → 10,9,8,7,6,5,4,3,2,1
range(10, 0, -2) → 10,8,6,4,2
range(2, 11, 2) → 2,4,6,8,10
range(-5, 5) → −5,−4,−3,−2,−1,0,1,2,3,4
range(1, 2) → 1
range(1, 1) → ()
range(1, -1) → ()
range(1, -1, -1) → 1,0
range(0) → ()

range içerisinde 1 değer varsa bitiş değerini gösterir. 0’dan başlayıp birer artarak çalışır.

range içerisinde 2 değer varsa başlangıç ve bitiş değerini simgeler ve birer artarak ilerler.

3 değer varsa başlangıç, bitiş ve artma miktarını ifade eder.

format() metodu: print() komutunda çıktı verilirken yazdırılmak istenilen değerlerde hizalama, ekranda istenildiği yere yazdırma gibi biçimlendirme işlemlerinde kullanılan bir metotdur.

Örnek

>>> print(“{} {}”yi seviyor!”.format(“Ali”, “Ayşe”)) “Ali Ayşe”yi seviyor!”
>>> print(“{} {} yaşında bir {}dur”.format(“Ahmet”, “18”, “futbolcu”)) “Ahmet 18 yaşında bir futbolcudur”

Örnek

for i in range(10):
print(i, end=” “)
if i == 5:
i = 20
print(“({})”.format(i), end=” “)
print()

Ekran Çıktısı

0 (0) 1 (1) 2 (2) 3 (3) 4 (4) 5 (20) 6 (6) 7 (7) 8 (8) 9 (9)




3. İç İçe Döngüler

İf ifadelerinde olduğu gibi while ve for blokları, başka döngü yapılarını içerebilir. İç içe döngülerin çalışma mantığını anlayabilmek için programın bir çarpım tablosu ürettiğini varsaymak gerekir. Benzer şekilde satır ve sütun değerleri olan bir tablo gibi de düşünülebilir.

Örnek

# Satır oluşturmak için

sayi = int(input(“Lütfen tablo ölçüsünü giriniz: “))

for satir in range(1, sayi + 1):

print(“Satır #”, satir)

Ekran Çıktısı

Lütfen tablo ölçüsünü giriniz: 10

Satır # 1

Satır # 2

Satır # 3

Satır # 4

Satır # 5

Satır # 6

Satır # 7

Satır # 8

Satır # 9

Satır # 10

İç içe döngülerde önemli olan, döngü dışında kalacak kod satırlarının belirlenmesidir. Hangi satırların bir kere, hangi satırların döngü içerisinde olacağını belirlemek gerekir. İç içe döngüde satır (satir) dıştaki kontrol döngüsü olup sütun (sutun) döngüsü ise içteki döngüdür. İçteki döngü, dıştaki döngünün her tekrarında en baştan son bitiş değerine ulaşıncaya kadar kendini yineler.

4. İç İçe 3’lü Döngü

# ABC harflerinin farklı permütasyonu:
for ilk in “ABC”:
for ikinci in “ABC”:
if ikinci != ilk:
for ucuncu in “ABC”:
if ucuncu != ilk and ucuncu != ikinci:
print(ilk + ikinci + ucuncu)

Ekran Çıktısı

ABC
ACB
BAC
BCA
CAB
CBA

5. While Döngüsü

sayac = 1 # Başlangıç değeri kontrol değişkenine atanır.

while sayac <= 5: #İstenilen değere ulaşıp ulaşmadığını kontrol eder.

print(sayac)  # Sayaç değerini ekrana yazar.

sayac+= 1  # Sayaç değerini 1 arttırır.

While ifadesi, aşağıdaki ifadeleri 5 kere tekrar eder.

>>>print(sayac)

>>>sayac += 1

Sayac değişkeninin değerini sürekli olarak ekrana yazar. Yazma işlemi sonrasında değişkenin değerini 1 artırır. Bu işlemden sonra sayac değerinin 5’ten küçük veya eşit olması durumuna göre yazma işlemine devam eder. Şart sağlanmadığında ilgili kod blokunun tekrarlanması duracaktır.

5.1. While Döngüsü İçin Söz Dizimi

While ifadesi, ilgili kod satırlarının çalıştırılıp çalıştırılmayacağını belirler. Şart doğru olduğu sürece kod blokunu tekrar tekrar çalıştırır. Şart yanlış olduğunda ise döngü sonlanır. While için söz diziminde ilk önce while ifadesi yazılır. Şart ifadesi sonrasında : işareti ile yazılmalı ve bu şarta bağlı olarak çalışacak kod satırları alt alta yazılmalıdır.

5.2. While Döngüsü İçin Akış Şeması

While Döngüsü İçin Örnek Soru

Dışarıdan N/n karakteri girilinceye kadar döngünün kaç kere döndüğünü ekrana yazan while döngüsü

sayac = 0 giris= “Y”

while giris!= “N” and giris!= “n”:

print(sayac)

giris= input(“Devam etmek için ” Y” – çıkmak için “N” giriniz: “)

if giris == “Y” or giris == “y”:

sayac += 1

elif giris != “N” and giris != “n”:

print(“”” + giris + “” geçerli bir giriş kodu değil”)

Ekran çıktısı aşağıdaki gibi olur.

Devam etmek için ” Y” – çıkmak için “N” giriniz: Y

1

Devam etmek için ” Y” – çıkmak için “N” giriniz: Y

2

Devam etmek için ” Y” – çıkmak için “N” giriniz: y

3

Devam etmek için ” Y” – çıkmak için “N” giriniz: q

” q” geçerli bir giriş kodu değil

3

Devam etmek için ” Y” – çıkmak için “N” giriniz: r

“r” geçerli bir giriş kodu değil

3

Devam etmek için ” Y” – çıkmak için “N” giriniz: W

“W” geçerli bir giriş kodu değil

3

Devam etmek için ” Y” – çıkmak için “N” giriniz: Y

4

Devam etmek için ” Y” – çıkmak için “N” giriniz: y

5

Devam etmek için ” Y” – çıkmak için “N” giriniz: n

While Döngüsü İçin Örnek Soru 2

Dışarıdan negatif sayı girilinceye kadar sayıları toplayan while döngüsü

sayi = 0 toplam = 0

print(“Bir sayı giriniz, negatif sayı döngüyü sonlandırır:”)

while sayi >= 0:

sayi= int(input())

toplam += sayi print(“Toplam=”, toplam)

While Döngüsü İçin Örnek Soru 3

Çalışmayan bir bilgisayar için sorun çözme adımlarını gösteren while döngüsü

# Bilgisayar Arıza Çözüm Programı

print(“Yardım Edin! Bilgisayarım Çalışmıyor”) cozum = False

while not cozum:

print(“Bilgisayardan herhangi bir ses geliyor mu (fans vb) “)

secim = input(“Veya herhangi bir ışık yanıyor mu? (y/n):”)

if secim == “n”:

secim = input(“Fişe takılı mı (y/n):”)

if secim == “n”:

print(“Fişe takın”)

else:

secim = input(“Açma düğmesine bastınız mı (y/n):”)

if secim == “n”:

print(“Açma düğmesine basın.”)

else:

secim = input(“Sigorta atmış mı? (y/n):”)

if secim == “n”:

secim = input(“Şalter inmiş mi (y/n):”)

if secim == “n”:

print(“Şalteri kontrol edin veya yenisi ile değiştirin. “)

else:

else:

print(“Teknik servise başvurun.”)

cozum = True else:

print(“Sigortayı kontrol edin. “)

print(“Teknik servise başvurun”)

cozum = True

Çözümün Açıklaması

While döngüsünü, mantıksal değeri olan değişken kontrol ediyor. Çözüm değişkeni yanlış olduğu sürece döngü, çalışmaya devam ediyor. Bu soruda kullanılan çözüm değişkeni, bayrak (f lag) olarak kullanılmıştır. Bayrak aşağı indiğinde değer yanlış; yukarı kalktığında ise değer doğru olarak değişir. Bu örnek çözümde ise bayrak yukarı doğru kaldırılmış ve döngü sonlandırılmıştır. Ayrıca, bu soruda kullanılan “not cozum” ifadesi de önemlidir. Döngünün çalışması sorunun çözümüne bağlı olduğu için kontrol şartı, mantıksal değil olarak belirlenmiştir. Bu durum değişkenin değerini değiştirmeden kontrol edilmesini sağlayacaktır.

Python, tam sayı değeri olan 0 ve ondalıklı sayı olan 0,0 değerlerini yanlış (false); diğer tüm değerleri ise (pozitif ve negatif olanlar da dâhil) doğru (true) olarak kabul eder.




6. Belirli ve Belirsiz Döngüler

Döngünün tekrar sayısının bilindiği veya bilinmediği durumlar olabilir. Belirli döngülerde döngünün kaç defa döneceği, kaç kere çalışacağı kestirilebilir. Çünkü şart ifadesi bu konuda bilgi verir. Ancak bu durumun aksine kullanıcı girişine göre değişiklik gösteren ve farklı sayıda çalışan döngüler olabilir. Böyle durumlarda kullanılan döngülere de belirsiz döngü denir.

Belirli döngü örneği 1

n = 1

while n <= 10:

print(n)

n += 1

Belirli döngü örneği 2

n = 1

karar= int(input())

while n <= karar:

print(n)

n += 1

Belirsiz döngü örneği 3

karar = False while not karar:

giris = int(input())

if giris == 999:

karar = True

else:

print(giris)

7. Döngü’den Çıkma Komutları

While döngüsü, şart sağlandığı sürece ilgili kod satırlarını çalıştırır. Benzer şekilde for döngüsü de aralık içerisinde ilgili işlemleri gerçekleştirir. Ancak bazı değerler için döngü yapısından çıkmak, başka bir deyişle döngü işleyişinde değişiklik yapmak mümkündür. Bunun için break ve continue komutları kullanılabilir.

giris = 0

toplam = 0

print(“Lütfen bir sayı giriniz, negatif sayılar döngüyü sonlandırır:”)

while True:

giris = int(input())

if giris < 0:

break # Döngüden çıkılıyor

toplam += giris print(“Toplam =”, toplam)

Örnek

# Metin içerisindeki sesli harfleri bulma

kelime = input(“Lütfen bir metin giriniz (Çıkış için X / x): “)

sesliHarfSayisi = 0

for c in kelime:

if c == “A” or c == “a” or c == “E” or c == “e” \ or c == “I” or c == “ı” or c == “O” or c == “o”\ or c == “U” or c == “u” or c == “Ö” or c == “ö”\ or c == “Ü” or c == “ü” or c == “İ” or c==”i”: print(c, “,”, end=” “, sep=” “)

sesliHarfSayisi += 1

elif c == “X” or c ==”x”:

break

print(” (“, sesliHarfSayisi, ” adet sesli harf)”, sep=””)

Ekran Çıktısı

Lütfen bir metin giriniz (Çıkış için X / x): AaEeIıİiOoÖöUuÜü

A, a, E, e, I, ı, İ, i, O, o, Ö, ö, U, u, Ü, ü, (16 adet sesli harf)

7.2. Continue İfadesi

Break ifadesi kullanıldığında ilgili kod satırları çalıştırılmadan atlanırken continue ifadesi kullanıldığında döngü başı yapılarak bir sonraki yeni değer için işlem yapılır.

Örnek

# 999 girilene kadar girilen pozitif sayıların toplamını alan program

# < girilen negatif sayılar işleme alınmayacaktır. >

toplam = 0 durum = False while not durum:

deger = int(input(“Lütfen pozitif tam sayı giriniz (Çıkış için 999):”))

if deger < 0:

print(“Negatif değer girildi, “, deger, “degeri işleme alınmadı”)

continue

if deger != 999:

print(“Eklenen değer”, deger)

toplam += deger else:

durum = (deger == 999)

print(“Toplam =”, toplam)

Ekran Çıktısı

Lütfen pozitif tam sayı giriniz (Çıkış için 999):1

Eklenen değer 1

Lütfen pozitif tam sayı giriniz (Çıkış için 999):2

Eklenen değer 2

Lütfen pozitif tam sayı giriniz (Çıkış için 999):3

Eklenen değer 3

Lütfen pozitif tam sayı giriniz (Çıkış için 999):6

Örnekte negatif değerde döngü başı yapılır.

7.3. While/else ve for/else

Python döngüler için opsiyonel else bloku kullanımını destekler. Break ifadesine rağmen döngünün terkedilmediği durumlarda döngüye ait else ifadesi kullanılabilir.

While / else

# Girilen 5 sayının ortalamasını alan program

# Negatif sayı girildiğinde program sonlandırılır

sayac = toplam = 0

print(“Lütfen Ortalama hesaplamak için 5 pozitif sayı giriniz”)

while sayac < 5:

sayi = float(input(“Sayı giriniz: “))

if sayi < 0:

print(“Negatif sayılar kabul edilmemektedir. Çıkılıyor”)

break sayac += 1 toplam += sayi

else:

print(“Ortalama =”, toplam/sayac)

Ekran Çıktısı

Lütfen Ortalama hesaplamak için 5 pozitif sayı giriniz

Sayı giriniz: 6

Sayı giriniz: 7

Sayı giriniz: 8

Sayı giriniz: 6

Sayı giriniz: 5

Ortalama = 6.4

>>>

=============== RESTART:

Lütfen Ortalama hesaplamak için 5 pozitif sayı giriniz

Sayı giriniz: -1

Negatif sayılar kabul edilmemektedir. Çıkılıyor

Örnekte beş sayı girilene kadar while döngüsü dönecek şart yanlış olduğunda else satırına geçilerek ortalama değeri ekrana yazdırılacaktır.




8. Döngü Örnekleri

Faktöriyel Hesaplama

# Program girilen sayının faktöriyelini hesaplar

faktoriyel=1 sayac=1

sayi=int(input(“Lütfen bir sayı giriniz..”))

while sayac<=sayi: faktoriyel*=sayac sayac+=1

print(sayi,” sayısının foktöriyeli:”,faktoriyel)

Ekran Çıktısı

Lütfen bir sayı giriniz..5

5 sayısının foktöriyeli: 120

Faktöriyel hesaplamak için klavyeden girilen sayıdan 1’e kadar döngü kurulmuş ve her döngü değeri çarpılma işlemine alınarak (faktöriyel*=sayac) amaca ulaşılmıştır.

Asal Sayıları Listeleme

sonDeger = int(input(“Kaça kadar asal sayıları görmek istersiniz? “))

sayi = 2

while sayi <= sonDeger: kontrol = True gecici = 2

while gecici < sayi:

if sayi % gecici == 0:

kontrol = False break

gecici += 1 if kontrol:

print(sayi, end= ” “)

sayi += 1 print()

Ekran Çıktısı

Kaça kadar asal sayıları görmek istersiniz? 77

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73

İstenilen Sayıdaki Fibonacci Sayılarını Listeleyen Program

# İstenilen sayıdaki Fibonacci Sayılarını Listeleyen Program

deger1=0 deger2=1 sayac=2

sonDeger=int(input(“Listelemek istediğiniz Fibonacci Sayıları adetini giriniz..:”))

print(str(deger1) + ” ” +str(deger2),end=” “)

while sayac<=sonDeger: deger3=deger1+deger2 print(deger3,end=” “) deger1=deger2 deger2=deger3 sayac+=1

Ekran Çıktısı

Listelemek istediğiniz Fibonacci Sayıları adedini giriniz.:15

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610

Fibonacci Sayıları: Her sayının kendisinden önce gelen iki sayının toplamı şeklinde yazılıp devam ettiği sayı dizisine Fibonacci Sayı Dizisi denir. 1,1,2,3,5,8,13,21,34,55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181…


Döngüler konusu ile ilgili sunum dosyasına ve konu testine (yakında) aşağıdan ulaşabilirsiniz.

 

 

 

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir