for, range() ve döngü problem kalıpları

Geçen hafta while ile koşul doğru olduğu sürece tekrar yaptık. Bazen de kaç tekrar yapacağımız baştan bellidir: 1’den 10’a kadar sayıları işlemek, 7 günlük veri girmek veya 6 taksitlik bir ödeme planı oluşturmak gibi.

Bu tür durumları Python’da for döngüsü ve range() fonksiyonuyla daha kısa yazabiliriz. Bu hafta for söz dizimini öğrendikten sonra sayma, biriktirme, arama ve özetleme gibi birçok problemde karşımıza çıkan döngü kalıplarını tanıyacağız.

Bu bölümün kapsamı

NoteSınavda sorulur
  • range() nesnesinin ürettiği değerler ve listeden farkı
  • range() biçimleri ve bitiş değerinin dışarıda kalması
  • Sayma ve biriktirme kalıpları
  • Arama kalıbında break ile erken bitirme
  • continue ile yalnızca o yinelemeyi atlama
  • while True ve break ile geçerli girdi kalıbı ve bu kalıbın özel bitirme değerinden (sentinel) farkı
  • Probleme göre for ile while arasında seçim
  • enumerate() ve zip() kullanımı
  • İkiden çok katmanlı iç içe döngüler

Bu başlıklar konunun devamıdır; ileride karşınıza çıkar ama bu derste ezberlemeniz beklenmiyor.

range(1, 5) neden 5 değerini üretmiyor?

Cevap tek bir kurala dayanır: range() bitiş değerini üretmez. Döngü sınırlarında yapılan hataların çoğu bu kuralı unutmaktan çıkar. Bölümün ikinci yarısında döngüyle çözülen problemleri türlerine ayıracağız: saymak, biriktirmek, aramak ve döngüden erken çıkmak ayrı kalıplardır.

for ile belirli sayıda tekrar

range tarafından üretilen değerlerin for döngüsüne sırayla gelmesi.

for ve range akışı

Aşağıdaki program 0, 1, 2, 3 ve 4 değerlerini yazdırır:

for sayi in range(5):
    print(sayi)

range(5) döngü sırasında şu değerleri üretir:

0, 1, 2, 3, 4

Bitiş değeri olan 5 dâhil değildir.

Bu davranış başta alışılmadık gelebilir, ama kaç değer üretileceğini hesaplamayı kolaylaştırır: range(5) beş değer, range(2, 6) ise 6 - 2 = 4 değer üretir.

range() bir liste değildir

range(5) ile döngüde 0–4 değerlerini dolaşabilsek de range() çağrısı bir liste oluşturmaz. Python bunun yerine ayrı bir range nesnesi oluşturur. Nesne (object), Python’ın bellekte tuttuğu, türü belli bir değerdir; range nesnesi de değerleri döngüye sırası gelince verir:

print(range(5))

Çıktı:

range(0, 5)

Üretilen değerleri bir kerede görmek isterseniz list() kullanabilirsiniz:

print(list(range(5)))

Çıktı:

[0, 1, 2, 3, 4]
Note

for sayi in range(5): yazarken list(range(5)) yapmanız gerekmez. Döngü değerleri range nesnesinden doğrudan sırayla alır. Burada list() yalnızca aralığın içeriğini göstermek için kullanıldı.

Tahmin et: range() hangi değerleri üretir?

Aşağıdaki kodu çalıştırmadan önce çıktıyı tahmin edin:

range(2, 9, 2):

  • 2 değerinden başlar,
  • Her adımda 2 artar,
  • 9 değerine gelmeden durur.

Bu nedenle çıktı 2, 4, 6, 8 olur.

range() biçimleri

range(stop), range(start, stop) ve range(start, stop, step) kullanımlarının ürettiği değerler.

range parametreleri

Üç temel kullanım biçimi vardır:

Yazım Ürettiği değerler
range(5) 0’dan başla, 5 hariç ilerle
range(2, 6) 2’den başla, 6 hariç ilerle
range(10, 0, -2) 10’dan başla, 0’a gelmeden ikişer azal

