Ders programı

Ders programı: Ders 1 ve Ders 2 bitti, bugün Ders 3 Beş sütunlu ders programı, soldan sağa. Sağ üstte Salı, 18.00, E4. Ders 1, 20 Ekim (üstünde petrol mavisiyle bitti yazıyor, başlığı gri): bilgisayar, print(), error messages, int (turuncu), float (hardal sarısı), variable; Ödev 1, 25 Ekim Pazar 23.59. Ders 2, 27 Ekim (üstünde petrol mavisiyle bitti yazıyor, başlığı gri): str (yeşil), input(), f-string, index, slicing, bool (deniz yeşili), if / elif; Ödev 2, 1 Kasım Pazar 23.59. Ders 3, 3 Kasım (üstünde bugün yazıyor, başlığı açık mavi ve çivit mavisi çerçeveyle vurgulu): while, for, break, continue, try / except, assert; Ödev 3, 8 Kasım Pazar 23.59. Ders 4, 10 Kasım: import, def, return, scope, None (bej), class; Ödev 4, 15 Kasım Pazar 23.59. Ders 5, 17 Kasım: list (vişneçürüğü), tuple (mavi gri), aliasing, dict (kahverengi), set (zeytin yeşili), file; Ödev 5, 22 Kasım Pazar 23.59. Alt satır: Her Ödev, dersten sonraki Pazar 23.59'a kadar teslim edilir. Salı, 18.00, E4 bitti Ders 1 20 Ekim bilgisayar print() error messages int float variable Ödev 1 25 Ekim Pazar 23.59 bitti Ders 2 27 Ekim str input() f-string index, slicing bool if / elif Ödev 2 1 Kasım Pazar 23.59 bugün Ders 3 3 Kasım while for break continue try / except assert Ödev 3 8 Kasım Pazar 23.59 Ders 4 10 Kasım import def return scope None class Ödev 4 15 Kasım Pazar 23.59 Ders 5 17 Kasım list tuple aliasing dict set file Ödev 5 22 Kasım Pazar 23.59 Her Ödev, dersten sonraki Pazar 23.59'a kadar teslim edilir.

Ders 3'ün hedefi

3A: tekrar ettirmek3B: 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 looptry, except ve assert

Bu hafta bu iki şeyi öğreneceksiniz.

Aklınızda kalsın: loop her turun başında sorar.

Bir dersten istediğiniz kadar derse

Ders 3'ün hedefi: tek dersten istenen sayıda derse Soldan sağa iki panel ve bir ok. Solda Ders 2 başlıklı çıktı paneli: Puan (0-100): 66 (66 petrol mavisi, kullanıcının yazdığı) ve MAT123: 66 puan, katsayı 2.50, geçti; altında: bir ders. Ortada sağa giden bir ok. Sağda Ders 3 başlıklı çıktı paneli: Kaç ders? 2 (2 petrol mavisi), üç nokta, FIZ 127: 77 puan, katsayı 3.00, Geçilen ders: 2/2 ve AGNO: 2.71; son iki satır açık mavi bir bantta, çivit mavisi çerçeveli. Panelin altında: istediğiniz kadar ders, sayaç ve AGNO. Ders 2 Puan (0-100): 66 MAT123: 66 puan, katsayı 2.50, geçti bir ders Ders 3 Kaç ders? 2 … FIZ 127: 77 puan, katsayı 3.00 Geçilen ders: 2/2 AGNO: 2.71 istediğiniz kadar ders, sayaç ve AGNO
Ders 2'nin programı tek dersi soruyordu; bu haftaki istediğiniz kadar ders sorar.

Ders 3'ün hedef programı

Run penceresi
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

1. Karar kısmı: if, else ve elif

Programın karar veren yarısı

if


score = 66
if score >= 50:
    print("geçti")
print("bitti")
Çıktı
geçti
bitti

if bir şart sorar: True ise block çalışır, False ise atlanır.

Python ne yazdırır?


score = 66
print(score >= 50)
print(score == "66")
      
  1. True True
  2. True False
  3. False False
  4. Hata verir

if ve else


score = 40
if score >= 50:
    print("geçti")
else:
    print("kaldı")
print("bitti")
Çıktı
kaldı
bitti

Şart False ise else'in block'u çalışır; iki yoldan tam biri.

Python ne yazdırır?


score = 50
if score > 50:
    print("geçti")
else:
    print("kaldı")
print(score >= 50)
      
  1. geçti True
  2. kaldı True
  3. kaldı False
  4. geçti False

Block ve IndentationError


score = 66
if score >= 50:
print("geçti")

if'ten sonraki satır girintili olmalı; block'u indentation belirler.

Çıktı
  File "…/python-kurs/lesson3.py", line 3    print("geçti")    ^^^^^IndentationError: expected an indented block after 'if' statement on line 2

Python ne yazdırır?


score = 66
attendance = 80
print(score >= 50 and attendance >= 70)
print(score >= 90 or attendance >= 90)
print(not score >= 50)
      
  1. True False False
  2. True True False
  3. False False True
  4. True False True

elif


score = 70
if score >= 85:
    print("A3 ve üstü")
elif score >= 50:
    print("geçti")
else:
    print("kaldı")
Çıktı
geçti

elif, üstteki şart False ise sorulan yeni bir şarttır.

elif merdiveni


score = 87
if score >= 95:
    print("A1")
elif score >= 90:
    print("A2")
elif score >= 85:
    print("A3")
else:
    print("A3'ün altında")
Çıktı
A3

Şartlar yukarıdan aşağı sınanır; ilk True olanın block'u çalışır.

if ve elif farkı


score = 90
if score >= 85:
    print("A3 ve üstü")
if score >= 50:
    print("geçti")
Çıktı
A3 ve üstü
geçti

İki ayrı if'in ikisi de sorulur; elif olsaydı yalnızca ilki yazardı.

Python ne yazdırır?


score = 90
if score >= 50:
    print("geçti")
elif score >= 85:
    print("A3 ve üstü")
      
  1. geçti
  2. A3 ve üstü
  3. geçti A3 ve üstü
  4. Hiçbir şey yazmaz

Python ne yazdırır?


score = 40
if score >= 50:
    print("geçti")
    print("tebrikler")
print("bitti")
      
  1. Hiçbir şey yazmaz
  2. bitti
  3. tebrikler bitti
  4. geçti tebrikler bitti

2. while loop

Satırları bir şart True olduğu sürece tekrarlamak

Repetition (tekrarlama)

Üç control structure Üç küçük akış şeması yan yana. Sequence (art arda çalıştırma): 1. satır, 2. satır, 3. satır kutuları oklarla alt alta. Repetition (tekrarlama): devam şartı baklavası; petrol mavisi True oku block kutusuna iner, block'tan bir ok geri dönüp baklavanın sol köşesine girer; kırmızı False oku sağ köşeden çıkar. Decision (karar): şart baklavası; petrol mavisi True oku block A'ya, kırmızı False oku block B'ye gider, iki yol aşağıda bir noktada birleşir. Ders 2'de (data-now decision): karar çerçevesi çivit mavisi, başlığı açık mavi bantta vurgulu; art arda çalıştırma düz; tekrarlama gri, kesik çizgili, sağ üstünde Ders 3 yazıyor. Ders 3'te (data-now repetition): tekrarlama vurgulu, öteki ikisi düz. Sequence (art arda çalıştırma) Ders 3 1. satır 2. satır 3. satır Repetition (tekrarlama) Ders 3 devam şartı True block False Decision (karar) Ders 3 şart True False block A block B
Üç yapının sonuncusu tekrarlama: bir şart True olduğu sürece aynı satırlar yeniden çalışır.

while loop (döngü)

while loop akış şeması Akış şeması: Başla, i = 3 kutusu (3 int, turuncu), i > 0 karar baklavası. Petrol mavisi True oku print(i) ve i = i - 1 satırlarını tutan kutuya iner; bu kutudan çıkan ok sola, yukarı ve sağa dönerek baklavanın sol köşesine geri girer. Geri dönen ok açık mavi ve çivit mavisi çerçeveli bantla vurgulu, yanında her turun başında yeniden sorulur yazıyor. Kırmızı False oku sağ köşeden print("Bitti") kutusuna gider ("Bitti" str, yeşil), sonra Bitir. Sağ üstte Genel biçim: while <devam şartı>: ve dört boşluk içeride <block>. Altında çıktı paneli: 3, 2, 1, Bitti. Başla i = 3 i > 0 True print(i) i = i - 1 her turun başında yeniden sorulur False print("Bitti") Bitir Genel biçim while <devam şartı>: <block> Çıktı 3 2 1 Bitti
while, devam şartı True olduğu sürece block'u tekrar çalıştırır.

Kopyalamak ve loop

Kopyalamak yerine loop İki sütun. Solda "Kopyalayarak": dört kez kopyalanmış print("Spam") satırı ("Spam" str, yeşil); ok, dört satır Spam yazan çıktı kutusuna gider; altında: 40 kez için 40 satır kopyalanır. Sağda "Loop ile": i = 0, while i < 4:, içeride print("Spam") ve i = i + 1 (0, 4 ve 1 int, turuncu; "Spam" str, yeşil); while satırındaki 4 açık mavi ve çivit mavisi çerçeveli bir şeritte. Ok aynı çıktıya gider: dört satır Spam. Altında: 40 kez için 4 yerine 40 yazılır. Kopyalayarak print("Spam") print("Spam") print("Spam") print("Spam") Çıktı Spam Spam Spam Spam 40 kez için 40 satır kopyalanır. Loop ile i = 0 while i < 4 : print("Spam") i = i + 1 Çıktı Spam Spam Spam Spam 40 kez için 4 yerine 40 yazılır.
Aynı satırı kopyalamak yerine bir loop yazılır.

if ve while

