for ve while Döngüleri, range(), break ve continue
Döngüler, bir kod bloğunu belirli sayıda veya bir koşul sağlandığı sürece
tekrar tekrar çalıştırmak için kullanılır. Python'da iki tür döngü vardır:
for ve while.
Belirli sayıda veya bir koleksiyon üzerinde tekrar için kullanılır:
for degisken in seri:
# Her tekrarda bu blok çalışır
range() sayı serileri oluşturur:
# range(n) → 0'dan n-1'e kadar
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# range(baslangic, bitis) → baslangic'tan bitis-1'e
for i in range(1, 6):
print(i) # 1, 2, 3, 4, 5
# range(baslangic, bitis, adim)
for i in range(0, 10, 2):
print(i) # 0, 2, 4, 6, 8 (2'şer artarak)
# Geriye doğru sayma
for i in range(5, 0, -1):
print(i) # 5, 4, 3, 2, 1
range(n) → 0, 1, 2, ..., n-1range(a, b) → a, a+1, ..., b-1 (a dahil, b hariç)range(a, b, c) → a'dan başlayıp c'şer artarak b'ye kadarn = int(input("N: "))
toplam = 0
for i in range(1, n + 1):
toplam += i
print(f"1'den {n}'e toplam: {toplam}")
sayi = int(input("Hangi sayının çarpım tablosu? "))
print(f"\n{sayi}'ın Çarpım Tablosu:")
print("-" * 20)
for i in range(1, 11):
sonuc = sayi * i
print(f"{sayi} x {i} = {sonuc}")
Koşul True olduğu sürece devam eder:
while koşul:
# Koşul True olduğu sürece çalışır
# Dikkat: Sonsuz döngüye dikkat!
i = 1
while i <= 5:
print(i)
i += 1 # Bu satır olmadan sonsuz döngü!
print("Döngü bitti")
while döngüsünde koşulun bir noktada False olmasını sağlamalısınız.
Aksi halde program sonsuza kadar çalışır.
# YANLIŞ - Sonsuz döngü!
i = 1
while i <= 5:
print(i)
# i artırılmadı, koşul hep True!
# DOĞRU
i = 1
while i <= 5:
print(i)
i += 1 # Koşul sonunda False olacak
taban = int(input("Taban: "))
us = int(input("Üs: "))
sonuc = 1
i = 1
while i <= us:
sonuc = sonuc * taban
i += 1
print(f"{taban}^{us} = {sonuc}")
toplam = 0
sayi = int(input("Sayı girin (0 = çık): "))
while sayi != 0:
toplam += sayi
sayi = int(input("Sayı girin (0 = çık): "))
print(f"Toplam: {toplam}")
# İlk 5'e bölünen sayıyı bul ve dur
for i in range(1, 100):
if i % 5 == 0:
print(f"İlk 5'e bölünen: {i}")
break # Döngüden çık
print(f"Kontrol: {i}")
print("Döngü bitti")
# 3'e bölünenleri atla
for i in range(1, 11):
if i % 3 == 0:
continue # Bu iterasyonu atla
print(i)
n = int(input("Sayı: "))
if n < 2:
print("Asal değil")
else:
asal = True
i = 2
while i * i <= n:
if n % i == 0:
asal = False
break # Bölen bulundu, döngüden çık
i += 1
if asal:
print(f"{n} asal sayıdır")
else:
print(f"{n} asal değildir")
Python'da döngüler else bloğu alabilir. Bu blok döngü normal şekilde
(break olmadan) biterse çalışır:
n = int(input("Sayı: "))
if n < 2:
print("Asal değil")
else:
i = 2
while i * i <= n:
if n % i == 0:
print("Asal değil")
break
i += 1
else:
# break çalışmadıysa (bölen bulunamadıysa)
print("Asal")
# Listede eleman arama
liste = [3, 7, 12, 45, 23]
aranan = 12
for eleman in liste:
if eleman == aranan:
print(f"{aranan} bulundu!")
break
else:
# break çalışmadıysa (bulunamadıysa)
print(f"{aranan} listede yok")
a = int(input("a: "))
b = int(input("b: "))
orj_a, orj_b = a, b
while b != 0:
r = a % b
a = b
b = r
print(f"{orj_a} ve {orj_b}'nin EBOB'u: {a}")
# EKOK = (a × b) / EBOB
def ebob(a, b):
while b != 0:
a, b = b, a % b
return a
a = int(input("a: "))
b = int(input("b: "))
eb = ebob(a, b)
ekok = (a * b) // eb
print(f"EBOB: {eb}")
print(f"EKOK: {ekok}")
n = int(input("Onluk sayı: "))
if n == 0:
print("İkilik: 0")
else:
ikili = ""
sayi = n
while sayi > 0:
bit = sayi % 2
ikili = str(bit) + ikili
sayi = sayi // 2
print(f"{n} → {ikili}")
# Yöntem 1: Döngü ile (O(n) zaman)
n = int(input("n: "))
m = int(input("m: "))
toplam = 0
for i in range(n, m + 1):
toplam += i
print(f"Döngü ile: {toplam}")
# Yöntem 2: Formül ile (O(1) zaman) - Gauss
terim_sayisi = (m - n) + 1
toplam_formul = terim_sayisi * (n + m) // 2
print(f"Formül ile: {toplam_formul}")
import random
gizli = random.randint(1, 100)
tahmin_sayisi = 0
print("1-100 arası bir sayı tuttum!")
while True:
tahmin = int(input("Tahminin: "))
tahmin_sayisi += 1
if tahmin < gizli:
print("Daha büyük!")
elif tahmin > gizli:
print("Daha küçük!")
else:
print(f"Tebrikler! {tahmin_sayisi} denemede buldun!")
break
n = int(input("n: "))
faktoriyel = 1
for i in range(1, n + 1):
faktoriyel *= i
print(f"{n}! = {faktoriyel}")
# Örnek: 5! = 1 × 2 × 3 × 4 × 5 = 120
| for Döngüsü | while Döngüsü |
|---|---|
| Tekrar sayısı belirli | Tekrar sayısı belirsiz |
| Liste/dizi üzerinde dolaşma | Koşul sağlandıkça devam |
| range() ile sayı serisi | Kullanıcı "çık" diyene kadar |
| Daha güvenli (sonsuz döngü riski az) | Sonsuz döngü riski var |
forwhileforwhileAslında her for döngüsü while ile, her while döngüsü de for ile yazılabilir. İkisi matematiksel olarak eşdeğerdir.
# for ile 1'den 5'e kadar yazdır
for i in range(1, 6):
print(i)
# Aynısı while ile
i = 1
while i < 6:
print(i)
i += 1
# while ile kullanıcı girişi
while True:
x = input("Sayı (çık için q): ")
if x == 'q':
break
print(f"Girdiniz: {x}")
# Aynısı for ile (iter kullanarak)
import sys
for line in iter(lambda: input("Sayı (çık için q): "), 'q'):
print(f"Girdiniz: {line}")
Hiçbir zaman bitmeyen döngüye sonsuz döngü denir. Program sonsuza kadar çalışır ve yanıt vermez hale gelir.
# HATA 1: Sayacı artırmayı unuttuk!
i = 0
while i < 5:
print(i)
# i += 1 ← Bu satır eksik! i hep 0 kalır
# HATA 2: Koşul hiçbir zaman False olmaz
x = 10
while x > 0:
print(x)
x += 1 # Azaltmak yerine artırıyoruz!
# HATA 3: Yanlış koşul
while True:
print("Sonsuza kadar...")
# break yok!
Ctrl + C tuşlarına basınBazen sonsuz döngü bilerek kullanılır. Bu çok yaygın bir pattern'dir!
# Kullanıcı "q" yazana kadar devam et
while True:
girdi = input("Bir sayı girin (çıkmak için q): ")
if girdi == "q":
print("Programdan çıkılıyor...")
break
# Sayıyı işle
try:
sayi = int(girdi)
print(f"{sayi}'nin karesi = {sayi ** 2}")
except ValueError:
print("Geçersiz sayı, tekrar deneyin.")
# Basit menü sistemi
while True:
print("\n=== MENÜ ===")
print("1. Toplama")
print("2. Çıkarma")
print("3. Çıkış")
secim = input("Seçiminiz: ")
if secim == "3":
print("Görüşürüz!")
break
elif secim == "1":
print("Toplama seçildi")
elif secim == "2":
print("Çıkarma seçildi")
else:
print("Geçersiz seçim!")
# Sunucu simülasyonu
while True:
istek = bekle_istek()
if istek == "kapat":
break
isle(istek)
# Oyun döngüsü
while True:
guncelle_oyun()
ciz_ekran()
if oyun_bitti:
break
Aynı işlemi iter() ve lambda ile de yapabilirsiniz:
# iter kullanarak - aynı işlem daha kısa
for line in iter(lambda: input("Sayı (çık için q): "), 'q'):
print(f"Girdiniz: {line}")
📝 Not: iter ve lambda kavramlarını şu an anlamasanız sorun değil. İlerleyen konularda öğreneceksiniz. Şimdilik while True + break pattern'ini kullanın.
Döngüler, özellikle iç içe döngüler, hata yapmaya en açık yerlerdir. Debugging araçları bu hataları bulmada çok yardımcıdır.
F5 tuşuna basın veya Run → Start DebuggingF10 → Bir adım ilerle (Step Over)F11 → Fonksiyonun içine gir (Step Into)F5 → Devam et (Continue)