Adım negatif olduğunda kural değişmez; 0 için de ayrı bir kural yoktur. Bitiş (stop) değeri hiçbir durumda dâhil edilmez. Değişen yalnızca ilerleme yönüdür.

Örneğin:

print(list(range(5, 0, -1)))

şunu verir:

[5, 4, 3, 2, 1]

Listede 0 yok, çünkü bu çağrıda bitiş değeri 0’dır. Başlangıcın dâhil, bitişin hariç olduğu bu tür aralığa yarı açık aralık denir. Adım pozitif olduğunda da aynı kural geçerlidir.

for sayi in range(5, 0, -1):
    print(sayi)

Çıktı:

5
4
3
2
1

Alıştırma: son değeri dâhil edin

1’den 10’a kadar on sayının hepsini yazdırmak istiyoruz. Aşağıdaki kod 10 değerini atlıyor.

range() çağrısındaki bitiş değerini düzeltin.

range(1, 11) ifadesini deneyin.

for sayi in range(1, 11):
    print(sayi)

Sayaç ve biriktirici

Döngülerde iki değişken rolü sık görülür:

  • Sayaç: kaç kez işlem yapıldığını ya da kaçıncı adımda olduğumuzu tutar,
  • Biriktirici: toplam, çarpım gibi her turda güncellenen sonucu tutar.

Örneğin 1’den 5’e kadar sayıların toplamı:

toplam = 0

for sayi in range(1, 6):
    toplam = toplam + sayi

print(toplam)

Burada sayi, range() çağrısından sırayla gelen değerdir; toplam ise biriktiricidir.

İzleme tablosu:

sayi Yeni toplam
1 1
2 3
3 6
4 10
5 15

Toplam değişkeninin her döngü turunda nasıl güncellendiğini gösteren biriktirme kalıbı.

Biriktirme kalıbı

Alıştırma: haftalık çalışma süresini toplayın

Bir öğrencinin her gün sabit 45 dakika çalıştığını ve bunu 7 gün sürdürdüğünü varsayalım. Toplam çalışma süresini biriktiriciyle hesaplayın.

toplam_dakika = toplam_dakika + 45 satırı her yinelemede çalışmalıdır.

toplam_dakika = 0

for gun in range(1, 8):
    toplam_dakika = toplam_dakika + 45

print("Toplam dakika:", toplam_dakika)

Sayma kalıbı

Bazen değerlerin toplamını değil, bir koşulu kaç değerin sağladığını bulmak isteriz.

Örneğin 1–20 arasında 3 ile tam bölünen kaç sayı olduğunu bulalım:

adet = 0

for sayi in range(1, 21):
    if sayi % 3 == 0:
        adet = adet + 1

print(adet)

Buradaki sayaç her yinelemede değil, yalnızca koşul doğru olduğunda artar.

Tahmin et ve çalıştır

Aşağıdaki kod 1–15 arasında kaç çift sayı olduğunu sayıyor. Çalıştırmadan önce sonucu tahmin edin:

Sonuç 7 olmalıdır: 2, 4, 6, 8, 10, 12, 14.

Arama kalıbı ve break

Bir aralıkta aradığımız ilk değeri bulduktan sonra döngünün devam etmesine gerek kalmayabilir. break, içinde bulunduğu döngüyü hemen sonlandırır.

Örneğin 50’den büyük ve 7 ile tam bölünen ilk sayıyı bulalım:

for sayi in range(51, 100):
    if sayi % 7 == 0:
        print("Bulundu:", sayi)
        break

İlk uygun değer 56 olduğunda döngü sona erer.

Important

break çalıştığında döngü, koşulu yanlış olduğu için değil, programcı o noktada bitirmek istediği için biter. Gereksiz yere kullanılan break kodun akışını izlemeyi zorlaştırabilir. Aranan sonuç bulunduktan sonra kalan turlar bir işe yaramıyorsa break kullanmak uygundur.