if ve while: aynı block İki izlenmiş akış şeması yan yana. Solda if: kod x = 3, if x > 0:, print(x), x = x - 1; 3, 0 ve 1 turuncu (int). Akış: x = 3, x > 0 baklavası, petrol mavisi True oku print(x) kutusuna, sonra x = x - 1, sonra aşağı Bitir; başa dönen ok yok. False oku gri, kullanılmadı. Çıktı: 3. Sağda while: aynı kod, if yerine while x > 0:. Aynı akış, ama x = x - 1 kutusundan baklavanın sol köşesine dönen bir ok var; ok açık mavi, çivit mavisi çerçeveli bantta, yanında başa dön. Kırmızı False oku Bitir'e gider. Çıktı: 3, 2, 1. if x = 3 if x > 0: print(x) x = x - 1 Çıktı 3 x = 3 x > 0 True print(x) x = x - 1 False Bitir while x = 3 while x > 0: print(x) x = x - 1 Çıktı 3 2 1 x = 3 x > 0 True print(x) x = x - 1 başa dön False Bitir
Aynı block: if bir kez çalışır, while şart False olana kadar.

Block'un içi ve dışı

Block'un içi ve dışı İki sütun, aynı dört satır: i = 0, while i < 3:, içeride i = i + 1, sonra print(i) (0, 3 ve 1 int, turuncu). Solda, başlık print block'un içinde: son satırın başındaki dört boşluk dört çivit mavisi noktayla gösterilmiş, print(i) içeride; son satır açık mavi bir şeritte. Ok çıktıya gider: 1, 2, 3. Altında: print(i) her turda çalışır. Sağda, başlık print block'un dışında: print(i) satırın en başında, indentation yok; son satır yine açık mavi şeritte. Ok çıktıya gider: yalnızca 3; bu çıktı kutusu açık mavi ve çivit mavisi çerçeveli. Altında: print(i) loop bitince bir kez çalışır. Tek fark son satırın indentation'ı. print block'un içinde i = 0 while i < 3: i = i + 1 print(i) Çıktı 1 2 3 print(i) her turda çalışır. print block'un dışında i = 0 while i < 3: i = i + 1 print(i) Çıktı 3 print(i) loop bitince bir kez çalışır.
Block'un içindeki satır her turda, dışındaki bir kez çalışır.

Block ve koşu turu

Her turda koşu ve şınav, en sonda bir kez duş Elle çizilmiş gibi basit bir resim. Solda yukarıdan görülen bir okul koşu pisti var; üstünde "her turda: koşu, şınav" yazıyor. Pistin üst düzlüğünde üç beyaz tur çizgisi var. Pistin içindeki çimende aynı öğrencinin şınav çektiği üç küçük kare bir film şeridi gibi yan yana duruyor; camgöbeği tişörtlü öğrenci pistin alt düzlüğünde koşuyor. Pistten çıkan bir ok sağdaki duş kabinini gösteriyor; kabinde perde açık, duş başlığından su akıyor. Kabinin altında "bir kez: duş" yazıyor. her turda: koşu, şınav bir kez: duş

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ş")
Çıktı
koş
koş
koş
duş

Indentation ve duş

Duş döngünün içine kayarsa her turda duş Elle çizilmiş gibi basit bir resim. Aynı koşu pisti; üstünde "her turda: koşu, şınav, duş" yazıyor. Duş kabini pistin dışından kalkmış, yerinde yalnızca kesikli bir çizgi kalmış; bir ok oradan pistin içine, çimenin üstüne taşınan duş başlığını gösteriyor. Pistte koşan öğrenci duşun altında kalmış, başına su damlıyor; öğrenci endişeli ve konuşma balonunda "Yine mi duş?" yazıyor. Çimenin üstünde şınav çeken iki küçük kare de var. her turda: koşu, şınav, duş Yine miduş?

Duş satırı içeri kayarsa her turdan sonra duş alınır; Python hata vermez.

Python ne yazdırır?


i = 0
while i < 2:
    i = i + 1
    print("tur")
print("son")
      
  1. tur son
  2. tur tur son
  3. tur son tur son
  4. tur tur son son

while'ın üç parçası

while loop'un üç parçası ve güncellemesiz loop Solda beş satırlık kod: i = 3, while i > 0:, içeride print(i) ve i = i - 1, sonra print("Bitti") (3, 0 ve 1 int, turuncu; "Bitti" str, yeşil). Üç parça açık mavi şeritlerde ve numaralı notlarla adlandırılmış: 1 i = 3, başlangıç; 2 i > 0, devam şartı; 3 i = i - 1, güncelleme. Sağda Run penceresi: 3, 2, 1, Bitti. Altta soru: Güncelleme satırı olmasaydı loop biter miydi? Tıklayınca i = i - 1 satırı kırmızı kesik çizgili bir çerçeveye alınır ve cevap gelir: Bitmezdi: i hep 3 kalır, i > 0 hep True olur. i = 3 while i > 0 : print(i) i = i - 1 print("Bitti") 1 başlangıç 2 devam şartı 3 güncelleme Run penceresi 3 2 1 Bitti Güncelleme satırı olmasaydı loop biter miydi? Bitmezdi: i hep 3 kalır, i > 0 hep True olur.
Bir while üç parçayla çalışır: başlangıç, devam şartı ve güncelleme.

while adım adım

Şart dört kez sorulur; dördüncüsünde False olur ve loop biter.

Infinite loop (sonsuz döngü)

Infinite loop: güncellemesi olmayan while Solda güncellemesi olmayan bir while loop'un akış şeması. i = 3 kutusu (3 int, turuncu) devam şartı i > 0 yazan baklava biçimine girer. Petrol mavisi True oku block'a gider; block'ta yalnızca print(i) var, altında i = i - 1 satırının durduğu yerde boş, kırmızı kesik çizgili bir kutu ve kırmızı güncelleme yok yazısı. Block'un sonundan çıkan ok yukarıdan dolaşıp şarta geri döner; bu geri dönen ok açık mavi bant ve çivit mavisi çerçeveyle vurgulu. Şart her turda yine True olur, çünkü i hep 3. Gri False oku soluk bir Bitir kutusuna iner, yanında hiç gelinmez yazar. Sağda Run penceresi: art arda yedi satır 3 ve en altta üç nokta, yani çıktı durmadan sürer; pencerenin sol üst köşesinde kırmızı kare Stop düğmesi, 1 numaralı işaret ve Stop yazısı. i = 3 i > 0 True print(i) güncelleme yok False Bitir hiç gelinmez Run 1 Stop 3 3 3 3 3 3 3 …
Güncelleme yoksa şart hep True kalır; loop bitmez.

Loop'un ortasından çıkmayı aradan sonra göreceğiz.

Python ne yazdırır?


i = 1
while i < 4:
    i = i + 1
    print(i)
      
  1. 1 2 3
  2. 2 3
  3. 2 3 4
  4. 1 2 3 4

3. Counter, accumulator ve +=

Loop'ta saymak ve toplamak

Counter (sayaç)

Counter: count her turda 1 artar Solda kod: count = 0, i = 10, while i > 0:, içeride count = count + 1 ve i = i - 3, en sonda print(count, i); count = 0 satırında loop'tan önce, count = count + 1 satırında her turda yazıyor. Sağda tablo, sütunlar tur, i (başta), count, i (sonra), çetele. Tur 1: i 10, count 1, i 7, bir çizgi. Tur 2: i 7, count 2, i 4, iki çizgi. Tur 3: i 4, count 3, i 1, üç çizgi. Tur 4: i 1, count 4, i -2, dört çizgi. Sayılar int (turuncu); çetele çizgileri çivit mavisi, her turda bir çizgi. count sütunu çivit mavisi çerçeveyle vurgulu: her turda 1 artar. Altta: i = -2 iken i > 0 False, loop biter; çıktı 4 -2. count = 0 i = 10 while i > 0: count = count + 1 i = i - 3 print(count, i) loop'tan önce her turda tur i (başta) count i (sonra) çetele 1 10 1 7 2 7 2 4 3 4 3 1 4 1 4 -2 i = -2 iken i > 0 False, loop biter Çıktı 4 -2
Counter her turda bir artar ve turları sayar.

+=

x = x + 1 ve x += 1 İki satır, aynı resim. Üstte x = x + 1, altta x += 1; aralarında aynı iş yazıyor. Her satırın sağında lacivert x isim etiketi: eski oku gri ve kesik çizgili, 5'i gösterir (int, turuncu); yeni oku düz, 6'yı gösterir (int, turuncu). 6 her iki resimde de açık mavi bant ve çivit mavisi çerçeveyle vurgulu. İki satır da x'in okunu 5'ten 6'ya taşır. x = x + 1 x 5 6 x += 1 x 5 6 aynı iş
x += 1, x = x + 1'in kısa yazılışıdır.

++ ve SyntaxError

++ ve SyntaxError Üstte gri kod panelinde x = 5 ve x++ satırları; altında kırmızı şapka x++'nın bir karakter sağında ve kırmızı SyntaxError: invalid syntax. Altta üç sütun. Solda soluk gri başlık Java, C, JavaScript: soluk x++; ve x'i bir artırır. Ortada kırmızı başlık Python: x++ satırında ++ kırmızı yazılı ve altı kırmızı çizgiyle işaretli, kırmızı ok kırmızı SyntaxError'u gösterir. Sağda petrol mavisi başlık Python: x += 1, += 1 kısmı açık mavi bant ve çivit mavisi çerçeveyle vurgulu; altında lacivert x isim etiketi: eski oku gri ve kesik çizgili, 5'i gösterir; yeni oku düz, 6'yı gösterir; 5 ve 6 int (turuncu). x = 5 x++ ^ SyntaxError: invalid syntax Java, C, JavaScript x++; x'i bir artırır Python x++ SyntaxError Python x += 1 x 5 6
Python'da ++ yoktur; += 1 yazılır.

Accumulator

Accumulator: loop'tan önce, içinde, sonra Solda altı satırlık kod: total = 0, i = 1, while i <= 5:, içeride total = total + i ve i = i + 1, en sonda print(total); sayılar int (turuncu). Üç satırdan sağa çizgiler çıkıyor: total = 0 loop'tan önce, total = total + i loop'un içinde, print(total) loop'tan sonra. Sağ altta Çıktı paneli: 15. total = 0 i = 1 while i <= 5: total = total + i i = i + 1 print(total) loop'tan önce loop'un içinde loop'tan sonra Çıktı 15
Accumulator, loop boyunca bir toplamı biriktiren variable'dır.

Accumulator ve kasa

