range(a, b, d)ilefordöngüsü kurmak ve yineleme sayısını döngüyü çalıştırmadan bulmak.- Döngü içinde koşullarla birlikte sayaç, biriktirici ve çarpım değişkenleri kullanmak.
whiledöngülerini ve yinelemeli dizileri izleme tablosuyla izlemek.break,continueve iç içe döngüler içeren programların sonucunu belirlemek.
1’den 1000’e kadar 7’ye bölünen sayıları saymak gerektiğini düşün. Bin kez if mi yazacaksın? Asla! Döngü, bir komut grubunu gerektiği kadar tekrarlar. 2025–2026 giriş sınavlarının dört kitapçığında en sık görülen konu tam olarak «Döngüler. Sayılarla işlemler» oldu: 120 bilişim sorusunun 14’ü. Bu derste döngü kurmayı ve en önemlisi onu bir izleme tablosuyla hatasız izlemeyi öğreneceksin.
for döngüsü ve range(): döngü adımı
Döngü, bir komut grubunu tekrar tekrar çalıştırır. Tekrarlanan komutlar döngü gövdesidir (girintiyle yazılır), gövdenin bir kez çalışmasına yineleme (iterasyon) denir. for döngüsünde döngü değişkeni her yinelemede dizinin sonraki değerini alır: for i in range(1, 6): döngüsünde i sırasıyla 1, 2, 3, 4, 5 olur.
range fonksiyonu bir tam sayı dizisi üretir ve üç biçimde yazılır: range(b) — 0, 1, …, b − 1; range(a, b) — a, a + 1, …, b − 1; range(a, b, d) — a, a + d, a + 2d, … Üçüncü sayı d, döngü değişkeninin adımıdır. d > 0 ise sayılar b’ye ulaşana kadar artar, d < 0 ise b’ye ulaşana kadar azalır. Bitiş değeri b asla dâhil değildir: «b’ye kadar, b hariç».
| Çağrı | Değerler | Yineleme |
|---|---|---|
range(5) | 0, 1, 2, 3, 4 | 5 |
range(3, 8) | 3, 4, 5, 6, 7 | 5 |
range(1, 20, 4) | 1, 5, 9, 13, 17 | 5 |
range(10, 0, -3) | 10, 7, 4, 1 | 4 |
range(20, 121) | 20, 21, …, 120 | 101 |
range(8, 3) | boş dizi | 0 |
- Nyineleme sayısı; ifade 0 veya negatifse döngü hiç çalışmaz
- abaşlangıç değeri
- bbitiş değeri (dâhil değil)
- dadım (negatif olabilir)
- ⌈x⌉x’in yukarıya, en yakın tam sayıya yuvarlanması
range(a, b, d) için yineleme sayısı. Döngü değişkeninin son değeri a + (N − 1) · d’dir. Adım 1 ise kısaca N = b − a; [a, b] aralığındaki tüm tam sayılar için range(a, b + 1) yazılır ve N = b − a + 1 olur.
Döngü gövdesi kaç kez çalışır ve döngü değişkeninin son değeri nedir? 1) range(3, 20, 4); 2) range(15, 2, -4); 3) range(20, 121); 4) range(1, 10, -1).
Çözümü gösterÇözümü gizle
2) (2 − 15) / (−4) = 3,25 → N = 4; son değer 15 + 3 · (−4) = 3 (15, 11, 7, 3).
3) Adım 1: N = 121 − 20 = 101; son değer 120.
4) (10 − 1) / (−1) = −9 < 0 → N = 0: adım negatif ama başlangıç bitişten küçük, bu yüzden döngü hiç çalışmaz.
for i in range(10, 0, -3):
print(i)
print(len(range(3, 20, 4)), len(range(20, 121)))▸ Beklenen çıktı
10 7 4 1 5 101
len(range(…)) yineleme sayısını denetlemeye yarar.for yalnızca range üzerinde değil, her dizi üzerinde çalışır: for ch in 'Baku': bir karakter dizisinin karakterlerini, for x in [4, 9, 2]: ise bir listenin elemanlarını tek tek alır. Bu olanak «Karakter dizileri ve üzerlerinde işlemler» ile «Listeler ve listeler üzerinde işlemler» derslerinde çok kullanılacak; bu derste sayılarla, yani range ile çalışıyoruz.
Sayaç ve biriktirici: döngü içinde koşul
Bir döngü çoğu zaman bir şeyi sayar ya da toplar. Bunun için döngüden önce değişkene bir başlangıç değeri verilir, döngünün içinde ise uygun her yinelemede güncellenir. Döngü içindeki koşul ifadesi bir «süzgeç» gibi çalışır: yalnızca koşulu sağlayan değerler sayılır veya toplanır.
- sayaç:
k = 0, döngüdek = k + 1— koşul kaç kez sağlandı; - biriktirici (toplam):
s = 0, döngüdes = s + x— değerlerin toplamı; - çarpım:
p = 1(0 değil, yoksa sonuç hep 0 olur), döngüdep = p * x.
s = 0
p = 1
k = 0
for i in range(1, 11):
if i % 2 == 1:
s = s + i
else:
p = p * i
if i % 3 == 0:
k = k + 1
print(s, p, k)▸ Beklenen çıktı
25 3840 3
Aynı kalıpla en büyük (veya en küçük) değer de bulunur: döngüden önce mx değişkenine ilk değer (ya da olası her değerden küçük bir sayı) yazılır, döngüde ise if x > mx: mx = x denetlenir. Böylece döngü bittiğinde mx, görülen değerlerin en büyüğünü tutar. Bu kalıpların hepsinde döngü her değere bir kez bakar ve sonucu adım adım «biriktirir».
- K[a, b] aralığında m’ye bölünen doğal sayıların sayısı
- a, baralığın uçları (doğal sayılar)
- mbölen
Döngüsüz sayma: [1, b] aralığında m’nin b // m katı vardır; [1, a − 1] aralığındakileri çıkarırız. Büyük aralıklardaki döngüleri izlemek yerine tam olarak böyle sayarız.
Bulun: 1) [20, 120] aralığında 7’ye bölünen sayıların sayısını; 2) [25, 95] aralığındaki tek sayıların sayısını; 3) [1, 100] aralığında 3’e veya 5’e bölünen sayıların sayısını.
Çözümü gösterÇözümü gizle
2) Tek sayılar 2’şer adımla gider: (95 − 25) : 2 + 1 = 36.
3) 3’ün 33 katı, 5’in 20 katı var; hem 3’e hem 5’e (yani 15’e) bölünen 6 sayı iki kez sayıldı: 33 + 20 − 6 = 47.
k = 0
for n in range(30, 131):
if n % 2 == 0 and n < 100:
if n % 7 == 0 or n % 9 == 0:
k = k + 1
else:
k = k + 2
print(k)▸ Beklenen çıktı
141
Yukarıdaki programın sonucunu belirleyin.
A) 141 B) 75 C) 132 D) 150 E) 139
Çözümü gösterÇözümü gizle
1) Dıştaki koşul doğru (n çift ve n < 100): 30, 32, …, 98 — (98 − 30) : 2 + 1 = 35 sayı. Bunlardan yalnızca 7’ye veya 9’a bölünenler k’yi 1 artırır. Çift ve 7’ye bölünen = 14’e bölünen: 42, 56, 70, 84, 98 (5 sayı); çift ve 9’a bölünen = 18’e bölünen: 36, 54, 72, 90 (4 sayı); ikisine birden bölünen yok. Toplam +9.
2) Dıştaki koşul yanlış: 101 − 35 = 66 sayı, her biri +2 verir: +132.
k = 9 + 132 = 141, cevap A. Tuzak:
else’in dıştaki if’e ait olduğunu görmeyen onu içteki koşula bağlar ve başka bir cevap bulur.while döngüsü ve izleme tablosu
while koşul: döngüsü, gövdesini koşul doğru olduğu sürece tekrarlar. Koşul her yinelemeden önce denetlenir; bu yüzden bu bir ön koşullu döngüdür: koşul baştan yanlışsa gövde bir kez bile çalışmaz. Gövdede, koşuldaki değişken mutlaka değişmelidir; yoksa döngü sonsuz olur. Döngü bittiğinde koşul yanlıştır: değişken koşulu bozan ilk değeri tutar. Tekrar sayısı önceden bilinmediğinde while seçilir: «toplam 1000’i geçene kadar», «sayının basamakları bitene kadar».
Her for döngüsü while ile yazılabilir: for i in range(a, b, d): (d > 0), i = a, while i < b:, gövde ve gövdenin sonunda i = i + d ile aynıdır. Bu dönüşüm akış şemalarındaki döngüleri anlamaya yardım eder: orada da döngü değişkenine başlangıç değeri verilir, koşul denetlenir, gövdeden sonra değişken adım kadar değişir (bkz. «Döngülü algoritmalar ve izleme tablosu»).
n = 0
k = 1
while k <= 15:
n = n + k
if k % 4 == 0:
k = k + 1
else:
k = k + 3
print(n + k)▸ Beklenen çıktı
68
İzleme tablosu, her yinelemede değişkenlerin değerlerini satır satır yazar: koşulun denetlendiği andaki değer, koşulun sonucu ve gövdeden sonraki değerler. Yukarıdaki program için:
| k | k <= 15 | n | k % 4 == 0 | yeni k |
|---|---|---|---|---|
| 1 | ✓ | 1 | ✗ | 4 |
| 4 | ✓ | 5 | ✓ | 5 |
| 5 | ✓ | 10 | ✗ | 8 |
| 8 | ✓ | 18 | ✓ | 9 |
| 9 | ✓ | 27 | ✗ | 12 |
| 12 | ✓ | 39 | ✓ | 13 |
| 13 | ✓ | 52 | ✗ | 16 |
| 16 | ✗ | 52 | — | döngü biter |
Örnek 4’ün programı ne yazdırır?
A) 52 B) 64 C) 68 D) 71 E) 55
Çözümü gösterÇözümü gizle
Son yinelemede k = 13 + 3 = 16 olur,
16 <= 15 ✗, döngü biter.print(n + k) → 52 + 16 = 68, cevap C. A seçeneği (52), döngüden sonra k’nin de eklendiğini unutanlar içindir.Her yeni değer önceki değerlerden hesaplanıyorsa döngü yinelemeli bir dizi üretir. En bilineni Fibonacci dizisidir: 1, 1, 2, 3, 5, 8, …; burada her terim kendinden önceki iki terimin toplamıdır. Programda iki değişken son iki terimi tutar ve her yinelemede «bir adım ileri kayar»: c = a + b, a = b, b = c. Atamaların sırası önemlidir: a = b, c hesaplanmadan önce yazılırsa eski a kaybolur.
a = 1
b = 1
for i in range(3, 11):
c = a + b
a = b
b = c
print(b)▸ Beklenen çıktı
55
Örnek 5’in programı ne yazdırır ve bu, Fibonacci dizisinin (1, 1, 2, 3, 5, …) kaçıncı terimidir?
Çözümü gösterÇözümü gizle
i = 3: b = 2; i = 4: 3; i = 5: 5; i = 6: 8; i = 7: 13; i = 8: 21; i = 9: 34; i = 10: 55.
range(3, 11) 8 yineleme verir, son i = 10’dur. Çıktı 55, yani dizinin 10. terimi.break ve continue
break, döngüyü hemen ve tamamen durdurur: kalan yinelemeler iptal edilir ve program döngüden sonraki satıra geçer. continue ise döngüyü durdurmaz; yalnızca o anki yinelemenin kalanını atlar ve sonraki yinelemeye geçer (for’da döngü değişkeni sonraki değeri alır, while’da koşul yeniden denetlenir). İç içe döngülerde ikisi de yalnızca en içteki döngüyü etkiler. break ile durdurulan bir for’da döngü değişkeni o anki değerini korur.
s = 0
for i in range(1, 50, 3):
if i % 5 == 0:
continue
if s > 40:
break
s = s + i
print(i, s)▸ Beklenen çıktı
19 41
Örnek 6’nın programı ne yazdırır?
Çözümü gösterÇözümü gizle
i = 1: s = 1; i = 4: s = 5; i = 7: s = 12.
i = 10:
10 % 5 == 0 ✓ → continue, s değişmez (12).i = 13: s = 25; i = 16: s = 41.
i = 19:
19 % 5 = 4, sonra 41 > 40 ✓ → break, 19 eklenmez.Döngü durdu, i = 19 olarak kalır. Çıktı: 19 41.
n = 100
while True:
n = n + 1
if n % 7 == 0 and n % 13 == 0:
break
print(n)▸ Beklenen çıktı
182
while True: kendi kendine durmaz; çıkışı break sağlar. Program 100’den büyük, hem 7’ye hem 13’e bölünen ilk sayıyı bulur: 91 · 2 = 182.İç içe döngüler
Bir döngünün gövdesinde başka bir döngü de olabilir; bunlara iç içe döngüler denir. Dıştaki döngünün her yinelemesinde içteki döngü baştan sona çalışır ve içteki değişken her seferinde yeniden başlar. Saati düşün: yelkovan (dış döngü) bir çizgi ilerlerken saniye ibresi (iç döngü) tam bir tur atar. İç döngünün sınırı dıştaki değişkene bağlı olabilir (range(i, 6)); o zaman iç döngü her dış yinelemede farklı sayıda çalışır.
- Niç gövdenin toplam çalışma sayısı
- N₁dış döngünün yinelemeleri
- N₂iç döngünün bir geçişteki yinelemeleri
İç döngü dıştaki değişkene bağlı değilse çarpım kuralı işler. Bağlıysa her dış yineleme için iç sayıyı ayrı bulup toplarız.
1) for i in range(4): ve içinde for j in range(1, 6):
2) for i in range(1, 5): ve içinde for j in range(i, 6):
3) for i in range(1, 6): ve içinde for j in range(i):
Çözümü gösterÇözümü gizle
2) i = 1: j 1…5 (5 kez); i = 2: 4; i = 3: 3; i = 4: 2 → 5 + 4 + 3 + 2 = 14.
3) i = 1: 1 kez; i = 2: 2; … i = 5: 5 → 1 + 2 + 3 + 4 + 5 = 15.
for a in range(1, 25):
for b in range(a, 25):
if a * b == 24:
print(a, b)▸ Beklenen çıktı
1 24 2 12 3 8 4 6
k = 0
for i in range(1, 5):
for j in range(i, 6):
if j % 4 == 0:
break
k = k + i
print(k)▸ Beklenen çıktı
10
Örnek 8’in programının sonucunu belirleyin.
A) 10 B) 20 C) 3 D) 14 E) 30
Çözümü gösterÇözümü gizle
break yalnızca iç döngüyü durdurur; j 4’e ulaşınca iç döngü biter, dış döngü devam eder.i = 1: j = 1, 2, 3 → k’ye üç kez 1 eklenir (k = 3); j = 4 →
break.i = 2: j = 2, 3 → iki kez 2 eklenir (k = 7); j = 4 →
break.i = 3: j = 3 → k = 10; j = 4 →
break.i = 4: j = 4 → hemen
break.Cevap: A) 10.
break’i hesaba katmayan 30’u (E), onun iki döngüyü de durdurduğunu sanan ise 3’ü (C) seçer.for döngüsü ve bir sayaçla [20, 120] aralığında 3’e bölünüp 5’e bölünmeyen sayıların sayısını bul ve yazdır.
k = 0
# for n in range(...):
print(k)▸ Beklenen çıktı
27
while döngüsüyle Fibonacci dizisinin (1, 1, 2, 3, 5, …) 1000’den büyük ilk terimini bul ve yazdır.
a = 1
b = 1
# while ...:
print(b)▸ Beklenen çıktı
1597
Önemli noktalar
range(a, b, d)a’dan başlar, d adımla ilerler ve b’yi içermez; yineleme sayısı ⌈(b − a) / d⌉’dir, pozitif değilse 0’dır.- Sayaç (
k = 0), biriktirici (s = 0) ve çarpım (p = 1) başlangıç değerlerini döngüden önce alır, döngü içinde koşula göre güncellenir. whileön koşullu bir döngüdür: koşul her yinelemeden önce denetlenir; döngüden sonra değişken koşulu bozan ilk değeri tutar.breakdöngüyü tamamen durdurur,continueyalnızca o anki yinelemeyi atlar; iç içe döngülerde ikisi de en içteki döngüye aittir.- İç içe döngülerde iç gövde N₁ · N₂ kez (bağımlı sınırda iç sayıların toplamı kadar) çalışır; büyük döngüleri izleme tablosu ve gruplarla say.
Kendini test et
12 soru. Her doğru cevap XP kazandırır.
range(2, 11, 3) hangi değerleri verir?