Alıştırma: ilk uygun katı bulun

30’dan büyük, 8 ile tam bölünen ilk sayıyı bulun. Aşağıdaki program uygun değerlerin hepsini yazdırıyor; yalnızca ilkini yazdıracak biçimde değiştirin.

print() satırından sonra aynı girinti düzeyinde break yazın.

for sayi in range(31, 80):
    if sayi % 8 == 0:
        print("Bulundu:", sayi)
        break

Geçerli girdi gelene kadar: while True + break

Geçen hafta input() satırını döngüden önce ve döngü içinde iki kez yazdığımız örneği gördük. Artık break’i bildiğimize göre aynı akışı tek bir input() satırıyla yazabiliriz:

while True:
    puan = int(input("1-5 arasında puan: "))

    if 1 <= puan <= 5:
        break

    print("Geçersiz değer")

print("Kabul edilen puan:", puan)

while True koşulu hiçbir zaman yanlış olmaz. Bu yüzden bu kalıpta çıkış koşulunu ve break satırını sizin yazmanız gerekir. Geçerli değer gelince break döngüyü sonlandırır; değer geçersizse yeni bir yineleme başlar ve puan yeniden sorulur.

Note

Bu örnek de kullanıcının int() ile sayıya çevrilebilecek bir değer yazdığını varsayar. Sayıya çevrilemeyen metinle ne yapılacağını 13. haftada, istisnalar konusunda öğreneceğiz.

continue: bu yinelemenin kalanını atla

continue döngüyü bitirmez. O anki yinelemenin geri kalanını atlar ve bir sonraki yinelemeye geçer.

Tek ve basit bir koşul için çoğu zaman continue gerekmez. Örneğin yalnızca saat == 3 durumunu atlamak istiyorsanız if saat != 3: yazmanız yeterlidir. continue en çok, veriyi işlemeden önce birden fazla geçersiz durumu ayıklamak gerektiğinde işe yarar; ana işlem satırları daha sade kalır.

Örneğin ölçüm listemizde -50 derecenin altındaki ve 60 derecenin üzerindeki değerleri geçersiz kabul edelim:

olcumler = [22, -80, 24, 75, 19]

toplam = 0
gecerli_adet = 0

for sicaklik in olcumler:
    if sicaklik < -50:
        continue

    if sicaklik > 60:
        continue

    toplam = toplam + sicaklik
    gecerli_adet = gecerli_adet + 1

print("Geçerli ölçüm:", gecerli_adet)
print("Toplam:", toplam)

Bu örnekte iki eleme koşulu, toplama ve sayma satırlarından önce gelir. Geçersiz bir değerde continue çalışınca toplam ve sayaç güncellenmez; döngü sonraki ölçümle devam eder.

Tip

Aynı işi continue olmadan daha kısa ve açık bir koşulla yazabiliyorsanız onu seçin. Ama bir veriyi atlamak için birden fazla kontrol yapıyorsanız continue, asıl işi yapan satırları daha az girintili ve daha okunur tutabilir.

Özel bitirme değeri (sentinel)

Kaç veri geleceği baştan belli değilse for range(...) işe yaramayabilir. Kullanıcı veri girişini özel bir değer yazarak bitiriyorsa geçen haftaki while yapısını kullanırız.

Örneğin harcama tutarları girilsin; -1 girildiğinde giriş bitsin:

toplam = 0
tutar = float(input("Tutar (-1 bitirir): "))

while tutar != -1:
    toplam = toplam + tutar
    tutar = float(input("Tutar (-1 bitirir): "))

print("Toplam:", toplam)

Burada -1 bir harcama değildir; yalnızca girişin bittiğini bildirir. Bu tür değere özel bitirme değeri (sentinel) denir.

Note

Gerçek bir programda girilen tutarın geçerli olup olmadığı ayrıca kontrol edilmelidir. Bu örnekte -1 dışında negatif değer girilmediğini ve kullanıcının boş giriş yapmadığını varsayıyoruz. Kullanıcı hiçbir şey yazmadan Enter’a basarsa float("") dönüşümü ValueError hatası verir. Bu tür dönüşüm hatalarını 13. haftada try/except ile ele alacağız.

