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.
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ör | Anlamı | Doğru olduğu durum |
|---|---|---|
| < | Küçüktür | Soldaki sağdakinden küçükse |
| > | Büyüktür | Soldaki sağdakinden büyükse |
| <= | Küçük veya eşittir | Soldaki sağdakinden küçük ya da ona eşitse |
| >= | Büyük veya eşittir | Soldaki 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ör | Python'da | Ne zaman doğru? |
|---|---|---|
| && (ve) | and | Yalnızca iki taraf da doğruysa. Biri bile yanlışsa sonuç yanlış. |
| || (veya) | or | En az bir taraf doğruysa. Yalnızca ikisi de yanlışsa sonuç yanlış. |
| ! (değil) | not | Sonucu 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"
ENDSWITCHPython'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
ENDFORforeach 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, çubukrange() 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ılar | Kural |
|---|---|---|
| range(3) | 0, 1, 2 | 0'dan başlar, 3 dahil değil |
| range(3, 8) | 3, 4, 5, 6, 7 | Baş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ç bitmezdido-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| for | while | do-while | |
|---|---|---|---|
| Tur sayısı önceden belli mi? | Evet | Hayır | Hayır |
| Koşul ne zaman kontrol edilir? | Sayaç sınırına göre | Bloktan önce | Bloktan sonra |
| En az kaç kez çalışır? | 0 | 0 | 1 |
| Python'da var mı? | Var (foreach gibi) | Var | Yok, 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, 6Sonsuz 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 → bitmezcontinue ve break
- →continue (döngü adımını atlama): o turun geri kalanını atlar, döngü bir sonraki turla devam eder. Bazı dillerde skip ya da next olarak geçer.
- →break (döngüyü sonlandırma): döngüden hemen çıkar, döngüden sonraki ilk satırdan devam edilir. Bazı dillerde exit ya da last olarak geçer.
- →İç içe döngülerde break yalnızca içinde bulunduğu döngüyü sonlandırır, dıştaki döngü devam eder.
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, 7Kendini test et!
Cevabı görmek için soruya dokun.
1.Karşılaştırma operatörleri sonuç olarak ne döndürür?
✓ Doğru (true) ya da yanlış (false).
2.|| (veya) operatörü hangi durumda yanlış sonuç verir?
✓ Yalnızca iki taraf da yanlışsa.
3.if-else yapısında kaç bloktan kaçı çalışır?
✓ İki bloktan biri mutlaka çalışır.
4.Python'da switch-case'in karşılığı nedir?
✓ match-case yapısı.
5.range(2, 10, 3) hangi sayıları üretir?
✓ 2, 5, 8.
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.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.Birden çok karşılaştırmayı birleştirip tek bir doğru/yanlış sonucu veren operatörlere ne ad verilir?
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.a = 7 iken aşağıdaki ifadelerden hangisi doğru (true) sonuç verir?
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.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.Python'da range(2, 11, 3) hangi sayıları üretir?
7.Koşul ne olursa olsun döngü bloğunun en az bir kez çalışmasını garanti eden döngü hangisidir?
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.Aşağıdakilerden hangisi kasıtsız bir sonsuz döngünün tipik sebebidir?
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?
Bu not ders kitabının yerine geçmez; konu kendi cümlelerimizle, yapay zekâ desteğiyle özetlendi.