YZ Destekli Kodlama Notları

Algoritmalar · Ünite 4

Yineleme ve Karar Yapıları

10 soruluk deneme testine geç ↓

1. Karar yapıları

Durakta beklerken gelen otobüsün numarasına bakıp binip binmemeye karar veririz. Programlar da aynısını yapar: koşullu ifade, programcının yazdığı bir koşulun doğru mu yanlış mı çıktığına göre farklı işlemler yaptıran komuttur. Koşul doğruysa bir yol, yanlışsa diğer yol izlenir, sonra kod kaldığı yerden devam eder.

Karar sembolü (eşkenar dörtgen) akışı ikiye ayırır: koşul doğruysa bir yol, yanlışsa öbür yol.

Karşılaştırma operatörleri

Karşılaştırma operatörü, iki değeri karşılaştırıp sonuç olarak doğru (true) ya da yanlış (false) döndüren operatördür. Örneğin «45 > 30» doğru, «5 > 12» yanlış sonuç verir. Genellikle değişkenlerle kullanılır: A < B ya da X + 7 >= Y gibi.

OperatörAnlamıDoğru olduğu durum
<KüçüktürSoldaki sağdakinden küçükse
>BüyüktürSoldaki sağdakinden büyükse
<=Küçük veya eşittirSoldaki sağdakinden küçük ya da ona eşitse
>=Büyük veya eşittirSoldaki sağdakinden büyük ya da ona eşitse
==Eşittirİki taraf eşitse
!=Eşit değildirİki taraf farklıysa

Mantıksal operatörler

Mantıksal operatör, birden çok karşılaştırmayı birleştirip tek bir doğru/yanlış sonucu veren operatördür. Üç tanedir: && (ve), || (veya) ve ! (değil).

OperatörPython'daNe zaman doğru?
&& (ve)andYalnızca iki taraf da doğruysa. Biri bile yanlışsa sonuç yanlış.
|| (veya)orEn az bir taraf doğruysa. Yalnızca ikisi de yanlışsa sonuç yanlış.
! (değil)notSonucu tersine çevirir: doğruyu yanlış, yanlışı doğru yapar.
vize > 60 && final > 60            # ikisi birden 60'ı geçmeli
sicaklik > 30 || sicaklik < 0      # çok sıcak YA DA dondurucu
(vize > 60 && final > 60) || (vize <= 60 && final > 80)

Tek seçimli yapı: if

if yapısı, «eğer koşul doğruysa (if) şu eylemi yap (then)» demektir. Koşul yanlışsa blok hiç çalışmaz, program if bloğundan sonraki ilk satırla devam eder.

mevsim = "kış"
IF mevsim == "kış" THEN
    PRINT "kar"
ENDIF

Çift seçimli yapı: if-else ve else if

if-else yapısında koşul doğruysa then bloğu, yanlışsa else bloğu çalışır. Yani iki bloktan biri mutlaka çalışır. Daha fazla seçenek varsa araya else if girer: «ilk koşul yanlış ama bu koşul doğruysa şunu yap, hiçbiri doğru değilse else'i yap».

IF not >= 85 THEN
    PRINT "pekiyi"
ELSE IF not >= 60 THEN
    PRINT "geçti"
ELSE
    PRINT "kaldı"
ENDIF

İç içe if

İç içe (yuvalanmış) if, başka bir if'in içine yerleştirilmiş if'tir. Karar vermeden önce birkaç koşulun birlikte kontrol edilmesi gerektiğinde kullanılır: önce dış koşul, o doğruysa içteki koşul sınanır.

IF ay = 1 THEN
    IF gün = 1 THEN
        PRINT "Ayın ilk günü"
    ENDIF
    IF gün = 31 THEN
        PRINT "Ayın son günü"
    ENDIF
ENDIF

Çok seçenekli yapı: switch-case

Switch (anahtar) yapısı, bir değişkenin alabileceği farklı değerlere göre farklı bloklar çalıştırır. Aynı işi uzun bir if…else if merdiveniyle de yapabilirsin, ama switch'i okumak ve yazmak daha kolaydır. Hiçbir durum tutmazsa DEFAULT bloğu çalışır.