Hangi döngüyü seçmeliyim?

Basit bir başlangıç kuralı:

Durum Genellikle uygun yapı
Tekrar sayısı baştan belli for + range()
Bir koşul sağlandığı sürece devam while
Özel bitirme değeri gelene kadar devam while
Belirli sayı aralığındaki değerleri işle for + range()

Tabloyu kesin bir kural gibi okumayın: aynı problem çoğu zaman iki yapıyla da çözülebilir. Seçerken kodun niyetini en açık anlatan yapıyı tercih edin.

Değiştir: taksit planını inceleyin

12000 TL’lik bir ürün 6 eşit taksitle ödenecek olsun:

Şunları deneyin:

  1. taksit_sayisi değerini 4 yapın.
  2. İlk ve son ayın ay değerini tahmin edin.
  3. range(1, taksit_sayisi) yazarsanız son taksitte ne olur?
  4. Her ayın başındaki ve sonundaki kalan değerini küçük bir izleme tablosuna yazın.

Üret: aylık taksit borcunu azaltın

Bir cihaz 9000 TL borçla alınmış, her ay 1500 TL ödenecek. 6 ay boyunca her ödemeden sonra kalan borcu yazdıran bir program yazın.

Başlangıç kodu:

Kabul kriterleri:

  • for ve range() kullanılmalı,
  • Aylar 1’den 6’ya kadar işlenmeli,
  • Her ay kalan_borc değerinden aylik_odeme çıkarılmalı,
  • Ay numarası ve kalan borç yazdırılmalı,
  • Son ayın sonunda kalan borç 0 olmalı.

for ay in range(1, 7): ile başlayabilirsiniz.

kalan_borc = 9000
aylik_odeme = 1500

for ay in range(1, 7):
    kalan_borc = kalan_borc - aylik_odeme
    print("Ay:", ay, "Kalan borç:", kalan_borc)

İç içe döngü ne zaman gerekir?

Bir tekrarın içinde başka bir tekrar gerekiyorsa döngüleri iç içe yazarız. Bu derste iç içe döngüyü yalnızca problemde gerçekten iki ayrı tekrar olduğunda kullanacağız: katlar ve her kattaki odalar gibi.

Örneğin iki katlı ve her katta üç odası olan bir binanın oda etiketlerini yazdıralım:

for kat in range(1, 3):
    for oda in range(1, 4):
        print("Kat:", kat, "Oda:", oda)

Dış döngünün her yinelemesinde iç döngü baştan sona çalışır. Ekrana toplam 2 × 3 = 6 satır yazılır.

Bu hafta yıldızlarla üçgen çizmek gibi karmaşık desenlere girmeyeceğiz. Aklınızda kalması gereken şu: problemde birbirinden bağımsız iki tekrar varsa iç içe döngü gerekebilir.

Sınav provası

Önce kendi cevabınızı seçin, sonra cevap anahtarında her şıkkın neden doğru ya da yanlış olduğunu okuyun. Yanlış şıklar rastgele yazılmadı; bu konuda öğrencilerin gerçekten yaptığı hatalardan seçildi. Sınav soruları da aynı yolla hazırlanır.

Madde 1. range(1, 5) hangi değerleri üretir?

  • A. 1, 2, 3, 4
  • B. 0, 1, 2, 3, 4
  • C. 1, 5
  • D. 5, 4, 3, 2, 1
  • E. 1, 2, 3, 4, 5

Madde 2. print(range(5)) neden [0, 1, 2, 3, 4] yazdırmaz?

  • A. Değerler ancak bir değişkene atandıktan sonra görünür
  • B. range() yalnızca for içinde kullanılabilir
  • C. range(5) bir liste değil, range nesnesidir
  • D. print() listeleri yazdıramaz
  • E. range(5) boş bir nesne üretir