Accumulator kasadaki toplam gibidir Elle çizilmiş gibi basit bir resim. Üstte kasa ekranı bir film şeridi gibi çizilmiş: kareler soldan sağa 0, 1, 3, 6, 10 ve 15 gösteriyor, son kare kalın. Şeridin solunda total = 0, altında total = total + i yazıyor. Altta bir market kasası var: bantta 4 ve 5 numaralı ürünler bekliyor, kasiyer 3 numaralı ürünü barkod okuyucunun üstünden geçiriyor, 1 ve 2 numaralı ürünler okunmuş, sağda duruyor. total = 0 0 1 3 6 10 15 total = total + i 3 5 4 2 1

Accumulator kasadaki toplam gibidir: önce 0, her ürünle büyür, sonda fişe yazılır.

Accumulator adım adım

Accumulator loop'tan önce sıfırlanır, içinde büyür, loop'tan sonra okunur.

Boşluğa ne gelmeli?


total = 0
i = 1
while i <= 3:
    total += i
    ____
print(total)  # 6 yazsın
      
  1. i = 1
  2. i += 1
  3. total += 1
  4. break

İki accumulator

İki accumulator: total ve squares Solda kod: i = 1, total = 0, squares = 0, while i <= 3:, içeride total += i, squares += i * i ve i += 1, en sonda print(total, squares); total = 0 ve squares = 0 satırları bir köşeli çizgiyle loop'tan önce diye işaretli. Sağda tablo, sütunlar tur, i, total, squares. Başta: total 0, squares 0. Tur 1: i 1, total 1, squares 1. Tur 2: i 2, total 3, squares 5. Tur 3: i 3, total 6, squares 14. Sayılar int (turuncu). total ve squares sütunlarının her birinin kendi çivit mavisi çerçevesi var; iki ayrı accumulator. Son satır açık mavi ve çivit mavisi çerçeveli. Altta çıktı 6 14. i = 1 total = 0 squares = 0 while i <= 3: total += i squares += i * i i += 1 print(total, squares) loop'tan önce tur i total squares başta 0 0 1 1 1 1 2 2 3 5 3 3 6 14 Çıktı 6 14
Bir loop'ta birden çok accumulator olabilir; hepsi önce sıfırlanır.

Python ne yazdırır?


i = 1
while i <= 3:
    total = 0
    total = total + i
    i = i + 1
print(total)
      
  1. 6
  2. 3
  3. 0
  4. Hata verir

total = 0'ın yeri

total = 0'ın yeri: loop'tan önce ve loop'un içinde İki sütun. Solda petrol mavisi Doğru sonuç: kod total = 0, i = 1, while i <= 5:, içeride total = total + i ve i = i + 1, en sonda print(total); total = 0 satırı loop'tan önce, açık mavi bant üstünde. Tablosu tur 1-5 için total (sonra): 1, 3, 6, 10, 15; çıktı 15. Sağda kırmızı Yanlış sonuç: kod i = 1, while i <= 5:, içeride total = 0, total = total + i ve i = i + 1, en sonda print(total); total = 0 satırı loop'un içinde, açık mavi bant üstünde. Tablosunda her satırın önünde 0'dan yazar: total her turda sıfırlanır ve 1, 2, 3, 4, 5 olur; çıktı 5, açık mavi ve çivit mavisi çerçeveli. Sayılar int (turuncu). Altta: Accumulator loop'tan önce bir kez sıfırlanır. Doğru sonuç total = 0 i = 1 while i <= 5: total = total + i i = i + 1 print(total) tur total (sonra) 1 1 2 3 3 6 4 10 5 15 Çıktı 15 Yanlış sonuç i = 1 while i <= 5: total = 0 total = total + i i = i + 1 print(total) tur total (sonra) 1 0'dan 1 2 0'dan 2 3 0'dan 3 4 0'dan 4 5 0'dan 5 Çıktı 5 Accumulator loop'tan önce bir kez sıfırlanır.
total = 0 loop'un içindeyse her turda sıfırlanır.

Ortalama

Ortalama: total / count Solda kod: total = 0, count = 0, i = 1, while i <= 5:, içeride total += i, count += 1 ve i += 1, en sonda print(total, count, total / count). Sağda tablo, sütunlar i, total, count. i 1: total 1, count 1. i 2: total 3, count 2. i 3: total 6, count 3. i 4: total 10, count 4. i 5: total 15, count 5. Sayılar int (turuncu). Son satırdaki total 15 ve count 5 hücrelerinden iki ok total / count kutusuna iner; oradan bir ok 3.0 değerine gider: 3.0 (float, hardal sarısı), açık mavi bant ve çivit mavisi çerçeveli, yanında float etiketi. Çıktı: 15 5 3.0. total 15 ve count 5 bölününce 3.0 olur. total = 0 count = 0 i = 1 while i <= 5: total += i count += 1 i += 1 print(total, count, total / count) i total count 1 1 1 2 3 2 3 6 3 4 10 4 5 15 5 total / count 3.0 float Çıktı 15 5 3.0
Bir counter ve bir accumulator birlikte ortalamayı verir.

Kağıdı Ay'a kadar katlamak

Kağıdı Ay'a kadar katlamak Solda dokuz satırlık kod: thickness = 0.1 (float, hardal sarısı), moon = 384400 * 1000 * 1000, folds = 0, while thickness < moon: ile içeride thickness = thickness * 2 ve folds += 1, sonra print(folds, "katlama"), km = thickness / 1000000 ve print(f"{km:.2f} km"). Sağ üstte soru: Kağıt kaç katlamada Ay'a ulaşır? Tıklayınca çıktı: 42 katlama, 439804.65 km. Sağda katlama merdiveni, sayılar Python'un yazdığı gibi noktalı, binler boşlukla: 0 katlamada 0.1 mm, 10'da 10.24 cm, 20'de 104.86 m, 30'da 107.37 km, 40'ta 109 951 km, 42'de 439 805 km; Ay: 384 400 km çizgisi 40 ile 42 arasında; 42 basamağı açık mavi, çivit mavisi çerçeveli. Katlama sayıları turuncu (int). thickness = 0.1 moon = 384400 * 1000 * 1000 folds = 0 while thickness < moon: thickness = thickness * 2 folds += 1 print(folds, "katlama") km = thickness / 1000000 print(f"{km:.2f} km") Kağıt kaç katlamada Ay'a ulaşır? Çıktı 42 katlama 439804.65 km 42 439 805 km 40 109 951 km 30 107.37 km 20 104.86 m 10 10.24 cm 0 0.1 mm Ay: 384 400 km
0.1 mm'lik kağıt her katlamada iki kat kalınlaşır; Ay ortalama 384 400 km uzakta.

Debugger'da accumulator

PyCharm ekran görüntüsü, Debugger'da accumulator

Debugger programı adım adım yürütür ve value'ları gösterir.

4. for loop

Bir sıranın elemanlarını tek tek dolaşmak

for loop

for loop'un akış şeması Solda Genel biçim: for <isim> in <sıra>: ve girintili <block>. Altında Örnek: for i in range(4): ve print("Ders", i); 4 turuncu (int), "Ders" yeşil (str). En altta Çıktı: Ders 0, Ders 1, Ders 2, Ders 3. Sağda genel akış şeması: Başla, sonra karar baklavası sırada eleman var mı?. Baklavanın altında range(4) şeridi: 0, 1, 2, 3 (int, turuncu). Petrol mavisi evet oku sağdaki i = sıradaki kutusuna gider; bu kutu açık mavi, çivit mavisi çerçeve: sıradaki elemanı for kendisi bağlar. Oradan print("Ders", i) kutusuna, sonra sonraki eleman yazan dönüş okuyla yeniden baklavanın üstüne. Dönüş okunun yanında i += 1 yok yazıyor. Kırmızı hayır oku aşağıdaki Bitir'e gider. Genel biçim for <isim> in <sıra>: <block> Örnek for i in range(4): print("Ders", i) Çıktı Ders 0 Ders 1 Ders 2 Ders 3 Başla sırada eleman var mı? evet i = sıradaki print("Ders", i) sonraki eleman i += 1 yok hayır Bitir range(4) 0 1 2 3
for, bir sıranın elemanlarını sırayla tek tek alır. Şimdilik sıramız range.

for ve hedef program

Neden for: her ders için aynı sorular Solda Hedef programdan başlıklı kod paneli: n = int(input(…)), for i in range(n):, code = input(…).strip().upper(), credits = int(input(…)), score = int(input(…)). for satırı açık mavi bantta, çivit mavisi çerçeveli. Bu satırdan sağdaki ilk karta bir ok gider. Sağda yan yana üç tur kartı: 1. tur i = 0, 2. tur i = 1, 3. tur i = 2 (0, 1, 2 int, turuncu). Her kartta kullanıcının gördüğü üç soru: 1. dersin kodu (2. ve 3. kartta 2. ve 3. dersin kodu), Kredi, Puan (0-100). Kartların üstünde n = 3 tur yazan bir köşeli ayraç, altında: aynı üç soru, her ders için bir kez. Hedef programdan n = int(input(…)) for i in range(n): code = input(…).strip().upper() credits = int(input(…)) score = int(input(…)) n = 3 tur 1. tur i = 0 1. dersin kodu Kredi Puan (0-100) 2. tur i = 1 2. dersin kodu Kredi Puan (0-100) 3. tur i = 2 3. dersin kodu Kredi Puan (0-100) aynı üç soru, her ders için bir kez
Ders sayısı belli: her ders için aynı sorular, birer tur.

for adım adım

range(4) 0, 1, 2 ve 3 verir; block dört kez çalışır.

for ve Spam


for i in range(4):
    print("Spam")
Çıktı
Spam
Spam
Spam
Spam

Block i'yi kullanmak zorunda değil: dört tur, dört satır.

Tablodaki ? kaç?

for ve accumulator: iz tablosu Solda üç satır kod: total = 0, for i in range(1, 5):, total += i * 2. Sağda her turdan sonraki değerleri gösteren bir tablo, sütunları tur, i ve total. i sırayla 1, 2, 3, 4; total sırayla 2, 6, ?, 20. 3. turun total hücresi açık mavi ve soru işaretli. total = 0 for i in range(1, 5): total += i * 2 tur i total 1 1 2 2 2 6 3 3 ? 4 4 20
  1. 9
  2. 12
  3. 8
  4. 10

for ve accumulator