SWITCH ay
    CASE 1: PRINT "ocak"
    CASE 2: PRINT "şubat"
    DEFAULT: PRINT "bilinmiyor"
ENDSWITCH

Python'da switch yerine 3.10 sürümüyle gelen match-case kullanılır. «Geri kalan her şey» durumu alt çizgiyle (case _) yazılır.

def ay_adi(ay):
    match ay:
        case 1:
            return "ocak"
        case 2:
            return "şubat"
        case _:
            return "bilinmiyor"

2. Döngüler

Ekrana 1000 kez «merhaba» yazmak için 1000 satır yazmak yerine döngü kullanırız. Döngü, belirli bir koşula ulaşılana kadar aynı işlemi tekrar eden talimattır. Döngü her turda bir soru sorar; cevap eylem gerektiriyorsa iş yapılır ve soru yeniden sorulur. Her bir tura yineleme denir.

for döngüsü

for döngüsü, döngüye girmeden önce kaç tur döneceği belli olduğunda kullanılır. Bilinen değer sabit bir sayı ya da bir dizinin eleman sayısı olabilir. Örneğin 1'den N'e kadar sayıların toplamı: toplam = 0 ile başla, sayi 1'den N'e kadar giderken her turda toplam = toplam + sayi yap.

FOR aylar = 1 to 12
    PRINT aylar
ENDFOR

foreach ve Python'daki for

foreach döngüsü, bir koleksiyondaki ögeleri tek tek gezen döngüdür. Açık bir sayaç tutmaz; «bunu x kez yap» yerine «bunu bu kümedeki her şeye yap» der. Sayaç olmadığı için birer kaydırma hataları azalır, kod da daha kolay okunur. Python'daki for aslında bir foreach'tir.

kelimeler = ["demet", "trafo", "telsiz", "kafa", "çubuk", "tat"]
for x in kelimeler:
    if len(x) == 5:
        print(x)        # demet, trafo, çubuk

range() fonksiyonu

Python'da for'un belli sayıda dönmesi için range() kullanılır. Varsayılan olarak 0'dan başlar, birer artar ve verilen sayıyı dahil etmez.

YazımÜrettiği sayılarKural
range(3)0, 1, 20'dan başlar, 3 dahil değil
range(3, 8)3, 4, 5, 6, 7Başlangıç verilebilir, bitiş yine dahil değil
range(3, 8, 2)3, 5, 7Üçüncü değer adım (artış) miktarı

Python'da for'un sonuna bir else bloğu eklenebilir: döngü normal biçimde bitince bir kez çalışır. Döngü break ile kesilirse else bloğu çalışmaz.

for x in range(4):
    print(x)
else:
    print("döngü sonlandı")

while döngüsü

while döngüsü bir koşul ve bir bloktan oluşur. Koşul blok çalışmadan önce kontrol edilir; doğruysa blok çalışır, sonra koşula yeniden bakılır. Koşul yanlış olunca döngü biter. Kaç tur döneceği önceden belli değildir.

x = 1
while x < 10:
    print(x)
    x += 1      # bu satır olmasa döngü hiç bitmezdi

do-while döngüsü

do-while döngüsü de koşula bağlıdır ama önce bloğu çalıştırır, sonra koşula bakar. Bu yüzden koşul baştan yanlış olsa bile blok en az bir kez çalışır. Python'da do-while yoktur; while ile taklit edilir.

sayi = 1
DO
    PRINT sayi
    sayi = sayi + 1
WHILE (sayi < 0)      # koşul baştan yanlış, yine de ekrana 1 yazılır
forwhiledo-while
Tur sayısı önceden belli mi?EvetHayırHayır
Koşul ne zaman kontrol edilir?Sayaç sınırına göreBloktan önceBloktan sonra
En az kaç kez çalışır?001
Python'da var mı?Var (foreach gibi)VarYok, while ile taklit edilir

İç içe döngüler

İki boyutlu bir tabloyu ya da koordinat sistemini gezerken döngü içinde döngü gerekir. İç içe döngüde dış döngünün her turu, iç döngüyü baştan sona bir kez çalıştırır.

for x in range(1, 3):        # x = 1, 2
    for y in range(2, 4):    # y = 2, 3
        print(x * y)         # 2, 3, 4, 6