Madde 3. range(5, 0, -1) neden 0 değerini üretmez?

  • A. 0 değeri Python’da özel olduğu için atlanır
  • B. Negatif adımda range() hiçbir değer üretmez
  • C. Bitiş değeri negatif adımda da dışarıda kalır; sayma 1’de durur
  • D. Adım negatif olduğunda başlangıç da dışarıda kalır
  • E. range() yalnızca artan yönde çalışır

Madde 4. Aşağıdaki program ne yazdırır?

toplam = 0

for i in range(1, 5):
    toplam = toplam + i

print(toplam)
  • A. 10
  • B. 4
  • C. 15
  • D. 1234
  • E. 0

Madde 5. 50’nin altındaki puanları saymak isteniyor. Boşluğa ne gelmelidir?

puanlar = [70, 45, 90, 30]
kalan = 0

for puan in puanlar:
    if puan < 50:
        ______

print(kalan)
  • A. print(kalan)
  • B. kalan = kalan + puan
  • C. kalan = puan
  • D. kalan = kalan + 1
  • E. kalan = 1

Madde 6. break ile continue arasındaki temel fark nedir?

  • A. İkisi de döngüyü bitirir; continue ayrıca bir mesaj yazar
  • B. break yalnızca while, continue yalnızca for içinde kullanılır
  • C. break bir yinelemeyi atlar; continue döngüyü bitirir
  • D. break programı sonlandırır
  • E. break döngüyü bitirir, continue sonraki tura geçer

Madde 7. Aşağıdaki program ne yazdırır?

for sayi in [3, 8, 12, 20]:
    if sayi > 10:
        print(sayi)
        break
  • A. 12 ve 20
  • B. 20
  • C. 3, 8, 12, 20
  • D. 12
  • E. Hiçbir şey yazmaz

Madde 8. Aşağıdaki program ne yazdırır?

for i in range(1, 6):
    if i == 3:
        continue
    print(i)
  • A. 1, 2
  • B. 1, 2, 4, 5
  • C. 3
  • D. 1, 2, 3, 4, 5
  • E. 4, 5

Madde 9. Aşağıdaki kalıpta döngünün gerçekten sonlanmasını sağlayan şey nedir?

while True:
    deger = input("Puan: ")
    if deger.isdigit():
        break
    print("Geçersiz, tekrar deneyin.")
  • A. print() satırının en sonda olması
  • B. Koşul sağlandığında çalışan break satırı
  • C. input() çağrısının veri bitince durması
  • D. while True koşulunun bir süre sonra yanlış olması
  • E. isdigit() çağrısının döngüden çıkması

Madde 10. Bir problemde for yerine while kullanmak ne zaman daha açıklayıcıdır?

  • A. Her zaman; for yalnızca listelerde kullanılır
  • B. Sonucu bir değişkende biriktirecekseniz
  • C. Döngü içinde if kullanılacaksa
  • D. Döngü ondan fazla tur dönecekse
  • E. Tekrar sayısı baştan belli olmadığında

Madde 1. Doğru: A. Başlangıç dâhil, bitiş hariçtir; 5 üretilmez.

  • B yanlış: İki argüman verildiğinde ilki başlangıçtır; 0’dan başlanmaz.
  • C yanlış: range() yalnızca uçları değil, aradaki bütün değerleri üretir.
  • D yanlış: Geriye saymak için negatif adım verilmesi gerekir.
  • E yanlış: Bitiş değeri hiçbir zaman üretilmez. 5’i de istiyorsanız range(1, 6) yazılır.