for ve accumulator: trace tablosu Solda kod: total = 0, for i in range(6):, total += i, print(total); 0 ve 6 turuncu (int). Altında 3. bölümde while ile başlıklı gri kod: i = 0, while i < 6:, total += i, i += 1; son satırın üstü kırmızı kesikli çizgiyle çizili, altında: for bunu kendisi yapar. Ortada trace tablosu, sütunlar tur, i ve total: tur 1'de i 0, total 0; tur 2'de i 1, total 1; tur 3'te i 2, total 3; tur 4'te i 3, total 6; tur 5'te i 4, total 10; tur 6'da i 5, total 15. i ve total değerleri turuncu (int). Son satır açık mavi, çivit mavisi çerçeveli. Sağda Çıktı: 15. total = 0 for i in range(6): total += i print(total) 3. bölümde while ile i = 0 while i < 6: total += i i += 1 for bunu kendisi yapar tur i total 1 0 0 2 1 1 3 2 3 4 3 6 5 4 10 6 5 15 Çıktı 15
for i'yi kendisi ilerletir; i += 1 yazılmaz.

for ve while

while ve for: aynı çıktı İki sütun. Solda while başlığı: i = 0, while i < 3:, print(i), i += 1. Numaralı işaretler: 1 başlangıç (i = 0 satırı), 2 devam şartı (while satırı), 3 güncelleme (i += 1 satırı). Sağda for başlığı: for i in range(3): ve print(i); for satırı açık mavi bantta, çivit mavisi çerçeveli; üstünde 1, 2 ve 3 numaralı işaretler: üçü tek satırda. Sayılar 0, 1 ve 3 turuncu (int). İki programın altında aynı çıktı: 0, 1, 2; aralarında aynı çıktı yazıyor. while for i = 0 while i < 3: print(i) i += 1 1 başlangıç 2 devam şartı 3 güncelleme for i in range(3): print(i) 1 2 3 üçü tek satırda 0 1 2 0 1 2 aynı çıktı
Kaç tur döneceği belliyse for, belli değilse while.

for içinde if

Kural bir kez yazıldı, karar dört kez verildi.

if ile saymak

if ile saymak: 0'dan 29'a 3'ün katları Solda kod: count = 0, for n in range(30):, if n % 3 == 0:, count += 1, print(count); sayılar turuncu (int). Altında Çıktı: 10. Sağda 0'dan 29'a kutular (int, turuncu), 6 satır 5 sütun; 3'ün katı olan on kutu (0, 3, 6, 9, 12, 15, 18, 21, 24, 27) çivit mavisi çerçeveli. Altında count'un value'ları: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (turuncu); sondaki 10 açık mavi, çivit mavisi çerçeveli bantta. count = 0 for n in range(30): if n % 3 == 0: count += 1 print(count) Çıktı 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 count: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Şartı sağlayan her sayıda counter bir artar.

Python ne yazdırır?


total = 0
for i in range(1, 6):
    if i % 2 == 1:
        total += i
print(total)
      
  1. 15
  2. 9
  3. 6
  4. 1 4 9

Tur süreleri ve accumulator

Max Verstappen'in lacivert Red Bull RB21 aracı Monza pistinde yandan, hız izleriyle; önde yeşil, beyaz ve kırmızı boyalı pist kenarı.
Fotoğraf: Eustace Bagge, “Max Verstappen 2025 Italian Grand Prix FP3”, Wikimedia Commons, CC BY 4.0. Kırpıldı.

total = 0
for i in range(4):
    lap = int(input("Tur (ms): "))
    total += lap
print("Toplam:", total)
Çıktı
Tur (ms): 82431
Tur (ms): 81976
Tur (ms): 82104
Tur (ms): 82650
Toplam: 329161

En hızlı tur

best'in ilk value'su

En hızlı tur: best 0'dan başlarsa İki yan yana tablo, ortada ince bir ayırıcı çizgi. Solda kodun ilk satırı best = 0; 0 turuncu (int), kırmızı çerçeveli açık kırmızı bir şeridin içinde. Altında trace tablosu, sütunlar tur, lap, lap < best ve best: tur 1'de lap 82431, lap < best False, best 0; tur 2'de 81976, False, 0; tur 3'te 82104, False, 0; tur 4'te 82650, False, 0. Dört turda da lap < best False, best 0 kalıyor. En altta Run penceresi: En hızlı tur: 0, yanında kırmızı yazıyla error message yok. Sağda ilk satır best = 999999; 999999 turuncu (int), açık mavi, çivit mavisi çerçeveli bir şeridin içinde. Tablo: tur 1'de 82431, True, best 82431; tur 2'de 81976, True, 81976; tur 3'te 82104, False, 81976; tur 4'te 82650, False, 81976. Run penceresi: En hızlı tur: 81976. Sayılar int (turuncu), True ve False bool (deniz yeşili) kutucuklarda. best = 0 tur lap lap < best best 1 82431 False 0 2 81976 False 0 3 82104 False 0 4 82650 False 0 Run penceresi error message yok En hızlı tur: 0 best = 999999 tur lap lap < best best 1 82431 True 82431 2 81976 True 81976 3 82104 False 81976 4 82650 False 81976 Run penceresi En hızlı tur: 81976
best 0'dan başlarsa hiçbir tur ondan kısa olmaz; Python hata vermez, sonuç yanlış çıkar.

Yarış özeti


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)
Çıktı
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.

for ve TypeError

for ve TypeError İki sütun. Solda Geçersiz: for i in 3: ve print(i); 3 turuncu (int), çivit mavisi halkayla çevrili. Altında kırmızı çerçeveli kutuda kırmızı TypeError: 'int' object is not iterable satırı, tek satırda. Sağda Geçerli: for i in range(3): ve print(i); altında Çıktı: 0, 1, 2. Geçersiz Geçerli for i in 3: print(i) TypeError: 'int' object is not iterable for i in range(3): print(i) 0 1 2 Çıktı
for'a dolaşacağı bir sıra gerekir; 3 tek bir sayıdır.

Python ne yazdırır?


total = 0
for i in range(4):
    total += i
print(total)
      
  1. 10
  2. 6
  3. 4
  4. Hata verir

10 dakika ara

3A
Tekrar ettirmek: while, counter, accumulator, for
3B
Loop'u ve hatayı yönetmek: range(), str üzerinde for, nested loops, break, continue, try, except, assert

Sırada 3B

5. range()

Sayı üretmek: başla, bitiş ve adım

range()

Genel biçim
range(<başla>, <bitiş>)
range(1, 6) sayı doğrusunda Üstte range(1, 6). 0'dan 7'ye sayı doğrusu: 1, 2, 3, 4 ve 5'te dolu turuncu noktalar ve turuncu rakamlar (int); 6'da içi boş çivit mavisi daire. 1'in üstünde başla = 1, 6'nın üstünde bitiş = 6, dahil değil. Sağda Çıktı: 1, 2, 3, 4, 5. range(1, 6) 0 1 2 3 4 5 6 7 başla = 1 bitiş = 6, dahil değil Çıktı 1 2 3 4 5
range, başla'dan bitiş'e kadar tam sayılar üretir; bitiş dahil değildir.

range() ve 14 hafta

range() ile dönemin 14 haftası ve 1'den 100'e saymak Solda dört satırlık kod: count = 0, for week in range(1, 15):, count += 1, print(count); altında çıktı 14. Sağda 0'dan 15'e sayı doğrusu: 1'den 14'e turuncu noktalar (int), 15'te içi boş daire, bitiş = 15; noktaların üstünde açık mavi, çivit mavisi çerçeveli kutuda 14 hafta. Altta soru: 1'den 100'e kadar saymak için range'e ne yazılır? Tıklayınca cevap: range(1, 101), bitiş, son sayının bir fazlası. count = 0 for week in range(1, 15): count += 1 print(count) 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 14 hafta bitiş = 15 1'den 100'e kadar saymak için range'e ne yazılır? range(1, 101) bitiş, son sayının bir fazlası
Dönemin 14 haftası: range(1, 15). Bitiş, son haftanın bir fazlasıdır.

range() ve başla

range(3, 6): yalnızca başla değişti İki sayı doğrusu, aynı yerlerde. Üstteki soluk ve gri: range(1, 6), 1'den 5'e gri noktalar, 6'da gri içi boş daire. Alttaki: range(3, 6), 3, 4 ve 5'te dolu turuncu noktalar ve turuncu rakamlar (int), 6'da içi boş çivit mavisi daire. 3'ün üstünde başla = 3, açık mavi ve çivit mavisi çerçeveli bantta (değişen tek şey); 6'nın üstünde bitiş = 6, dahil değil. Sağda Çıktı: 3, 4, 5. range(1, 6) 0 1 2 3 4 5 6 7 range(3, 6) başla = 3 bitiş = 6, dahil değil 0 1 2 3 4 5 6 7 Çıktı 3 4 5
Yalnızca başla değişti: range(3, 6), 3, 4 ve 5 verir.

range() ve tek bir sayı

range(5): başla yazılmazsa 0 Üstte range(5) = range(0, 5). 0'dan 7'ye sayı doğrusu: 0, 1, 2, 3 ve 4'te dolu turuncu noktalar ve turuncu rakamlar (int); 5'te içi boş çivit mavisi daire. 0'ın üstünde başla yazılmadı: 0, açık mavi ve çivit mavisi çerçeveli bantta; 5'in üstünde bitiş = 5, dahil değil. Sağda Çıktı: 0, 1, 2, 3, 4. range(5) = range(0, 5) 0 1 2 3 4 5 6 7 başla yazılmadı: 0 bitiş = 5, dahil değil Çıktı 0 1 2 3 4
Tek bir sayı verilirse başla 0'dır: range(5), 0'dan 4'e.

range() ve adım

Genel biçim
range(<başla>, <bitiş>, <adım>)
range(0, 10, 3): adım Üstte range(0, 10, 3). 0'dan 10'a sayı doğrusu: 0, 3, 6 ve 9'da dolu turuncu noktalar ve turuncu rakamlar (int); 10'da içi boş çivit mavisi daire, üstünde bitiş = 10, dahil değil. Noktaların üstünde 0'dan 3'e, 3'ten 6'ya ve 6'dan 9'a üç atlama oku, her birinde +3; üstte açık mavi, çivit mavisi çerçeveli kutuda adım = 3. Sağda Çıktı: 0, 3, 6, 9. range(0, 10, 3) 0 1 2 3 4 5 6 7 8 9 10 +3 +3 +3 adım = 3 bitiş = 10, dahil değil Çıktı 0 3 6 9
Üçüncü sayı adımdır: 0'dan başlar, üçer artar, 10'a varmaz.

