🐍 class-666

📖 Ders 6 — Gömülü Fonksiyonlar ve Modüller

Python'un çakısı ve alet çantaları: hazır fonksiyonlarla hızlan. Bitince 🟢 Kolay alıştırmalardan başla.

1. Gömülü fonksiyon nedir?

Gömülü (built-in) fonksiyonlar Python'un çakısıdır: hiçbir şey kurmadan, hiçbir şey import etmeden her yerde hazırdırlar. Zaten birini aylardır kullanıyorsun — print() de bir gömülü fonksiyondur! Bir fonksiyonu çağırmak hep aynı kalıptır: isim, parantez, içine değer:

len("merhaba")     # fonksiyona "merhaba" veriyoruz, o bize 7 veriyor

Fonksiyon bir sonuç döndürür — bu sonucu değişkene atayabilir, başka fonksiyona verebilir, ekrana basabilirsin. Şimdi çakının aletlerini tek tek açalım.

2. len — kaç parça?

len() (length = uzunluk) bir şeyin kaç parçadan oluştuğunu sayar: string'de harfleri (boşluk dahil!), listede elemanları:

print(len("ilker turan"))   # 11  (boşluk da sayılır)
print(len([1, 2, 3, 4, 5])) # 5
print(len(range(10)))       # 10
len(5) hata verir! Bir sayının "uzunluğu" yoktur — TypeError alırsın. len yalnızca string, liste, range gibi koleksiyonlarla çalışır. Sayının basamak sayısı lazımsa önce str() ile metne çevir: len(str(12345)) → 5.

3. Dönüşüm fonksiyonları ve type

int(), float(), str(), bool(), list() veri tiplerini birbirine çevirir. type() ise "bu değer ne türden?" sorusuna cevap verir — dedektif aletin:

metin = "100"
print(metin * 2)        # 100100   ← metin çoğaldı!
print(int(metin) * 2)   # 200      ← şimdi matematik oldu
print(type(metin))      # <class 'str'>
"Sayı gibi görünen metin" en sinsi hata kaynağıdır. "100" + 50 → TypeError. "100" * 2 → hata YOK ama 100100! Kod tuhaf davranıyorsa ilk işin type() ile bakmak olsun.

4. sum, min, max — liste istatistikleri

Bir sayı listesinin toplamı, en küçüğü ve en büyüğü için döngüye gerek yok:

degerler = [2, 4, 6, 8]
print(sum(degerler))    # 20
print(min(degerler))    # 2
print(max(degerler))    # 8

Ortalamanın hazır fonksiyonu yok ama tarifi iki aletin işbirliği:

ortalama = sum(degerler) / len(degerler)   # 5.0
Ezber cümlesi: "topla, adede böl" = sum(...) / len(...). Eleman sayısını elle yazma (/ 4 gibi) — liste değişince kodun sessizce yanlış hesaplar!

5. abs — işareti at

abs() (absolute) sayının mutlak değerini, yani sıfıra uzaklığını verir:

print(abs(-10))   # 10
print(abs(10))    # 10

Karar Verme dersinde bunu elle kurmuştuk: deger if deger > 0 else -deger — abs bu kodun hazır halidir. Fark, mesafe, borç/alacak hesaplarının vazgeçilmezi.

6. round — yuvarlama (ve büyük sürprizi)

round() en yakın tam sayıya yuvarlar; ikinci parametre "virgülden sonra kaç basamak kalsın?" der:

pi = 3.14159
print(round(pi))       # 3
print(round(pi, 2))    # 3.14
print(round(pi, 3))    # 3.142

int() ile karıştırma: int(3.7) ondalığı kırpar (3), round(3.7) en yakına gider (4).

Banker's rounding: "nokta 5 hep yukarı gider" kuralı Python'da GEÇERSİZ! Tam ortadaki .5 değerlerinde Python en yakın ÇİFT tam sayıya yuvarlar: round(2.5)2, round(3.5) → 4, round(4.5)4. Neden? Milyonlarca işlemde hep yukarı yuvarlamak toplamı şişirir; çifte gitmek bu yanlılığı sıfırlar. Bankacılar böyle yuvarlar, adı oradan gelir.

7. sorted — sırala ama bozma

sorted() koleksiyonun sıralanmış yeni bir kopyasını döndürür; reverse=True ile büyükten küçüğe:

degerler = [8, 5, 1, 9]
print(sorted(degerler))                # [1, 5, 8, 9]
print(sorted(degerler, reverse=True))  # [9, 8, 5, 1]
print(degerler)                        # [8, 5, 1, 9]  ← orijinal duruyor!

String verirsen harfleri, isim listesi verirsen isimleri alfabetik sıralar. Sıralı listenin uçları çok iş görür: sorted(d)[-2] = ikinci en büyük!

sorted orijinali DEĞİŞTİRMEZ — sonucu bir değişkene almazsan sıralama kaybolur: sorted(d) tek başına bir işe yaramaz, sirali = sorted(d) de. (Listeyi yerinde değiştiren .sort() metodu ayrı bir şeydir — ikisini karıştırma.)

8. print'in gizli güçleri: sep ve end

print'e virgülle istediğin kadar değer verirsin. sep (ayraç) değerlerin arasına, end (bitiş) en sona ne geleceğini belirler:

print(1, 2, 3)                    # 1 2 3        (sep varsayılan: boşluk)
print(1, 2, 3, sep="*")           # 1*2*3
print("yükleniyor", end="... ")   # satır atlamadı!
print("bitti")                    # yükleniyor... bitti

end'in varsayılanı "\n" (satır atlama) olduğu için her print yeni satıra geçer — end'i değiştirirsen sonraki print aynı satırdan devam eder.

9. Modül nedir? import ile çantayı aç

Gömülü fonksiyonlar çakıysa, modüller alet çantasıdır: konuya özel araçlarla dolu, ama kullanmadan önce import ile çantayı açman gerekir. İki biçim var:

import math                  # çantayı komple al → math.sqrt(9)
from math import sqrt        # çantadan tek aleti çıkar → sqrt(9)
import math biçimi daha güvenlidir: math.sqrt yazınca aletin hangi çantadan geldiği hep görünür. from ... import ... kısa yazdırır ama kalabalık programda "bu sqrt nereden geldi?" karmaşası yaratabilir.
import etmeden kullanırsan NameError: name 'math' is not defined alırsın — çanta kapalıyken alete uzanamazsın! import satırları geleneksel olarak dosyanın en başına yazılır.

10. math turu

Matematik çantasının en çok kullanılan aletleri:

import math
print(math.sqrt(144))    # 12.0   karekök (sonuç hep float!)
print(math.pi)           # 3.141592653589793
print(math.ceil(3.2))    # 4      tavan: HEP yukarı
print(math.floor(3.8))   # 3      taban: HEP aşağı

ceil'in klasik senaryosu: 130 öğrenci, 40 kişilik otobüs → 130/40 = 3.25 → math.ceil(3.25) = 4 otobüs. round dersen 3 çıkar, 10 öğrenci yolda kalır! 😄

Negatifte floor tuzağı: "aşağı" demek sayı doğrusunda SOLA gitmek demektir. math.floor(-2.3)-3 (−2 değil!), ama int(-2.3) → -2 (sadece kırpar). Pozitiflerde aynı görünen bu iki fonksiyon, negatifte yollarını ayırır.

11. random turu — ve seed'in sırrı

Şans çantası random: zar, kura, karıştırma...

import random
print(random.randint(1, 6))              # 1-6 arası zar (İKİ UÇ DA dahil!)
print(random.choice(["elma", "armut"]))  # listeden rastgele seçim

Peki seed ne işe yarar? Bilgisayar aslında gerçek rastgelelik üretemez — sayıları bir tohumdan (seed) türetir. Tohumu sen sabitlersen dizi hep aynı yerden başlar:

random.seed(42)
print(random.randint(1, 6))   # her çalıştırmada AYNI sayı çıkar!
Seed = tekrarlanabilir rastgelelik. Oyun testinde "aynı zarlarla tekrar oyna", bilimsel deneyde "sonucumu başkası da üretebilsin", alıştırma sitesinde "cevap kontrol edilebilsin" — hepsi seed sayesinde. Seed satırını silersen her çalıştırma farklı sonuç verir.

12. help — kendi kendine öğrenme aleti

Bir fonksiyonun nasıl kullanıldığını unuttun mu? Python'a sor:

help(print)    # sep, end ve diğer parametreleri anlatır
help(round)    # ikinci parametrenin adını söyler

Çıktı ilk bakışta teknik görünür ama alışınca en hızlı başvuru kaynağın olur — internete bile gerek yok. Parantezsiz yazdığına dikkat: help(print), fonksiyonun kendisini soruyorsun, sonucunu değil.