Madde 2. Doğru: C. range() değerleri gerektiğinde üreten ayrı bir nesnedir. print() bu nesneyi range(0, 5) biçiminde yazar. Değerleri liste olarak görmek için list(range(5)) yazılabilir.

  • A yanlış: Değerleri çoğu zaman önce bir değişkene atayıp sonra yazdırdığımız için akla yatkındır. Ama atama nesnenin türünü değiştirmez; yine range olarak yazılır.
  • B yanlış: range() hemen her örnekte for ile birlikte göründüğü için akla gelir. Ama list(range(5)) gibi başka yerlerde de kullanılabilir; yalnızca kendisi bir liste değildir.
  • D yanlış: Beklenen liste ekranda görünmediği için sorun print()te aranabilir. Ama print([0, 1, 2]) sorunsuz çalışır; sorun değerin liste olmaması.
  • E yanlış: Çıktıda sayılar görünmediği için nesnenin boş olduğu sanılabilir. Ama boş değildir; for ile dolaşıldığında beş değer verir.

Madde 3. Doğru: C. Kural yön değiştirmez: başlangıç dâhil, bitiş hariç. Sonuç 5, 4, 3, 2, 1 olur.

  • A yanlış: 0 için özel bir kural yok; range(5, -1, -1) yazılsaydı üretilirdi.
  • B yanlış: Üretir; başlangıç bitişten büyük olduğu sürece geriye doğru sayar.
  • D yanlış: Başlangıç her zaman dâhildir; 5 üretilir.
  • E yanlış: Negatif adımla azalan yönde de çalışır.

Madde 4. Doğru: A. 1 + 2 + 3 + 4 toplamı 10’dur; 5 üretilmediği için toplama girmez.

  • B yanlış: toplam biriktiricidir; yalnızca son değeri tutmaz.
  • C yanlış: 5 değeri range(1, 5) tarafından üretilmez.
  • D yanlış: toplam bir sayıdır; + burada toplama yapar, birleştirme değil.
  • E yanlış: Döngü dört kez çalışır ve her turda toplam büyür.

Madde 5. Doğru: D. Sayaç, koşul sağlandığında birer artar. Çıktı 2 olur.

  • A yanlış: Yazdırmak sayacı artırmaz; değişken hep 0 kalır.
  • B yanlış: Bu, puanları toplar; kaç tane olduğunu değil toplamlarını verir.
  • C yanlış: Her seferinde üzerine yazılır; sonuçta yalnızca son düşük puan kalır.
  • E yanlış: Kaç kez çalışırsa çalışsın sonuç 1 kalır; birikim olmaz.

Madde 6. Doğru: E. break döngüden tamamen çıkar. continue yalnızca o yinelemenin kalanını atlar ve döngü sonraki turla devam eder.

  • A yanlış: İkisi de döngünün olağan akışını kestiği için aynı işi yapıyor gibi görünür. Ama continue döngüyü bitirmez ve kendiliğinden bir şey yazmaz.
  • B yanlış: while True ile break kalıbı sık görüldüğü için break whilea özgü sanılabilir. Ama ikisi de her iki döngü türünde kullanılabilir.
  • C yanlış: İkisinin de akışı kestiğini bilen ama hangisinin ne yaptığını karıştıran öğrenci bunu seçer. Görevler ters yazılmış.
  • D yanlış: breakten sonra döngünün çıktısı kesildiği için program durmuş gibi görünebilir. Ama programı değil, yalnızca içinde bulunduğu döngüyü sonlandırır; döngüden sonraki satırlar çalışır.

Madde 7. Doğru: D. İlk uygun değer bulunduğunda break döngüyü bitirir; 20’ye hiç bakılmaz.

  • A yanlış: break olmasaydı ikisi de yazılırdı; burada döngü ilk eşleşmede biter.
  • B yanlış: Arama baştan başlar; ilk uygun değer 12’dir.
  • C yanlış: Koşul yalnızca 10’dan büyük değerleri yazdırıyor.
  • E yanlış: Listede koşulu sağlayan değerler var.

Madde 8. Doğru: B. i 3 olduğunda continue o turun kalanını atlar; döngü sonraki değerle devam eder.

  • A yanlış: continue döngüyü bitirmez; bu break davranışı olurdu.
  • C yanlış: continue tam tersini yapar: o turu atlar.
  • D yanlış: 3 için print() satırına hiç gelinmez.
  • E yanlış: 1 ve 2 koşulu sağlamaz; ikisi de yazılır.