Boşluğa ne gelmeli?


# 1, 3, 5 ve 7 yazsın
for i in range(____):
    print(i)
      
  1. 1, 7, 2
  2. 1, 8, 2
  3. 0, 8, 2
  4. 1, 8

range() ve negatif adım

range() ile negatif adım ve geri saymak Üstte range(10, 0, -3). 0'dan 10'a sayı doğrusu: 10, 7, 4 ve 1'de turuncu noktalar (int), 0'da içi boş daire; noktalar arasında sağdan sola -3 sıçramaları, üstte sola giden uzun bir ok, geriye, ve açık mavi kutuda adım = -3. Altta bitiş = 0, dahil değil. Sağda çıktı 10, 7, 4, 1. En altta soru: 10'dan 1'e birer birer geri saymak için ne yazılır? Tıklayınca cevap: range(10, 0, -1), bitiş 0, dahil değil; adım -1. range(10, 0, -3) 0 1 2 3 4 5 6 7 8 9 10 -3 -3 -3 geriye adım = -3 bitiş = 0, dahil değil Çıktı 10 7 4 1 10'dan 1'e birer birer geri saymak için ne yazılır? range(10, 0, -1) bitiş 0, dahil değil; adım -1
Negatif adım geriye sayar; bitiş yine dahil değil.

Fencepost error

Fencepost error: 100 metrelik çit Solda kod: count = 0, for post in range(0, 101, 10):, count += 1, print(count); sayılar turuncu (int). Altında Çıktı: 11. Sağda bir çit: 0'dan 100'e onar metre arayla 11 direk (int, turuncu), altlarında 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100; direkleri iki yatay tel birleştiriyor. Direklerin arasındaki 10 aralık üstte 1'den 10'a gri numaralı. Üstte açık mavi, çivit mavisi çerçeveli kutuda 11 direk, 10 aralık. Altta: range(0, 100, 10): 10 direk, 100'deki eksik; yanında 100'deki direk gri ve soluk. count = 0 for post in range(0, 101, 10): count += 1 print(count) 11 0 10 20 30 40 50 60 70 80 90 100 1 2 3 4 5 6 7 8 9 10 11 direk, 10 aralık range(0, 100, 10): 10 direk, 100'deki eksik
100 metrelik çite 10 metrede bir direk dikilirse 10 değil, 11 direk gerekir.

range ve type haritası

value
  1. Numbers(sayılar)

    1. Integral

      • int7
      • boolTrue
    2. Real

      • float3.5
  2. Sequences(diziler)

      • str"7"
      • rangerange(3)
      • tupleDers 5
      • listDers 5
  3. Set types(kümeler)

    • setDers 5
  4. Mappings

    • dictDers 5
  5. None

    • NoneTypeDers 4
bu derstedaha öncesonraki derslerde

print(type(range(3)))
<class 'range'>

range da bir type'tır; str gibi sequence (dizi) ailesindedir.

Python ne yazdırır?


for i in range(10, 0):
    print(i)
print("bitti")
      
  1. Geriye sayar, sonra bitti
  2. Yalnızca bitti
  3. Hata verir
  4. Hiçbir şey

Boş range

Boş range: range(10, 0) Solda kod: for i in range(10, 0):, print(i), print("bitti"); altında Çıktı: yalnızca bitti. Sağda 0'dan 10'a noktasız sayı doğrusu: 0'da içi boş çivit mavisi daire ve bitiş = 0; 10'da siyah çerçeveli boş daire ve başla = 10. 10'dan sağa, bitişten uzağa giden kırmızı ok: adım = +1. Altta açık mavi, çivit mavisi çerçeveli kutuda hiç sayı üretilmez. for i in range(10, 0): print(i) print("bitti") Çıktı bitti 0 1 2 3 4 5 6 7 8 9 10 bitiş = 0 başla = 10 adım = +1 hiç sayı üretilmez
Adım yazılmazsa +1'dir; 10'dan 0'a artarak varılmaz.

Ders 3'ün hedef programı

Ders 3'ün hedef programı: for, counter ve accumulator Üstte iki kod paneli. Solda ders loop'u; gri satırlar if score >= 95: …, print(f"{code[:3]} …") ve …; if satırının yanında 1. bölüm, slicing satırının yanında Ders 2. Sağda 3. bölüm: counter ve accumulator. Altta Çıktı paneli; başta yalnızca Kaç ders? 2. Birinci tıklama: açık mavi bantta for i in range(n):, yanında her turun başında sorar; panelden çıktıya inen bir ok ve iki turun satırları: 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. İkinci tıklama: passed += 1 (1 int, turuncu) açık mavi bantta, ondan çıkan ok Geçilen ders: 2/2 satırına gidiyor; o satır da açık mavi. Üçüncü tıklama: total_points += credits * grade_point açık mavi bantta, ondan çıkan ok AGNO: 2.71 satırına gidiyor; o satır da açık mavi. Ders loop'u if score >= 95: … print(f"{code[:3]} …") … 1. bölüm Ders 2 3. bölüm: counter ve accumulator Çıktı Kaç ders? 2 for i in range(n): her turun başında sorar 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 passed += 1 Geçilen ders: 2/2 total_points += credits * grade_point AGNO: 2.71
Üç parça birleşir: for, counter ve accumulator.

6. str üzerinde for

for, bir str'yi karakter karakter dolaşır

str üzerinde for


code = "MAT101"
for ch in code:
    print(ch)
Çıktı
M
A
T
1
0
1

str de bir sıradır: for onun karakterlerini sırayla tek tek alır.

str üzerinde for ve if


code = "mat101"
digits = 0
for ch in code.upper():
    if ch in "0123456789":
        digits += 1
print(f"{code.upper()}: {digits} rakam")
Çıktı
MAT101: 3 rakam

Her turda bir karakter sınanır; rakamsa counter bir artar.

Python ne yazdırır?


word = "Hacettepe"
count = 0
for ch in word.lower():
    if ch == "h":
        count += 1
print(f"{word.upper()}: {count}")
      
  1. Hacettepe: 1
  2. HACETTEPE: 0
  3. hacettepe: 1
  4. HACETTEPE: 1

7. Nested loops

Bir loop'un içinde başka bir loop

Nested loops (iç içe döngüler)

Nested loops: iç loop dış loop'un her turunda baştan sona Solda üç satırlık kod: for i in range(1, 3):, içeride for j in range(2):, en içte print(i, j); dış loop ve iç loop parantezle adlandırılmış. Sağda iki satır, iki sütunluk ızgara: i = 1 ve i = 2 satırları, j = 0 ve j = 1 sütunları; hücrelerde çalışma sırası 1'den 4'e ve çıktılar 1 0, 1 1, 2 0, 2 1; 2 0 hücresi açık mavi, çivit mavisi çerçeveli. Altında satır bitmeden alt satıra geçilmez. Solda kodun altında soru: Dış loop 3, iç loop 4 tur dönerse print kaç kez çalışır? Tıklayınca cevap: 12 kez: 3 dış turun her birinde 4 iç tur. for i in range(1, 3): for j in range(2): print(i, j) dış loop iç loop j = 0 j = 1 i = 1 i = 2 1 1 0 2 1 1 3 2 0 4 2 1 satır bitmeden alt satıra geçilmez Dış loop 3, iç loop 4 tur dönerse print kaç kez çalışır? 12 kez: 3 dış turun her birinde 4 iç tur.
İç loop, dış loop'un her turunda baştan sona çalışır.

Nested loops ve kapıcı

Nested loops ve kapıcı Elle çizilmiş gibi basit bir resim. Üstte iki satır kod var: for floor in range(1, 3): ve onun içinde for door in range(2):. Altında kesiti görünen bir apartman var: zemin katın üstünde 1. ve 2. kat, her katta 0 ve 1 numaralı iki kapı ve her kapının önünde bir ekmek. Noktalı oklar sırayı gösteriyor: 1. katta 0 numaralı kapıdan 1 numaralıya, sonra merdivenden 2. kata, orada yine 0 numaradan 1 numaraya. Sağda kasketli kapıcı elinde file dolusu ekmekle 1. katı gösteriyor; konuşma balonunda "Önce bu katın kapıları." yazıyor. for floor in range(1, 3): for door in range(2): 0 1 0 1 1 2 Önce bu katınkapıları.

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)
Çıktı
1 0
1 1
2 0
2 1

Nested loops adım adım

Her dış turda iç for satırı j'yi yeniden 0'a bağlar.

Python ne yazdırır?


for i in range(1, 3):
    for j in range(3):
        print(i, j)
      
  1. 1 0 1 1 1 2 2 0 2 1 2 2
  2. 1 0 2 0 1 1 2 1 1 2 2 2
  3. 1 0 1 1 1 2
  4. 1 1 1 2 1 3 2 1 2 2 2 3

Çarpım tablosu

Çarpım tablosu
xkcd 2313: Wrong Times Table, Randall Munroe, CC BY-NC 2.5, https://xkcd.com/2313/

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)
Çıktı
100

Satır kurmak

row boş str'den başlar; her turda bir * eklenir.

Satır kurmak ve dış loop

Satır kurmak: row her satırın başında boşalır Solda altı satırlık kod: n = 3, for i in range(1, n + 1):, row = "" (açık mavi, çivit mavisi çerçeveli), for j in range(3):, row += "*", print(row); önceki slayttaki satırlar parantezle gösterilmiş. Sağda i = 1, 2 ve 3 için üçer yeşil yıldız hücresi (str), her satırın sonunda çıktı ***. Altta soru: row = "" dış loop'tan önce, bir kez yazılsaydı ne yazardı? Tıklayınca, row = "" dış loop'tan önceyse etiketli panelde çıktı: ***, ******, *********; satırlar birbirine eklenir. n = 3 for i in range(1, n + 1): row = "" for j in range(3): row += "*" print(row) önceki slayttaki satırlar i = 1 "" * * * *** i = 2 "" * * * *** i = 3 "" * * * *** row = "" dış loop'tan önce, bir kez yazılsaydı ne yazardı? row = "" dış loop'tan önceyse *** ****** ********* satırlar birbirine eklenir
Tek değişiklik: dış loop eklendi; row her satırın başında boşalır.

