Koşullar ve Döngüler

Program akışını yönlendirmek ve tekrar eden işleri yürütmek

Bölüm 2

NotBu bölümde
  • if / elif / else ile koşullu akış; sınır değerlerini sınamak
  • for ile değerler üzerinde doğrudan dolaşmak; range() ve bitiş değerinin dışarıda kalması
  • while ile koşula bağlı tekrar; döngüyü bitiren adım
  • break, continue, pass, for-else; iç içe döngüler
  • match / case ile desen eşleştirme

Karar Yapıları

Program akışını koşullara göre yönlendiren yapılar: if, elif, else. Python’da koşulun çevresinde parantez, bloğun çevresinde süslü parantez yoktur; blok, satır sonundaki : ile açılır ve girintiyle belirlenir.

if Yapısı

if koşul:
    # Koşul ifadesi doğruysa çalışır
  • Python’da koşul ifadelerinde parantez veya süslü parantez gerekmez.
  • Koşul içerisindeki blok girinti ile belirlenir.

Koşul doğruysa girintili blok çalışır, yanlışsa atlanır:

if + else

Koşul sağlanmadığında yapılacak işi else dalı belirtir:

elif Kullanımı

Birden fazla koşulu sırayla sınamak için elif kullanılır. Zincirde yalnızca ilk doğru dal çalışır; bu yüzden koşulların sırası önemlidir.

İç içe if

Koşulları kademeli kontrol etmek için iç içe yapı kullanılabilir.

Mantıksal Operatörler ile Birleştirme

İç içe if yerine koşullar and, or, not ile tek satırda birleştirilebilir; çoğu zaman daha okunurdur.

Ternary Operatörü (Koşullu İfade)

Tek bir değeri koşula göre seçmek için dört satırlık if/else yerine tek satırlık koşullu ifade kullanılabilir.

Geleneksel if/else


Ternary operatörü ile

Koşul Yazarken Dikkat Edilecekler

  • Sınır değerlerini sınayın: Eşik değerini ve hemen iki yanını deneyin (17, 18, 19 gibi). > ile >= aynı değildir.
  • Koşulların sırasına bakın: if–elif zincirinde yalnızca ilk doğru dal çalışır. Geniş bir koşul, sonraki dalı erişilemez kılabilir.
  • elif ile ayrı if’leri ayırın: Yalnızca bir durum seçilecekse elif; birden fazla koşul bağımsız olarak gerçekleşebilecekse ayrı if kullanın.
  • Uzun koşulları okunur tutun: and, or ve not birlikte kullanıldığında gerekirse parantez ekleyin.
  • Her yolu deneyin: Doğru ve yanlış durumların yanı sıra else dalını da test edin.

Döngüler

Döngüler, belirli işlemleri tekrar etmek için kullanılır.

  • for: koleksiyon (liste, string vb.) veya sayı aralıkları üzerinde yineleme yapar.
  • while: koşul doğru olduğu sürece çalışır.

for Döngüsü

Yalnızca elemanın kendisine ihtiyacımız varsa ayrıca bir sıra numarası tutmayız; for her turda sıradaki değeri verir.

for eleman in dizi:
    # her eleman için çalışır

meyve değişkeni her turda listedeki sıradaki değeri alır; indeks tutmaya gerek yoktur.

range() Fonksiyonu

Sayı aralıkları üretir:

range(start, stop, step)
  • start: başlangıç (varsayılan 0)
  • stop: bitiş (dahil değil)
  • step: artış (varsayılan 1)

Son sınır aralığa girmez. Örneğin 1’den 10’a kadar saymak için bitişi 11 seçeriz.

range() Örnekleri

Adımın yönü başlangıçtan bitişe giden yönle uyuşmazsa aralık boş kalır; emin değilseniz list(range(...)) ile bakın.

String Üzerinde for

Bir metni dolaşırken harf değişkeni karakterin konumunu değil, karakterin kendisini alır.

while Döngüsü

Tekrar sayısı baştan belli değilse while daha doğaldır: koşul True olduğu sürece tekrar eder.

Sayaçlı while

Bu örnekte sayaç 0’dan başlar, her turda 1 artar ve 5’e ulaştığında koşul yanlış olur. Artırma satırı olmasaydı döngü sonlanmazdı.

while yazarken üç soru sorun: Döngü başlarken koşuldaki değişkenlerin değeri ne? Her turda hangi değer değişiyor? Bu değişiklik döngüyü bitirecek koşulu gerçekten oluşturabilir mi?