Madde 9. Doğru: B. while True kendiliğinden hiç bitmez; çıkışı yalnızca break sağlar.

  • A yanlış: print() yalnızca mesaj yazar; akışı değiştirmez.
  • C yanlış: input() her çağrıldığında yeniden sorar; döngüyü kendisi bitirmez.
  • D yanlış: True sabittir ve hiçbir zaman yanlış olmaz.
  • E yanlış: isdigit() yalnızca True / False döndürür; çıkış kararını break uygular.

Madde 10. Doğru: E. Tekrar bir koşulun sürmesine bağlıysa kaç tur olacağı önceden bilinmez. Geçerli girdi gelene kadar sormak buna bir örnektir; while bu koşulu doğrudan yazar.

  • A yanlış: for çoğu örnekte bir liste üzerinde dolaştığı için böyle düşünülebilir. Ama for range() ile sayısal aralıklarda da kullanılır.
  • B yanlış: Biriktirme örnekleri önceki bölümde while ile gösterildiği için akla gelir. Ama biriktirme her iki döngüde de yapılabilir.
  • C yanlış: while bir koşulla çalıştığı için if ile daha uyumlu sanılabilir. Ama if iki döngü türünde de kullanılabilir; seçimi belirlemez.
  • D yanlış: Uzun döngülerin while ile yazılması gerektiği sanılabilir. Ama tur sayısının büyüklüğü değil, baştan bilinip bilinmediği belirleyicidir.

Tek sayfa özet

Bu hafta belirli sayıda tekrarı for ve range() ile yazdık ve sık kullanılan döngü kalıplarını gördük.

  • range() bir liste değil, aralıktaki değerleri sırayla veren ayrı bir range nesnesidir; değerleri görmek için list(range(...)) kullanılabilir.
  • range() bitiş değerini, adım pozitif de olsa negatif de olsa dâhil etmez.
  • range(baslangic, son, adim) ile başlangıç ve ilerleme miktarı belirlenebilir.
  • Sayaç bir şeyin kaç kez olduğunu, biriktirici ise toplam gibi biriken sonucu tutar.
  • Koşulu sağlayan değerleri saymak için sayaç yalnızca if doğru olduğunda artırılabilir.
  • break aranan sonuç bulunduğunda veya geçerli girdi alındığında döngüyü tamamen bitirebilir.
  • while True + break ile geçerli girdi gelene kadar sorma kalıbında input() satırını iki kez yazmak gerekmez.
  • continue yalnızca o anki yinelemenin kalanını atlar; özellikle geçersiz veriyi birden fazla kontrolle ayıklarken işe yarar.
  • Tekrar sayısı baştan biliniyorsa for, koşula bağlı belirsiz tekrar için while çoğu zaman daha açıklayıcıdır.
  • Özel bitirme değeri (sentinel) veri girişinin sona erdiğini bildirmek için kullanılabilir; boş ya da sayıya çevrilemeyen girdi ise ayrıca ele alınmalıdır.
  • İç içe döngü, problemde gerçekten iki tekrar boyutu olduğunda kullanılmalıdır.

Bir sonraki bölümde tekrar eden kod parçalarını fonksiyonlara ayıracak; parametreler ve dönüş değerleriyle problemi daha küçük parçalara böleceğiz.

Bu bölümün kazanımları

Bu bölümü bitiren öğrenci:

  • range() nesnesinin ürettiği değerleri belirler ve listeden farkını açıklar.
  • range() çağrısının farklı biçimlerini kullanır ve bitiş değerinin dışarıda kaldığını hesaba katar.
  • Sayma ve biriktirme kalıplarını for ile kurar.
  • Arama kalıbında break ile döngüyü erken bitirir.
  • continue ile yalnızca o yinelemenin kalanını atlar.
  • while True ve break ile geçerli girdi gelene kadar soran döngüyü yazar ve bu kalıbı sentinel kullanımından ayırır.
  • Problemin yapısına göre for ile while arasında seçim yapar.
Back to top