Satır kurmak ve range(i)

Satır kurmak: üçgen Solda altı satırlık kod: n = 3, for i in range(1, n + 1):, row = "", for j in range(i):, row += "*", print(row); sayılar turuncu (int), "" ve "*" yeşil (str). 4. satırdaki range(i) açık mavi, çivit mavisi çerçeveli bantta. Sağda i = 1, i = 2, i = 3 başlıklı üç satır (değerler turuncu): "" ile başlayıp 1, 2 ve 3 yeşil * hücresi (str); altlarında range(1), range(2), range(3). Her satırdan bir ok çıktı satırına gider: *, **, ***. n = 3 for i in range(1, n + 1): row = "" for j in range(i) : row += "*" print(row) i = 1 "" * * range(1) i = 2 "" * * ** range(2) i = 3 "" * * * *** range(3)
Tek değişiklik: range(3) yerine range(i); i. satırda i yıldız.

Karakterlerle bir halka


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.

Çıktı
       #########       
    ###############    
  ######       ######  
 #####           ##### 
 ####             #### 
 ####             #### 
 ####             #### 
 #####           ##### 
  ######       ######  
    ###############    
       #########       

Nested loop ve indentation

Nested loop ve indentation İki sütun. Solda Doğru: n = 3, for i in range(1, n + 1):, row = "", for j in range(i):, row += "*", print(row) dört boşlukla; Çıktı: *, **, ***. Sağda Bir indentation fazla: aynı kod, son satır print(row) sekiz boşlukla; fazladan dört boşluk kırmızı kesikli çerçevede. Çıktı altı satır: *, *, **, *, **, ***. Altında kırmızı çerçeveli kutuda kırmızı: error message yok. Sayılar turuncu (int), "" ve "*" yeşil (str). Doğru n = 3 for i in range(1, n + 1): row = "" for j in range(i): row += "*" print(row) Çıktı * ** *** Bir indentation fazla n = 3 for i in range(1, n + 1): row = "" for j in range(i): row += "*" print(row) Çıktı * * ** * ** *** error message yok
print(row) bir indentation içeride: hata yok, çıktı yanlış.

turtle ile bir yıldız

turtle ile tek yıldız Lacivert zemin üzerinde camgöbeği beş köşeli bir yıldız. Kalem 200 birim ileri gidip 144 derece sağa dönüyor; bunu 5 kez yapınca kalem başladığı yere ve başladığı yöne geri geliyor. Kod: for side in range(5): pen.forward(200), pen.right(144).

Bu loop beş çizgiyle bir yıldız çizer.

Önizleme

for side in range(5):
    pen.forward(200)
    pen.right(144)

turtle ile 36 yıldız

Dış loop 36 kez döner; her turda bir yıldız ve 10 derece dönüş.

turtle ile 36 yıldızlık çiçek Lacivert zemin üzerinde 36 beş köşeli yıldızdan oluşan bir çiçek, toplam 180 çizgi. Yıldızlar sırayla camgöbeği, pembe ve hardal sarısı; her yıldızdan sonra kalem 10 derece dönüyor. Dıştaki for 36 kez, içteki for her turda 5 kez dönüyor; rengi if, elif ve else seçiyor.
Önizleme

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)

Python ne yazdırır?


count = 0
for i in range(3):
    for j in range(2):
        count += 1
print(count)
      
  1. 5
  2. 6
  3. 3
  4. 2

8. while True ve break

Bir loop'tan ortasında çıkmak

break

break ve continue: akış nereden devam eder İki durumlu şekil. Gri zeminli kod paneli: for i in range(1, 6):, girintili <satır 1>, if <şart>:, daha girintili break (durum break) ya da continue (durum continue), girintili <satır 2>; panelin altında, ince bir çizginin ardından <loop'tan sonraki satır>. Köşeli parantezli yer tutucular gri. Durum break: break satırı açık mavi bantla vurgulu; break satırından çıkan siyah ok sağa, aşağı ve sola dönerek loop'un altındaki satıra giriyor, yanında loop biter yazıyor; continue'nun oku bu durumda yok. Sağ altta: break: loop'tan sonraki satıra. Durum continue: continue satırı vurgulu; continue satırından çıkan siyah ok sağa, yukarı ve sola dönerek loop'un başlık satırına giriyor, yanında bu adım biter yazıyor; break oku ve loop biter yazısı gri. Sağ altta: continue: loop'un başına. <satır 2> iki durumda da gri, o adımda çalışmıyor. for i in range(1, 6): <satır 1> if <şart>: <satır 2> <loop'tan sonraki satır>
break, içinde bulunduğu loop'u o anda bitirir.

Akış, loop'tan sonraki ilk satırdan devam eder.

break ve dolmuş

break ve dolmuşta inecek var Elle çizilmiş gibi basit bir resim. Soldan sağa giden bir yol ve yolun altında 1'den 4'e numaralı dört durak tabelası var; 3. ve 4. durak gri ve soluk. Sarı dolmuş 2. durakta. Penceresinde bir öğrenci elini kaldırmış; konuşma balonunda "İnecek var." yazıyor, yanında break kodu. 2. duraktan sonra yoldan yukarı ayrılan bir yan yol ve onu gösteren bir yön tabelası var; yan yolun ucunda "loop'tan sonraki satır" yazıyor. 1 2 3 4 loop'tansonraki satır İnecek var. break

break, dolmuşta "İnecek var" demek gibidir: kalan duraklar sizin için biter.

break adım adım

i 2 iken break çalışır; range'in 3, 4 ve 5'i hiç gelmez.

while True

while True akış şeması while True akış şeması. Başla, ardından counter = 0 kutusu (0 int, turuncu), sonra True yazan karar baklavası. Bu baklavanın tek çıkışı var: aşağı inen petrol mavisi True oku; yanında False çıkışı yok yazıyor. Gövde: counter += 1, print(counter), sonra counter == 2 karar baklavası. Bu baklavanın kırmızı False oku yukarı çıkıp True baklavasının tepesine döner. Petrol mavisi True oku break kutusuna iner; break kutusu açık mavi, çivit mavisi çerçeveli. Loop kısmı kesik çizgili bir çerçeve içinde; break kutusundan çıkan ok sağa, çerçevenin dışına, print("döngüden sonra") kutusuna ve oradan Bitir'e gider. Solda Genel biçim: while True:, girintili <block>, girintili if <şart>: ve iki kez girintili break. Tek çıkış, counter == 2 True olunca break kutusundan geçer. Başla counter = 0 True False çıkışı yok True counter += 1 print(counter) counter == 2 False True break print("döngüden sonra") Bitir Genel biçim while True: <block> if <şart>: break
while True'nun devam şartı hiç False olmaz; tek çıkışı break'tir.

while True adım adım

Her turun başında sorulan şart hep True; tek çıkış break.

Sentinel


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.

Çıktı
Sayı: 5
Sayı: 7
Sayı: 0
Toplam: 12
Sentinel: 5, 7 ve 0 Yazılan ve int() ile çevrilen üç değer alt alta, her biri turuncu bir int kutusunda, altında int etiketi: 5, 7 ve 0. 5 ve 7'den çıkan iki ok toplama yazısına gider. 0 kutusu açık mavi, çivit mavisi çerçeveli bantla vurgulu; sağında sentinel yazıyor ve ondan çıkan ok break kelimesine gider. 5 int 7 int 0 int toplama sentinel break

Sentinel adım adım

0 gelince break çalışır; 0 toplama eklenmez.

Sentinel ve ayırıcı çubuk

Sentinel ve kasa bandındaki ayırıcı çubuk Elle çizilmiş gibi basit bir resim. Solda market kasasında bir kasiyer duruyor; tezgahın önündeki ekranda "Toplam: 12" yazıyor. Kasa bandında kasiyere doğru gelen sırayla 5 ve 7 yazan iki turuncu kart, ardından üzerinde 0 yazan lacivert bir ayırıcı çubuk, en arkada da sonraki müşterinin soluk ürünleri var. Kasiyerin konuşma balonunda "Çubuk geldi, müşteri bitti." yazıyor. Bandın üstündeki if number == 0: break kodundan çubuğa bir ok iniyor. Toplam: 12 5 7 0 if number == 0: break Çubuk geldi,müşteri bitti.

Sentinel, kasadaki ayırıcı çubuk gibidir: ürün değil, işarettir.

Puanda sentinel 0 değil, -1.

break ve nested loop

İç içe loop'ta break: kod ve ızgara Sol üstte beş satırlık kod: for i in range(1, 3):, içinde for j in range(1, 4):, onun içinde if j == 2: ve break, sonra print(i, j). İç for satırı ve break satırı açık mavi, çivit mavisi çerçeveli; sağda köşeli çizgilerle iç loop (2-5. satırlar) ve dış loop (1-5. satırlar). Sağ üstte Çıktı paneli: 1 1, 2 1. Altta iki satır, üç sütunluk ızgara: satırlar i = 1 ve i = 2, sütunlar j = 1, j = 2, j = 3; 1, 2, 3 ve 4 int (turuncu). Her satırda j = 1 hücresi yazılan satırı gösteriyor: 1 1 ve 2 1. j = 2 hücresinde break; bu hücre de açık mavi, çivit mavisi çerçeveli. j = 3 hücresi gri, atlandı. Birinci satırın sonundan çıkan ok satırların arasından sola dönüp ikinci satırın başına iniyor; yanında dış loop devam eder. for i in range(1, 3): for j in range(1, 4): if j == 2: break print(i, j) iç loop dış loop Çıktı 1 1 2 1 j = 1 j = 2 j = 3 i = 1 1 1 break atlandı i = 2 2 1 break atlandı dış loop devam eder
break yalnızca içinde bulunduğu loop'u bitirir; dış loop devam eder.

break ve SyntaxError


print(1)
break
Çıktı
  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.

Python ne yazdırır?


for i in range(1, 10):
    if i == 3:
        break
    print(i)
print("son", i)
      
  1. 1 2 3 son 3
  2. 1 2 son 9
  3. 1 2 son 3
  4. 1 2 son 2

9. continue