Kullanıcı Girdisi ile Döngü

Bu örneği yerel terminalde deneyin; input() kullanıcıdan yanıt bekler. q burada verinin bittiğini bildiren bir işaret değeridir.

toplam = 0

while True:
    s = input("Bir sayı girin (Çıkış: q): ")
    if s == 'q':
        break
    toplam += int(s)

print("Toplam:", toplam)

Sonsuz Döngü

Bu kodun durma koşulu yoktur. Çalıştırmadan önce döngüyü nasıl sonlandıracağınızı düşünün.

sayac = 0
while True:
    print(sayac)
    sayac += 1

Döngü Kontrol İfadeleri

Akışın esnek yönetimi için üç anahtar kelime vardır:

  • break → içinde bulunduğu en yakın döngüden çıkar
  • continue → o turun kalanını atlayıp sonraki tura geçer
  • pass → hiçbir işlem yapmaz; yer tutucu olarak kullanılır

break Örneği

break döngüyü o anda bitirir; 3’ten sonrası hiç işlenmez.

continue Örneği

continue yalnızca o turu atlar; döngü 4 ile devam eder.

pass Örneği

Boş bir blok söz dizimi hatasıdır; henüz yazılmamış gövdeyi pass ile doldururuz.

def henuz_yazilmamis_fonksiyon():
    pass  # TODO: Burayı daha sonra dolduracağım.

class GelecektekiSinif:
    pass

for-else Yapısı

Döngü break ile sonlanmazsa else bloğu çalışır; “aranan bulunamadı” durumlarını yazmak için kullanışlıdır.

İç içe Döngüler

Dış döngünün her turunda iç döngü baştan sona çalışır.

match / case

Desen Eşleştirme (Python ≥ 3.10)

Çok dallı if/elif zincirleri yerine match ile desen eşleştirme yapılabilir; | ile birden çok değer aynı dala bağlanır, _ “diğer her şey” demektir.

Alıştırmalar

Tahmin Et, Sonra Çalıştır

Her hücre için önce çıktıyı tahmin edin, sonra çalıştırıp tahmininizi kontrol edin.






Atölye Kaydı

Robotik atölyesi 16 yaş altını kabul etmiyor. Diğer başvurularda yer yoksa bekleme listesi, yer varsa kayıt onayı veriliyor.

Koşulları yazın; yaş için 15–16, boş yer için 0–1 deneyin.


  • yas < 16 — “16 yaş altını kabul etmiyor” demek 16 yaşındaki başvurunun kabul edildiği anlamına gelir. yas <= 16 yazsaydık 16 yaşı da reddederdik; 15, 16 ve 17 değerlerini deneyerek farkı görebilirsiniz.
  • Yaş koşulu önce gelmeli: 16 yaşından küçük bir başvuru için kontenjan olup olmaması sonucu değiştirmez.
  • bos_kontenjan == 0 — elif dalına yalnızca yaşı uygun olanlar gelir; orada tek soru kalır: boş yer var mı? Yoksa bekleme listesi, varsa kayıt tamamlanır.

Ödev

Yerel ortamınızda, input() kullanarak:

  • Kullanıcıdan bir sayı alın ve bu sayının 1 ile 10 arasında olup olmadığını kontrol edin.
  • Kullanıcıdan 5 tane sayı alın ve bu sayıların toplamını hesaplayın.
  • 1’den 100’e kadar olan sayılardan çift olanları ekrana yazdırın.
  • Bir metindeki a harflerini karakterler üzerinde doğrudan dolaşarak sayın; ardından büyük A harfini de kapsayacak biçimde genişletin.
  • Kullanıcıdan bir sayı alın ve bu sayının faktöriyelini hesaplayan bir program yazın.
  • Kullanıcıdan bir metin alın ve bu metnin palindrom olup olmadığını kontrol eden bir program yazın.

Kendini Sına

Her soruda önce kendi cevabınızı seçin, sonra cevap anahtarındaki gerekçeleri okuyun; yanlış şıklar bu konuda gerçekten yapılan hatalardan seçildi.

Soru 1

puan = 70
if puan >= 85:
    sonuc = "AA"
elif puan >= 70:
    sonuc = "BB"
else:
    sonuc = "Kaldı"
print(sonuc)
  • A. BB
  • B. Hiçbir şey yazmaz
  • C. BB ve Kaldı
  • D. Kaldı
  • E. AA

