Ders 3: while, for, nested loops, break, continue, try ve assert
3 Kasım 2026, Salı, 18.00, E4
Nezih Arhan Tözenbilek
Hacettepe University, Department of Computer Engineering
IEEE Hacettepe University Student Branch, Güz 2026
| 3A: tekrar ettirmek | 3B: loop'u ve hatayı yönetmek |
|---|---|
if, else, elif: programın kararı | range(): başla, bitiş, adım |
while ve devam şartı | str üzerinde for, nested loops |
counter, accumulator ve += | while True, break ve continue |
for loop | try, except ve assert |
Bu hafta bu iki şeyi öğreneceksiniz.
Aklınızda kalsın: loop her turun başında sorar.
Kaç ders? 2 1. dersin kodu: mat123 Kredi: 4 Puan (0-100): 66 MAT 123: 66 puan, katsayı 2.50 2. dersin kodu: fiz127 Kredi: 3 Puan (0-100): 77 FIZ 127: 77 puan, katsayı 3.00 Geçilen ders: 2/2 AGNO: 2.71
Programın karar veren yarısı
score = 66
if score >= 50:
print("geçti")
print("bitti")
geçti bitti
if bir şart sorar: True ise block çalışır, False ise atlanır.
score = 66
print(score >= 50)
print(score == "66")
True
TrueTrue
FalseFalse
False66 bir int, "66" bir str; farklı type'lar eşit sayılmaz, hata da vermez.
score = 40
if score >= 50:
print("geçti")
else:
print("kaldı")
print("bitti")
kaldı bitti
Şart False ise else'in block'u çalışır; iki yoldan tam biri.
score = 50
if score > 50:
print("geçti")
else:
print("kaldı")
print(score >= 50)
geçti
Truekaldı
Truekaldı
Falsegeçti
False50 > 50 False olduğu için else çalışır; 50 >= 50 ise True'dur.
score = 66
if score >= 50:
print("geçti")
if'ten sonraki satır girintili olmalı; block'u indentation belirler.
File "…/python-kurs/lesson3.py", line 3 print("geçti") ^^^^^IndentationError: expected an indented block after 'if' statement on line 2
score = 66
attendance = 80
print(score >= 50 and attendance >= 70)
print(score >= 90 or attendance >= 90)
print(not score >= 50)
True
False
FalseTrue
True
FalseFalse
False
TrueTrue
False
Trueand: ikisi de True; or: en az biri True; not: tersi.
score = 70
if score >= 85:
print("A3 ve üstü")
elif score >= 50:
print("geçti")
else:
print("kaldı")
geçti
elif, üstteki şart False ise sorulan yeni bir şarttır.
score = 87
if score >= 95:
print("A1")
elif score >= 90:
print("A2")
elif score >= 85:
print("A3")
else:
print("A3'ün altında")
A3
Şartlar yukarıdan aşağı sınanır; ilk True olanın block'u çalışır.
score = 90
if score >= 85:
print("A3 ve üstü")
if score >= 50:
print("geçti")
A3 ve üstü geçti
İki ayrı if'in ikisi de sorulur; elif olsaydı yalnızca ilki yazardı.
score = 90
if score >= 50:
print("geçti")
elif score >= 85:
print("A3 ve üstü")
geçtiA3 ve üstügeçti
A3 ve üstüİlk True olan şartın block'u çalışır: 90 >= 50 True, gerisine bakılmaz.
score = 40
if score >= 50:
print("geçti")
print("tebrikler")
print("bitti")
bittitebrikler
bittigeçti
tebrikler
bittiİki print de if'in block'unda; girintisiz print her zaman çalışır.
Satırları bir şart True olduğu sürece tekrarlamak
Her turda koşulur ve şınav çekilir; duş, turlar bitince bir kez alınır.
lap = 1
while lap <= 3:
print("koş")
lap = lap + 1
print("duş")
koş koş koş duş
Duş satırı içeri kayarsa her turdan sonra duş alınır; Python hata vermez.
i = 0
while i < 2:
i = i + 1
print("tur")
print("son")
tur
sontur
tur
sontur
son
tur
sontur
tur
son
sonprint("tur") block'un içinde, her turda çalışır; print("son") block'un dışında, bir kez çalışır.
Şart dört kez sorulur; dördüncüsünde False olur ve loop biter.
Loop'un ortasından çıkmayı aradan sonra göreceğiz.
i = 1
while i < 4:
i = i + 1
print(i)
1
2
32
32
3
41
2
3
4Şart yalnızca turun başında sorulur; i'yi 4 yapan tur da print'e kadar gider.
Loop'ta saymak ve toplamak
Accumulator kasadaki toplam gibidir: önce 0, her ürünle büyür, sonda fişe yazılır.
Accumulator loop'tan önce sıfırlanır, içinde büyür, loop'tan sonra okunur.
total = 0
i = 1
while i <= 3:
total += i
____
print(total) # 6 yazsın
i = 1i += 1total += 1breaki artmazsa şart hep True kalır; i += 1 ile üç tur: 1 + 2 + 3 = 6.
i = 1
while i <= 3:
total = 0
total = total + i
i = i + 1
print(total)
630total = 0 loop'un içinde: her turda sıfırlanır, yalnızca son i kalır.
Debugger programı adım adım yürütür ve value'ları gösterir.
Bir sıranın elemanlarını tek tek dolaşmak
range(4) 0, 1, 2 ve 3 verir; block dört kez çalışır.
for i in range(4):
print("Spam")
Spam Spam Spam Spam
Block i'yi kullanmak zorunda değil: dört tur, dört satır.
912810Her turda total'e i * 2 eklenir: 6 + 3 * 2 = 12.
Kural bir kez yazıldı, karar dört kez verildi.
total = 0
for i in range(1, 6):
if i % 2 == 1:
total += i
print(total)
15961
4
9Yalnızca tek sayılar (1, 3, 5) toplanır; print loop'tan sonra bir kez çalışır.
total = 0
for i in range(4):
lap = int(input("Tur (ms): "))
total += lap
print("Toplam:", total)
Tur (ms): 82431 Tur (ms): 81976 Tur (ms): 82104 Tur (ms): 82650 Toplam: 329161
total = 0
best = 999999
for i in range(4):
lap = int(input("Tur (ms): "))
total += lap
if lap < best:
best = lap
minutes = total // 60000
seconds = total % 60000 // 1000
print(f"Toplam: {minutes} dk {seconds} sn")
print("En hızlı tur:", best)
Tur (ms): 82431 Tur (ms): 81976 Tur (ms): 82104 Tur (ms): 82650 Toplam: 5 dk 29 sn En hızlı tur: 81976
Tek loop toplamı da en hızlı turu da bulur.
total = 0
for i in range(4):
total += i
print(total)
1064range(4) 0, 1, 2 ve 3'ü verir: 0 + 1 + 2 + 3 = 6.
Sırada 3B
Sayı üretmek: başla, bitiş ve adım
range(<başla>, <bitiş>)
range(<başla>, <bitiş>, <adım>)
# 1, 3, 5 ve 7 yazsın
for i in range(____):
print(i)
1, 7, 21, 8, 20, 8, 21, 8Bitiş dahil değil: 8'de durur. Adım 2 ile 1, 3, 5, 7.
Numbers(sayılar)
Integral
int7boolTrueReal
float3.5Sequences(diziler)
Immutable
str"7"rangerange(3)tupleDers 5Mutable
listDers 5Set types(kümeler)
setDers 5Mappings
dictDers 5None
NoneTypeDers 4
print(type(range(3)))
<class 'range'>
range da bir type'tır; str gibi sequence (dizi) ailesindedir.
for i in range(10, 0):
print(i)
print("bitti")
bittibittiRange boş: block hiç çalışmaz.
for, bir str'yi karakter karakter dolaşır
code = "MAT101"
for ch in code:
print(ch)
M A T 1 0 1
str de bir sıradır: for onun karakterlerini sırayla tek tek alır.
code = "mat101"
digits = 0
for ch in code.upper():
if ch in "0123456789":
digits += 1
print(f"{code.upper()}: {digits} rakam")
MAT101: 3 rakam
Her turda bir karakter sınanır; rakamsa counter bir artar.
word = "Hacettepe"
count = 0
for ch in word.lower():
if ch == "h":
count += 1
print(f"{word.upper()}: {count}")
Hacettepe: 1HACETTEPE: 0hacettepe: 1HACETTEPE: 1lower() ve upper() yeni bir str verir, word değişmez; tek h var.
Bir loop'un içinde başka bir loop
Nested loop, her katta o katın bütün kapılarına ekmek bırakan kapıcı gibidir.
for floor in range(1, 3):
for door in range(2):
print(floor, door)
1 0 1 1 2 0 2 1
Her dış turda iç for satırı j'yi yeniden 0'a bağlar.
for i in range(1, 3):
for j in range(3):
print(i, j)
1 0
1 1
1 2
2 0
2 1
2 21 0
2 0
1 1
2 1
1 2
2 21 0
1 1
1 21 1
1 2
1 3
2 1
2 2
2 3İç loop her dış turda baştan çalışır: i = 1 için j 0, 1, 2; sonra i = 2 için yine.
10 satır çarpı 10 sütun: iç loop'un block'u 100 kez çalışır.
count = 0
for i in range(1, 11):
for j in range(1, 11):
count += 1
print(count)
100
row boş str'den başlar; her turda bir * eklenir.
for y in range(-5, 6):
row = ""
for x in range(-11, 12):
d = (x / 2) ** 2 + y ** 2
if d >= 12 and d <= 30:
row += "#"
else:
row += " "
print(row)
Bir görüntü, satır ve sütunlara dizilmiş sayılardır; nested loops onu satır satır kurar.
#########
###############
###### ######
##### #####
#### ####
#### ####
#### ####
##### #####
###### ######
###############
#########
Bu loop beş çizgiyle bir yıldız çizer.
for side in range(5):
pen.forward(200)
pen.right(144)
Dış loop 36 kez döner; her turda bir yıldız ve 10 derece dönüş.
for i in range(36):
if i % 3 == 0:
pen.color("cyan")
elif i % 3 == 1:
pen.color("magenta")
else:
pen.color("yellow")
for side in range(5):
pen.forward(200)
pen.right(144)
pen.right(10)
count = 0
for i in range(3):
for j in range(2):
count += 1
print(count)
5632Dış loop 3 tur döner, her turda iç loop 2 tur: 3 × 2 = 6.
Bir loop'tan ortasında çıkmak
Akış, loop'tan sonraki ilk satırdan devam eder.
break, dolmuşta "İnecek var" demek gibidir: kalan duraklar sizin için biter.
i 2 iken break çalışır; range'in 3, 4 ve 5'i hiç gelmez.
Her turun başında sorulan şart hep True; tek çıkış break.
total = 0
while True:
number = int(input("Sayı: "))
if number == 0:
break
total += number
print("Toplam:", total)
Sentinel, girdinin bittiğini bildiren özel bir value'dur; burada 0.
Sayı: 5 Sayı: 7 Sayı: 0 Toplam: 12
0 gelince break çalışır; 0 toplama eklenmez.
Sentinel, kasadaki ayırıcı çubuk gibidir: ürün değil, işarettir.
Puanda sentinel 0 değil, -1.
print(1)
break
File "…/python-kurs/lesson3.py", line 22 break ^^^^^3SyntaxError: 'break' outside loop1
Loop'un dışındaki break, dosyanın hiçbir satırını çalıştırmaz.
for i in range(1, 10):
if i == 3:
break
print(i)
print("son", i)
1
2
3
son 31
2
son 91
2
son 31
2
son 2i 3 olunca break print'ten önce çalışır; akış loop'tan sonra devam eder, i 3'te kalır.
Loop'un yalnızca bir adımını bitirmek
Akış loop'un başına döner; loop sonraki adımla devam eder.
-5'te continue: o adımda toplama yok, loop sürer.
for i in range(5):
if i == 2:
continue
print(i)
0
1
2
3
40
1
3
40
12continue yalnızca i 2 olan adımı bitirir; loop 3 ve 4 ile sürer.
Hatayı yakalayıp devam etmek ya da bilerek durmak
credits = int(input("Kredi: "))
print(credits * 2)
try:
x = int("3.5")
print("A")
except ValueError:
print("B")
BAA
Bint("3.5") hata verir; print("A") atlanır, except çalışır.
score = 120
assert score >= 0, "negatif"
print("A")
assert score <= 100, "100'den büyük"
print("B")
A
BA, sonra AssertionErrorA, AssertionError, B120 <= 100 False: AssertionError çıkar, program durur.
| Ne zaman çalışır? | Sonra ne olur? | Sürer mi? | |
|---|---|---|---|
break | satırına gelince | loop'tan sonraki satıra geçilir | loop biter, program sürer |
continue | satırına gelince | loop'un başına dönülür | loop sürer |
except | try'da o exception çıkınca | except'in block'u çalışır | program sürer |
assert | şartı False olunca | AssertionError çıkar | program durur |
Dördü de akışı değiştirir; programı yalnızca assert durdurur.
Ödev 3, odev3.py dosyasıdır: TODO'ları doldurup aynı dosyayı formdan yüklersiniz.
İsteğe bağlı; bağlantılar Ek kaynaklar sayfasında.
Bugün bilgisayara ilk kez bir işi bıkmadan tekrar ettirdiniz.
- Bir işi while ve for ile tekrar ettirmek
- Counter ile saymak, accumulator ile toplamak
- break ile loop'tan çıkmak, continue ile bir turu atlamak
- try ile hatayı yakalayıp devam etmek, assert ile bilerek durmak