Loop'un yalnızca bir adımını bitirmek

continue

break ve continue: akış nereden devam eder İki durumlu şekil. Gri zeminli kod paneli: for i in range(1, 6):, girintili <satır 1>, if <şart>:, daha girintili break (durum break) ya da continue (durum continue), girintili <satır 2>; panelin altında, ince bir çizginin ardından <loop'tan sonraki satır>. Köşeli parantezli yer tutucular gri. Durum break: break satırı açık mavi bantla vurgulu; break satırından çıkan siyah ok sağa, aşağı ve sola dönerek loop'un altındaki satıra giriyor, yanında loop biter yazıyor; continue'nun oku bu durumda yok. Sağ altta: break: loop'tan sonraki satıra. Durum continue: continue satırı vurgulu; continue satırından çıkan siyah ok sağa, yukarı ve sola dönerek loop'un başlık satırına giriyor, yanında bu adım biter yazıyor; break oku ve loop biter yazısı gri. Sağ altta: continue: loop'un başına. <satır 2> iki durumda da gri, o adımda çalışmıyor. for i in range(1, 6): <satır 1> if <şart>: <satır 2> <loop'tan sonraki satır>
continue, loop'un yalnızca o adımını bitirir.

Akış loop'un başına döner; loop sonraki adımla devam eder.

continue ve çift sayılar

continue: kod ve beş adım Solda dört satırlık kod: for i in range(1, 6):, içeride if i % 2 == 0:, daha içeride continue (açık mavi bantta), sonra print(i); 1, 6, 2 ve 0 int (turuncu). Sağda bu loop'un beş adımı yan yana, üstlerinde i = 1'den i = 5'e. 1, 3 ve 5. adımlarda şart False (deniz yeşili, bool) ve print(i); altlarındaki çıktı kutucuklarında 1, 3 ve 5. 2. ve 4. adımlar gri çerçeveli: şart True ve continue; altlarında print atlandı. 2. adım açık mavi, çivit mavisi çerçeveli bir şeritle vurgulu. Çıktı 1, 3, 5. for i in range(1, 6): if i % 2 == 0: continue print(i) i = 1 şart False print(i) 1 i = 2 şart True continue print atlandı i = 3 şart False print(i) 3 i = 4 şart True continue print atlandı i = 5 şart False print(i) 5
Çift sayılarda continue çalışır; o adımda print atlanır.

break ve continue

break ve continue: aynı kod, iki sonuç Sol üstte dört satırlık kod: for i in range(1, 6):, if i % 2 == 0:, continue, print(i). Yanında soru: Bu kodda continue yerine break yazılsaydı ne yazardı? Altında i = 1'den i = 5'e beş adım. continue satırı: 1, 3 ve 5'te şart False ve print(i), 2 ve 4'te şart True ve continue (gri); çıktı 1, 3, 5. Birinci tıklama: koddaki continue'nun üstü çizilir, yanında açık mavi bantta break yazar; altta break satırı gelir: 1'de şart False ve print(i), 2'de şart True ve break (açık mavi, çivit mavisi çerçeveli), 3, 4 ve 5 boş ve gri: loop bitti, hiç çalışmadı; çıktı yalnızca 1. İkinci tıklama, büyük yazıyla: Tek fark: break loop'u bitirir, continue yalnızca adımı. True ve False deniz yeşili (bool), sayılar turuncu (int). for i in range(1, 6): if i % 2 == 0: continue print(i) Bu kodda continue yerine break yazılsaydı ne yazardı? i = 1 i = 2 i = 3 i = 4 i = 5 Çıktı continue 1 3 5 şart False print(i) şart True continue şart False print(i) şart True continue şart False print(i) break break 1 şart False print(i) şart True break loop bitti, hiç çalışmadı Tek fark: break loop'u bitirir, continue yalnızca adımı.

continue adım adım

-5'te continue: o adımda toplama yok, loop sürer.

continue ve while

continue ve while: güncelleme atlanınca loop bitmez while döngüsünde continue için izlenmiş akış şeması. i = 0 (turuncu, int) kutusundan i < 3 karar kutusuna ok gidiyor. i < 3'ün True oku (petrol mavisi) i == 1 karar kutusuna, onun True oku continue kutusuna gidiyor; continue kutusu açık mavi, çivit mavisi çerçeveyle vurgulu ve ondan çıkan ok yukarıdan dolaşıp i < 3'ün tepesine dönüyor. i == 1'in False oku (kırmızı) print(i) kutusuna iniyor; oradan gri bir ok gri i += 1 kutusuna gidiyor, altında atlanıyor yazıyor, ve gri bir çizgi yukarıdaki dönüş yoluna bağlanıyor. i < 3'ün False oku gri ve gri Bitir kutusuna gidiyor; oraya hiç varılmıyor. Sağda i ismi (lacivert) 1 değerini gösteriyor (turuncu, int); altında 1'de kaldı yazıyor. Çıktı kutusunda yalnızca 0 var ve altında program çalışmaya devam ediyor yazıyor. i = 0 i < 3 True i == 1 True continue False print(i) i += 1 atlanıyor False Bitir i 1 int 1'de kaldı Çıktı 0 program çalışmaya devam ediyor
Güncelleme continue'dan sonra kalırsa while loop'u hiç bitmez.

Python ne yazdırır?


for i in range(5):
    if i == 2:
        continue
    print(i)
      
  1. 0 1 2 3 4
  2. 0 1 3 4
  3. 0 1
  4. 2

10. try, except ve assert

Hatayı yakalayıp devam etmek ya da bilerek durmak

int(input()) ve ValueError


credits = int(input("Kredi: "))
print(credits * 2)
int(input()) ve ValueError: traceback Run penceresi, başlığı Çıktı. İlk satır: Kredi: dört; kullanıcının yazdığı dört'ün altı çizili. Sonra traceback: Traceback (most recent call last): / File "…/python-kurs/lesson3.py", line 1, in <module> / credits = int(input("Kredi: ")) / kırmızı son satır: ValueError: invalid literal for int() with base 10: 'dört'. 1 numaralı işaret son satırı gösteriyor. 2 numaralı işaret line 1'i gösteriyor: hangi satır. Sağda gri çerçeveli bir kutuda gri print(credits * 2) satırı, altında: çalışmadı. Çıktı Kredi: dört Traceback (most recent call last): File "…/python-kurs/lesson3.py", line 1, in <module> credits = int(input("Kredi: ")) ValueError: invalid literal for int() with base 10: 'dört' 2 hangi satır 1 son satır print(credits * 2) çalışmadı
Kullanıcı dört yazınca program durur; ikinci satır hiç çalışmaz.

Exception (sıra dışı durum)

Exception: çalışırken çıkan hata ve adı İki sütun. Solda başlık Çalışmadan önce bulunur: SyntaxError ve IndentationError, yanında gri hiçbir satır çalışmaz. Sağda açık mavi, çivit mavisi çerçeveli başlık Çalışırken çıkar: exception; altında program o satıra gelince durur; önceki satırlar çalışmıştır. Tıklayınca alt kısım gelir: Traceback'in son satırı exception'ın adıyla başlar. Üç satır: int("dört") son satırı ValueError: invalid literal for int() with base 10: 'dört', Ders 2; for i in 3: son satırı TypeError: 'int' object is not iterable, 4. bölüm; 7 / 0 son satırı ZeroDivisionError: division by zero, Ders 1. Exception adları kırmızı; ValueError'un satırı açık mavi bir bantta. "dört" str (yeşil), 3, 7 ve 0 int (turuncu). Çalışmadan önce bulunur SyntaxError IndentationError hiçbir satır çalışmaz Çalışırken çıkar: exception program o satıra gelince durur; önceki satırlar çalışmıştır Traceback'in son satırı exception'ın adıyla başlar int("dört") ValueError : invalid literal for int() with base 10: 'dört' Ders 2 for i in 3: TypeError : 'int' object is not iterable 4. bölüm 7 / 0 ZeroDivisionError : division by zero Ders 1
Program çalışırken çıkan hataya exception denir; adı traceback'in son satırında yazar.

try ve except

try ve except: dört yazılınca Solda altı satırlık kod, satır numaralı: 1 try:, 2 credits = int(input("Kredi: ")), 3 print("Kredi alındı"), 4 except ValueError:, 5 print("Tam sayı girin."), 6 print("Program devam ediyor"); 2. ve 3. satır kesikli try çerçevesinde, 5. satır kesikli except çerçevesinde. Sağda Genel biçim: try:, riskli satırlar, except exception adı:, exception çıkınca. Altında boş bir Çıktı paneli. Tıklama 1: 2. satır kırmızı çerçeveli pembe bir bantta, altında kırmızı ValueError; Çıktı'da Kredi: dört. Tıklama 2: 2. satırdan except satırına inen kırmızı ok, 3. satır gri ve yanında atlandı; except satırından 5. satıra siyah ok, 5. satır açık mavi; Çıktı'da Tam sayı girin. Tıklama 3: 5. satırdan 6. satıra ok, 6. satır açık mavi; Çıktı'da Program devam ediyor. Metinler str (yeşil). try except 1 try: 2 credits = int(input("Kredi: ")) 3 print("Kredi alındı") 4 except ValueError: 5 print("Tam sayı girin.") 6 print("Program devam ediyor") Genel biçim try: <riskli satırlar> except <exception adı>: <exception çıkınca> Çıktı Kredi: dört ValueError atlandı Tam sayı girin. Program devam ediyor
Exception çıkınca try'ın kalanı atlanır, except çalışır; program sonra devam eder.

Doğru girdi ve yanlış girdi