Sonsuz döngüler

Sonsuz döngü, dışarıdan müdahale edilmedikçe hiç bitmeyen döngüdür. Kasıtlı da olabilir: kullanıcı «çıkış» yazana kadar çalışan bir menü gibi. En yaygın yolu koşulu hep doğru olan bir while yazmaktır.

while True:
    print("sonsuz döngü")

Kasıtsız sonsuz döngü ise bir mantık hatasıdır: koşuldaki değişken döngü içinde hiç değişmez ya da yanlış yönde değişir. Program donar, bellek ve disk işlemleri bilgisayarı yavaşlatabilir; kullanıcı ya da işletim sistemi programı kapatmak zorunda kalır.

y = 4
while y > 3:      # y hiç değişmiyor → bitmez
    print(y)

x = 1
while x < 5:
    x = 1         # her turda başa sarılıyor
    x = x + 1     # x hep 2 olur → bitmez

continue ve break

continue o turun geri kalanını atlar ve sıradaki tura geçer; break döngüden tamamen çıkar.
for sayi in range(1, 10):
    if sayi % 2 == 0:
        continue      # çiftleri atla
    if sayi > 7:
        break         # 7'yi geçince tamamen dur
    print(sayi)       # 1, 3, 5, 7

Kendini test et!

Cevabı görmek için soruya dokun.

  1. 1.Karşılaştırma operatörleri sonuç olarak ne döndürür?

    ✓ Doğru (true) ya da yanlış (false).

  2. 2.|| (veya) operatörü hangi durumda yanlış sonuç verir?

    ✓ Yalnızca iki taraf da yanlışsa.

  3. 3.if-else yapısında kaç bloktan kaçı çalışır?

    ✓ İki bloktan biri mutlaka çalışır.

  4. 4.Python'da switch-case'in karşılığı nedir?

    ✓ match-case yapısı.

  5. 5.range(2, 10, 3) hangi sayıları üretir?

    ✓ 2, 5, 8.

  6. 6.while ile do-while arasındaki temel fark nedir?

    ✓ while koşula önce bakar; do-while bloğu önce çalıştırır, koşula sonra bakar, yani en az bir kez çalışır.

  7. 7.continue ile break'in farkı nedir?

    ✓ continue o turun kalanını atlayıp sıradaki tura geçer; break döngüden tamamen çıkar.

Deneme testi

Sınavda çıkabilecek türden 10 soru. Bir şık seç; doğru cevap ve açıklaması hemen çıkar.

  1. 1.Birden çok karşılaştırmayı birleştirip tek bir doğru/yanlış sonucu veren operatörlere ne ad verilir?

  2. 2.Bir yarışmaya «18 yaşından büyük ve şehirde yaşayan» ya da «öğretmen olan» kişiler katılabiliyor. Doğru koşul hangisidir?

  3. 3.a = 7 iken aşağıdaki ifadelerden hangisi doğru (true) sonuç verir?

  4. 4.Bir notu «pekiyi (85+)», «geçti (60+)» ve «kaldı» diye sınıflayan else if zincirinde koşulların sırası neden önemlidir?

  5. 5.Bir değişkenin alabileceği pek çok farklı değere göre farklı kod blokları çalıştırmak için en okunaklı yapı hangisidir?

  6. 6.Python'da range(2, 11, 3) hangi sayıları üretir?

  7. 7.Koşul ne olursa olsun döngü bloğunun en az bir kez çalışmasını garanti eden döngü hangisidir?

  8. 8.for i in range(3) içinde for j in range(4) bulunan iç içe döngüde, içteki print kaç kez çalışır?

  9. 9.Aşağıdakilerden hangisi kasıtsız bir sonsuz döngünün tipik sebebidir?

  10. 10.1'den 9'a kadar dönen bir for döngüsünde «sayi çiftse continue, sayi 6'dan büyükse break» yazılı ve ardından print(sayi) var. Ekrana ne yazılır?

Sınıf grubuna gönder:WhatsApp'ta paylaş

Bu not ders kitabının yerine geçmez; konu kendi cümlelerimizle, yapay zekâ desteğiyle özetlendi.