Koşullar ve Döngüler
Program akışını yönlendirmek ve tekrar eden işleri yürütmek
Bölüm 2
if/elif/elseile koşullu akış; sınır değerlerini sınamakforile değerler üzerinde doğrudan dolaşmak;range()ve bitiş değerinin dışarıda kalmasıwhileile koşula bağlı tekrar; döngüyü bitiren adımbreak,continue,pass,for-else; iç içe döngülermatch/caseile 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–elifzincirinde yalnızca ilk doğru dal çalışır. Geniş bir koşul, sonraki dalı erişilemez kılabilir. elifile ayrıif’leri ayırın: Yalnızca bir durum seçilecekseelif; birden fazla koşul bağımsız olarak gerçekleşebilecekse ayrıifkullanın.- Uzun koşulları okunur tutun:
and,orvenotbirlikte kullanıldığında gerekirse parantez ekleyin. - Her yolu deneyin: Doğru ve yanlış durumların yanı sıra
elsedalı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ışırmeyve 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 += 1Dö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 çıkarcontinue→ o turun kalanını atlayıp sonraki tura geçerpass→ 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:
passfor-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 <= 16yazsaydı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—elifdalı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
aharflerini karakterler üzerinde doğrudan dolaşarak sayın; ardından büyükAharfini 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.
BBveKaldı - 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 2alt alta - B.
0bir 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 0ve1 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/elsezincirinde yalnız ilk doğru dal çalışır; sınır değerlerini (eşik ve iki yanı) sınayın.forelemanın kendisini verir; indeks tutmak gerekmez.range(a, b)adâhilbhariç; üçüncü parametre adımdır.whilekoşul doğru kaldıkça döner; koşuldaki değeri değiştiren satır yoksa döngü bitmez.breakdöngüyü bitirir,continueturu atlar,passyer tutar;for-elsebreakolmadan biterse çalışır.- İç içe döngüde
breakyalnı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/elsezincirinde 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.whiledöngüsünün sonlanma koşulunu açıklar ve sonsuz döngüyü tanır.breakilecontinuearasındaki farkı iç içe döngü örneğinde gösterir.