Nested Loops, Desen Çizimi ve Matris İşlemleri
İç içe döngü (nested loop), bir döngünün içinde başka bir döngünün bulunmasıdır. Dış döngü her çalıştığında, iç döngü baştan sona kadar tamamen çalışır.
for i in range(3): # Dış döngü: 3 kez
for j in range(4): # İç döngü: 4 kez
print(f"i={i}, j={j}")
print("---") # Her dış döngü sonunda
Dış döngü m kez, iç döngü n kez çalışıyorsa, toplam m × n kez çalışır.
Yukarıdaki örnekte: 3 × 4 = 12 kez print çalışır.
| Dış (i) | İç (j) | Çıktı |
|---|---|---|
| 0 | 0 | i=0, j=0 |
| 0 | 1 | i=0, j=1 |
| 0 | 2 | i=0, j=2 |
| 0 | 3 | i=0, j=3 |
| --- | ||
| 1 | 0 | i=1, j=0 |
| 1 | 1 | i=1, j=1 |
| ... devam eder | ||
İç içe döngülerle çeşitli desenler oluşturabiliriz:
n = 4 # satır
m = 5 # sütun
for i in range(n):
for j in range(m):
print("*", end="")
print() # Satır sonu
n = 5
for i in range(1, n + 1):
for j in range(i):
print("*", end="")
print()
n = 5
for i in range(n, 0, -1):
for j in range(i):
print("*", end="")
print()
n = 5
for i in range(1, n + 1):
# Boşluklar
for j in range(n - i):
print(" ", end="")
# Yıldızlar
for j in range(2 * i - 1):
print("*", end="")
print()
n = 5
for i in range(1, n + 1):
for j in range(1, i + 1):
print(j, end="")
print()
print(" ", end="")
for i in range(1, 11):
print(f"{i:4}", end="")
print("\n" + "-" * 44)
for i in range(1, 11):
print(f"{i:2} |", end="")
for j in range(1, 11):
print(f"{i*j:4}", end="")
print()
# 3x4 boyutunda matris
satir = 3
sutun = 4
matris = []
for i in range(satir):
satir_listesi = []
for j in range(sutun):
satir_listesi.append(i * sutun + j + 1)
matris.append(satir_listesi)
# Matrisi yazdır
for satir in matris:
print(satir)
matris = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
toplam = 0
for i in range(len(matris)):
for j in range(len(matris[i])):
print(f"matris[{i}][{j}] = {matris[i][j]}")
toplam += matris[i][j]
print(f"\nToplam: {toplam}")
matris = [
[3, 7, 2],
[9, 1, 8],
[4, 6, 5]
]
en_buyuk = matris[0][0]
for i in range(len(matris)):
for j in range(len(matris[i])):
if matris[i][j] > en_buyuk:
en_buyuk = matris[i][j]
print(f"En büyük eleman: {en_buyuk}") # 9
a = [7, 10, 4, 44]
i = 0
toplam = 0
while i < len(a):
toplam += a[i]
i += 1
mean = toplam / len(a)
print(f"Ortalama: {mean}")
Ortalama, tüm değerlerin toplamının değer sayısına bölümüdür:
$\bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i = \frac{x_1 + x_2 + ... + x_n}{n}$
Kullanım: Veri setinin merkezi eğilimini gösterir. Notlar, maaşlar, sıcaklıklar gibi verilerin özetlenmesinde kullanılır.
Varyans, verilerin ortalamadan ne kadar uzaklaştığını ölçer:
Popülasyon Varyansı: $\sigma^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2$
Örneklem Varyansı: $s^2 = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2$
Neden n-1? Bessel düzeltmesi - örneklemden popülasyon varyansını tahmin ederken sapma olmaması için.
a = [7, 10, 4, 44]
# Önce ortalamayı hesapla
i = 0
toplam = 0
while i < len(a):
toplam += a[i]
i += 1
mean = toplam / len(a)
# Sonra varyansı hesapla
j = 0
sigma = 0
while j < len(a):
fark_kare = (a[j] - mean) ** 2
sigma += fark_kare
j += 1
varyans = sigma / (len(a) - 1) # Örneklem varyansı
print(f"Ortalama: {mean}")
print(f"Varyans: {varyans}")
Standart sapma, varyansın karekökü olup verilerin orijinal birimiyle ifade edilir:
$s = \sqrt{s^2} = \sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2}$
a = [7, 10, 4, 44]
# Ortalama
toplam = 0
for x in a:
toplam += x
mean = toplam / len(a)
# Varyans
sigma = 0
for x in a:
sigma += (x - mean) ** 2
varyans = sigma / (len(a) - 1)
# Standart sapma (varyansın karekökü)
std = varyans ** 0.5
print(f"Ortalama: {mean}")
print(f"Varyans: {varyans:.2f}")
print(f"Standart Sapma: {std:.2f}")
a = [-128, 62, 9000, -987, -85600]
# Liste üzerinde dolaşarak min-max bul
min_val = a[0]
max_val = a[0]
i = 1
while i < len(a):
if a[i] < min_val:
min_val = a[i]
if a[i] > max_val:
max_val = a[i]
i += 1
print(f"Minimum: {min_val}") # -85600
print(f"Maximum: {max_val}") # 9000
a = [-128, 62, 9000, -987, -85600]
i = len(a) - 1 # Son elemandan başla
toplam = 0
while i >= 0:
toplam += a[i]
i -= 1
print(f"Toplam: {toplam}")
n = int(input("Kaça kadar asal sayılar? "))
print(f"2'den {n}'e kadar asal sayılar:")
for sayi in range(2, n + 1):
asal = True
for i in range(2, int(sayi ** 0.5) + 1):
if sayi % i == 0:
asal = False
break
if asal:
print(sayi, end=" ")
print()
n = 5
# Üst yarı (piramit)
for i in range(1, n + 1):
print(" " * (n - i), end="")
print("*" * (2 * i - 1))
# Alt yarı (ters piramit)
for i in range(n - 1, 0, -1):
print(" " * (n - i), end="")
print("*" * (2 * i - 1))
break ve continue sadece
en içteki döngüyü etkiler!
for i in range(3):
print(f"Dış döngü: i={i}")
for j in range(5):
if j == 2:
break # Sadece iç döngüden çıkar
print(f" İç döngü: j={j}")
print(" İç döngü bitti")
# Yöntem 1: Flag değişkeni
bulundu = False
for i in range(10):
for j in range(10):
if i * j == 15:
print(f"Bulundu: i={i}, j={j}")
bulundu = True
break
if bulundu:
break
# Yöntem 2: Fonksiyon kullanma (daha temiz)
def ara():
for i in range(10):
for j in range(10):
if i * j == 15:
return (i, j)
return None
sonuc = ara()
print(f"Sonuç: {sonuc}")
print(end="") → Aynı satırda yazdırprint() → Yeni satıra geç