# Fonksiyonlar: parametre, dönüş değeri, tür belirtme, varsayılan değer ve özyineleme # # Fonksiyon, bir işi yapan ve bir adı olan kod bloğudur. Bir kez yazılır, # istendiği kadar çağrılır. Tanımı "fonksiyon ad(parametreler):" ile başlar. # # Fonksiyonları dosyanın başına, değişkenlerden önce yazıyoruz. Bunun bir nedeni # var: bir fonksiyonun içinde, kendisinden ÖNCE tanımlanmış bir değişkenle aynı # adı kullanırsan fonksiyon o değişkeni değiştirir. Başta tanımlanan fonksiyonun # içindeki adlar yalnız ona ait kalır. # ── En basit fonksiyon: parametresiz, değer döndürmeyen ─────── fonksiyon ayrac(): yazdir("─".tekrarla(44)) # ── Parametre almak ─────────────────────────────────────────── # Çağırırken parantez içine verilen değer, parametrenin (ad) yerine geçer. fonksiyon selamla(ad): yazdir(f"Merhaba {ad}, hoş geldin.") # ── Değer döndürmek: don ────────────────────────────────────── # don, sonucu çağıran yere geri verir ve fonksiyonu orada bitirir. # Parametre ve dönüş türünü yazmak zorunlu değil; yazarsan derleyici denetler: # dikdortgen_alani("üç", 4) yazan biri program çalışmadan uyarılır. fonksiyon dikdortgen_alani(en: sayi, boy: sayi) -> sayi: don en * boy fonksiyon ortalama(a: ondalik, b: ondalik, c: ondalik) -> ondalik: don (a + b + c) / 3.0 # ── Varsayılan değerli parametre ────────────────────────────── # Çağıran kdv vermezse 20 kullanılır. Varsayılanlı parametreler en sona yazılır. fonksiyon kdvli_fiyat(fiyat: ondalik, kdv: sayi = 20) -> ondalik: don fiyat * (1.0 + ondalik(kdv) / 100.0) # ── Mantık döndüren fonksiyon ve birden çok don ─────────────── # Cevabı belli olduğu anda don ile çıkmak kodu sadeleştirir. fonksiyon asal_mi(n: sayi) -> mantik: eger n < 2: don yanlis bolen = 2 iken bolen * bolen <= n: eger n % bolen == 0: don yanlis bolen += 1 don dogru # ── Fonksiyon başka bir fonksiyonu çağırabilir ──────────────── fonksiyon asallari_yaz(baslangic: sayi, bitis: sayi): bulunan = "" dongu sayi_adayi icinde baslangic..bitis: eger asal_mi(sayi_adayi): bulunan = bulunan + f" {sayi_adayi}" yazdir(f"{baslangic}-{bitis} arası asallar:{bulunan}") # ── Özyineleme: kendini çağıran fonksiyon ───────────────────── # n! = n × (n-1)! ve 1! = 1. Her çağrı problemi biraz küçültür; # n <= 1 olunca durur. Bu durma koşulu olmazsa fonksiyon kendini sonsuza dek çağırırdı. fonksiyon faktoriyel(n: sayi) -> sayi: eger n <= 1: don 1 don n * faktoriyel(n - 1) # Bir sayının basamakları toplamı: 4729 → 4 + 7 + 2 + 9 = 22 # Son basamak n % 10, geri kalanı n // 10. fonksiyon basamak_toplami(n: sayi) -> sayi: eger n < 10: don n don n % 10 + basamak_toplami(n // 10) # ════════════════ Program buradan başlıyor ════════════════ ayrac() selamla("Zeynep") selamla("Mehmet") ayrac() yazdir(f"3 x 4 dikdörtgenin alanı: {dikdortgen_alani(3, 4)}") # Fonksiyonun sonucu bir değişkene atanabilir ya da doğrudan kullanılabilir. ort = ortalama(72.0, 85.0, 90.0) yazdir(f"72, 85 ve 90'ın ortalaması: {ort:.2f}") yazdir(f"100 TL, KDV %20 ile : {kdvli_fiyat(100.0):.2f} TL") yazdir(f"100 TL, KDV %10 ile : {kdvli_fiyat(100.0, 10):.2f} TL") # Parametreyi adıyla vermek, çok parametreli çağrıları okunur yapar. yazdir(f"100 TL, KDV %1 ile : {kdvli_fiyat(100.0, kdv=1):.2f} TL") ayrac() dongu n icinde [1, 2, 17, 21, 97]: eger asal_mi(n): yazdir(f"{n} asaldır") degilse: yazdir(f"{n} asal değildir") asallari_yaz(50, 80) ayrac() dongu n icinde 1..10: yazdir(f"{n:2}! = {faktoriyel(n):>9,}") yazdir(f"4729 sayısının basamakları toplamı: {basamak_toplami(4729)}") ayrac()