try / except: 4 ve dört yazılınca Aynı altı satırlık try kodu iki kez yan yana. Solda "4" yazıldı (yeşil str kutusu): 1, 2, 3 ve 6. satırların solunda çivit mavisi nokta var, bu satırlar çalıştı; 4. ve 5. satır, except ValueError: ve print("Tam sayı girin."), gri, çalışmadı. Çıktı: Kredi: 4, Kredi alındı, Program devam ediyor. Sağda "dört" yazıldı (yeşil str kutusu): 1, 2, 4, 5 ve 6. satırlar çalıştı; 3. satır, print("Kredi alındı"), gri, atlandı. 5. satır açık mavi vurgulu. Çıktı: Kredi: dört, Tam sayı girin., Program devam ediyor. İki çalıştırmada da son satır çalışıyor. Yazılanlar int() çevirene kadar str. "4" yazıldı 1 try: 2 credits = int(input("Kredi: ")) 3 print("Kredi alındı") 4 except ValueError: 5 print("Tam sayı girin.") 6 print("Program devam ediyor") Çıktı Kredi: 4 Kredi alındı Program devam ediyor "dört" yazıldı 1 try: 2 credits = int(input("Kredi: ")) 3 print("Kredi alındı") 4 except ValueError: 5 print("Tam sayı girin.") 6 print("Program devam ediyor") Çıktı Kredi: dört Tam sayı girin. Program devam ediyor çalışan satır; gri satır çalışmadı
Yalnızca girdi değişti: 4 yazılınca except hiç çalışmaz.

Girdiyi yeniden sormak

Girdiyi yeniden sormak: önce dört, sonra 4 Solda yedi satırlık kod: while True:, try:, credits = int(input("Kredi: ")), break, except ValueError:, print("Tam sayı girin."), print(credits, "kredi alındı"). Sağda bir Çıktı paneli. Tıklama 1: credits satırı kırmızı çerçeveli pembe bantta; ondan except satırına kırmızı bir ok ve ValueError; break satırı gri; Çıktı'da Kredi: dört. Tıklama 2: print("Tam sayı girin.") satırı açık mavi; ondan while True satırına dönen siyah ok, yanında yeniden sor; Çıktı'da Tam sayı girin. Tıklama 3: kırmızı ok ve geri dönen ok kalkar; break satırı açık mavi, ondan son satıra inen ok, yanında loop biter; Çıktı'da Kredi: 4 ve 4 kredi alındı. True bool (deniz yeşili), metinler str (yeşil). while True: try: credits = int(input("Kredi: ")) break except ValueError: print("Tam sayı girin.") print(credits, "kredi alındı") Çıktı ValueError Kredi: dört yeniden sor Tam sayı girin. loop biter Kredi: 4 4 kredi alındı
Sayı gelene kadar sorar: int() başarılıysa break, ValueError çıkarsa yeni tur.

except ValueError ve NameError

Adsız except ve except ValueError İki sütun. Solda kırmızı Adsız except başlığı: try:, credits = int(inptu("Kredi: ")), except:, print("Tam sayı girin."); inptu yazım hatası kırmızı kesikli bir elipsle çevrili. Çıktı yalnızca Tam sayı girin.; altında asıl hata saklandı. Sağda petrol mavisi except ValueError başlığı: aynı kod, ama except ValueError:; ValueError açık mavi vurgulu. Çıktı kırmızı: NameError: name 'inptu' is not defined. Did you mean: 'input'?; altında yazım hatası görünüyor. Adsız except yazım hatasını saklıyor; except ValueError ile asıl hata, NameError, görünüyor. Adsız except try: credits = int(inptu("Kredi: ")) except: print("Tam sayı girin.") Çıktı Tam sayı girin. asıl hata saklandı except ValueError try: credits = int(inptu("Kredi: ")) except ValueError: print("Tam sayı girin.") Çıktı NameError: name 'inptu' is not defined. Did you mean: 'input'? yazım hatası görünüyor
except'ten sonra exception'ın adı yazılır; adsız except asıl hatayı saklar.

Python ne yazdırır?


try:
    x = int("3.5")
    print("A")
except ValueError:
    print("B")
      
  1. B
  2. A
  3. A B
  4. ValueError ile durur

assert

assert: 4 ve -2 yazılınca Üstte solda Genel biçim: assert şart, mesaj. Sağda iki satırlık kod: credits = int(input("Kredi: ")) ve assert credits > 0, "Kredi pozitif olmalı". Altta solda 4 yazıldı: Çıktı'da yalnızca Kredi: 4; altında 4 > 0 True: hiçbir şey olmaz. Tıklayınca sağda -2 yazıldı: Çıktı'da Kredi: -2, Traceback (most recent call last):, üç nokta ve kırmızı AssertionError: Kredi pozitif olmalı; altında -2 > 0 False: program durur. Sayılar int (turuncu), True ve False bool (deniz yeşili), metinler str (yeşil). Genel biçim assert <şart>, <mesaj> credits = int(input("Kredi: ")) assert credits > 0, "Kredi pozitif olmalı" 4 yazıldı Çıktı Kredi: 4 4 > 0 True: hiçbir şey olmaz -2 yazıldı Çıktı Kredi: -2 Traceback (most recent call last): … AssertionError: Kredi pozitif olmalı -2 > 0 False: program durur
assert bir şartı sınar: True ise bir şey olmaz, False ise program AssertionError ile durur.

try ve assert

try ve assert Üst satır, try ve except, sağda petrol mavisiyle program sürer: try:, credits = int(input("Kredi: ")), except ValueError:, print("Tam sayı girin."), print("Program devam ediyor"); Çıktı: Kredi: dört, Tam sayı girin., Program devam ediyor. Tıklayınca alt satır, assert, sağda kırmızıyla program durur: credits = int(input("Kredi: ")), assert credits > 0, "Kredi pozitif olmalı", gri print("Program devam ediyor") ve yanında çalışmadı; Çıktı: Kredi: -2 ve kırmızı AssertionError: Kredi pozitif olmalı (iki satıra bölünmüş). Metinler str (yeşil), 0 int (turuncu). try ve except program sürer try: credits = int(input("Kredi: ")) except ValueError: print("Tam sayı girin.") print("Program devam ediyor") Çıktı Kredi: dört Tam sayı girin. Program devam ediyor assert program durur credits = int(input("Kredi: ")) assert credits > 0, "Kredi pozitif olmalı" print("Program devam ediyor") çalışmadı Çıktı Kredi: -2 AssertionError: Kredi pozitif olmalı
try hatayı yakalar, program sürer; assert hatayı kendisi çıkarır, program durur.

Python ne yazdırır?


score = 120
assert score >= 0, "negatif"
print("A")
assert score <= 100, "100'den büyük"
print("B")
      
  1. A B
  2. A, sonra AssertionError
  3. A, AssertionError, B
  4. Yalnızca AssertionError

break, continue, except ve assert

Ne zaman çalışır?Sonra ne olur?Sürer mi?
breaksatırına gelinceloop'tan sonraki satıra geçilirloop biter, program sürer
continuesatırına gelinceloop'un başına dönülürloop sürer
excepttry'da o exception çıkıncaexcept'in block'u çalışırprogram sürer
assertşartı False oluncaAssertionError çıkarprogram durur

Dördü de akışı değiştirir; programı yalnızca assert durdurur.

Ödev 3

Son gün
8 Kasım Pazar, 23.59
Form
https://forms.gle/2Ei4AbGpuuJNtN5w7
Repo
GitHub'da folding-to-everest-python-hw; README'de bugünün konu özeti

Ödev 3, odev3.py dosyasıdır: TODO'ları doldurup aynı dosyayı formdan yüklersiniz.

Ders sonrası videolar

Önce bunu izleyin
CS50P, Lecture 2: Loops
Daha fazlası
CS50P, Lecture 2: Loops (for ve nested loops)
Daha fazlası
PY4E, Strings (str üzerinde for)
Daha fazlası
Corey Schafer, Loops and Iterations
Daha fazlası
CS50P, Lecture 3: Exceptions (try ve except)
Derinlemesine
Computerphile, Halting Problem in Python

İsteğe bağlı; bağlantılar Ek kaynaklar sayfasında.

Haftaya

Ders programı: Ders 1, Ders 2 ve Ders 3 bitti, haftaya Ders 4 Beş sütunlu ders programı, soldan sağa. Sağ üstte Salı, 18.00, E4. Ders 1, 20 Ekim (üstünde petrol mavisiyle bitti yazıyor, başlığı gri): bilgisayar, print(), error messages, int (turuncu), float (hardal sarısı), variable; Ödev 1, 25 Ekim Pazar 23.59. Ders 2, 27 Ekim (üstünde petrol mavisiyle bitti yazıyor, başlığı gri): str (yeşil), input(), f-string, index, slicing, bool (deniz yeşili), if / elif; Ödev 2, 1 Kasım Pazar 23.59. Ders 3, 3 Kasım (üstünde petrol mavisiyle bitti yazıyor, başlığı gri): while, for, break, continue, try / except, assert; Ödev 3, 8 Kasım Pazar 23.59. Ders 4, 10 Kasım (üstünde haftaya yazıyor, başlığı açık mavi ve çivit mavisi çerçeveyle vurgulu): import, def, return, scope, None (bej), class; Ödev 4, 15 Kasım Pazar 23.59. Ders 5, 17 Kasım: list (vişneçürüğü), tuple (mavi gri), aliasing, dict (kahverengi), set (zeytin yeşili), file; Ödev 5, 22 Kasım Pazar 23.59. Salı, 18.00, E4 bitti Ders 1 20 Ekim bilgisayar print() error messages int float variable Ödev 1 25 Ekim Pazar 23.59 bitti Ders 2 27 Ekim str input() f-string index, slicing bool if / elif Ödev 2 1 Kasım Pazar 23.59 bitti Ders 3 3 Kasım while for break continue try / except assert Ödev 3 8 Kasım Pazar 23.59 haftaya Ders 4 10 Kasım import def return scope None class Ödev 4 15 Kasım Pazar 23.59 Ders 5 17 Kasım list tuple aliasing dict set file Ödev 5 22 Kasım Pazar 23.59
Haftaya kendi function'larınızı yazacaksınız.

Bugün neler yapabiliyorsunuz

Aynı program, iki çalıştırma Üstte: Loop her turun başında sorar. Altında iki Run penceresi. Birincisinde Kaç ders? 3, sonra üç kez Puan: 66, 40 ve 77 yazılmış ve çıktı 2 dersten geçtiniz. İkincisinde Kaç ders? 2, sonra iki kez Puan: 45 ve 60 yazılmış ve çıktı 1 dersten geçtiniz. Yazılan sayılar yeşil, str rengi. Loop her turun başında sorar. 1. çalıştırma Kaç ders? 3 Puan: 66 Puan: 40 Puan: 77 2 dersten geçtiniz. 2. çalıştırma Kaç ders? 2 Puan: 45 Puan: 60 1 dersten geçtiniz.

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