Doğru: A. 70 ≥ 70 sağlanır, elif dalı çalışır; zincirde yalnız ilk doğru dal çalışır. B print’i gözden kaçırır. C birden fazla dalın çalışabileceğini sanır. D >= yerine > okur. E 70’i 85’ten büyük sayar.

Soru 2

print(list(range(2, 7)))
  • A. [3, 4, 5, 6, 7]
  • B. [2, 3, 4, 5, 6]
  • C. [0, 1, 2, 3, 4, 5, 6]
  • D. [2, 3, 4, 5, 6, 7]
  • E. [2, 7]

Doğru: B. Başlangıç dâhil, bitiş hariç. A başlangıcı atlar. C range(7) ile karıştırır. D bitişi dâhil sayar — en sık hata. E iki argümanı liste sanır.

Soru 3

for sayi in [1, 2, 3, 4, 5]:
    if sayi == 3:
        continue
    print(sayi, end=" ")
  • A. 1 2
  • B. 1 2 4 5
  • C. 1 2 3 4 5
  • D. 4 5
  • E. 3

Doğru: B. continue yalnız o turu atlar. A break davranışıdır. C continue’nun etkisiz olduğunu sanır. D döngünün 3’ten sonra başladığını sanır. E yalnız atlananı yazar.

Soru 4

sayac = 0
while sayac < 3:
    print(sayac)
  • A. 0 1 2 alt alta
  • B. 0 bir kez
  • C. Sonsuza kadar 0
  • D. Hata verir
  • E. Hiçbir şey yazmaz

Doğru: C. Koşuldaki sayac döngü içinde değişmez, koşul hep doğru kalır. A sayac += 1 satırı varmış gibi okur. B while’ı if sanır. D sonsuz döngü hata değildir. E koşul baştan doğru olduğu için en az bir kez yazar.

Soru 5

for i in range(2):
    for j in range(3):
        if j == 1:
            break
        print(i, j)
  • A. 0 0 ve 1 0
  • B. 0 0, 0 1, 1 0, 1 1
  • C. 0 0
  • D. Altı satır
  • E. 0 0, 0 2, 1 0, 1 2

Doğru: A. break yalnız içteki döngüyü bitirir; dış döngü her turda yeniden başlar. B break’i continue gibi okur ve j == 1’i yazar. C break’in dış döngüyü de bitirdiğini sanır. D break yokmuş gibi sayar. E yalnız j == 1’in atlandığını sanır (bu continue olurdu).

Kod Yazma

Kullanıcıdan alınan sayıları q girilene kadar toplayan, sonra toplam ile kaç sayı girildiğini Toplam: 42 (3 sayı) biçiminde yazdıran kodu yazın. Sayfada input() çalışmadığı için girişleri bir listeyle temsil edin.

girisler = ["10", "25", "7", "q"]
toplam = 0
adet = 0
for s in girisler:
    if s == "q":
        break
    toplam += int(s)
    adet += 1
print(f"Toplam: {toplam} ({adet} sayı)")

Yerel ortamda for s in girisler yerine while True: s = input(...) kullanılır; break aynı yerde kalır.

Özet ve Kazanımlar

Tek Sayfa Özet

  • if/elif/else zincirinde yalnız ilk doğru dal çalışır; sınır değerlerini (eşik ve iki yanı) sınayın.
  • for elemanın kendisini verir; indeks tutmak gerekmez.
  • range(a, b) a dâhil b hariç; üçüncü parametre adımdır.
  • while koşul doğru kaldıkça döner; koşuldaki değeri değiştiren satır yoksa döngü bitmez.
  • break döngüyü bitirir, continue turu atlar, pass yer tutar; for-else break olmadan biterse çalışır.
  • İç içe döngüde break yalnız içteki döngüyü bitirir.
  • match/case çok dallı eşleştirmeyi okunur yazar (Python ≥ 3.10).

Bu Bölümü Bitiren Öğrenci

  • Verilen bir if/elif/else zincirinde sınır değerinin hangi dala düştüğünü belirler.
  • Bir liste ya da metnin elemanları üzerinde indeks kullanmadan dolaşır.
  • range() ile istenen sayı aralığını üretir ve bitiş değerinin dışarıda kaldığını gösterir.
  • while döngüsünün sonlanma koşulunu açıklar ve sonsuz döngüyü tanır.
  • break ile continue arasındaki farkı iç içe döngü örneğinde gösterir.
Başa dön