🐍 class-666

📖 Ders 1 — Söz Dizimi ve Veri Türleri

Alıştırmalardan bağımsız okunabilen ders notu. Bitince 🟢 Kolay alıştırmalardan başla.

1. Değişken: değere isim takmak

Değişkeni etiketli bir kutu gibi düşün: kutunun içine bir değer koyarsın, üstüne de bir etiket (isim) yapıştırırsın. Sonra o değere ihtiyaç duyduğunda kutuyu açmazsın bile — etiketi söylemen yeter, Python içindekini getirir. Etiketi = işaretiyle yapıştırırsın:

sehir = "Ankara"     # string (metin) — tırnak İÇİNDE
nufus = 5803482      # int (tamsayı) — tırnak YOK
print(sehir)         # Ankara
print(sehir, nufus)  # Ankara 5803482  (virgül araya boşluk koyar)

Kutunun içeriğini istediğin an değiştirebilirsin — etiket aynı kalır, içerik yenilenir:

skor = 10
skor = 25            # eski 10 gitti, kutuda artık 25 var
print(skor)          # 25

İsim kuralları: harf veya _ ile başlar; içinde harf/rakam/_ olabilir; boşluk olmaz; class, if gibi anahtar kelimeler (Python'un kendine ayırdığı isimler) kullanılamaz. Birden fazla atamayı tek satırda yapabilirsin, hatta iki kutunun içeriğini takas edebilirsin:

a, b, c = 1, 2, 3    # çoklu atama: a=1, b=2, c=3
x, y = 5, 9
x, y = y, x          # takas — üçüncü kutuya gerek yok!
print(x, y)          # 9 5
İyi alışkanlık: etikete ne koyduğunu yaz. x = 87.5 yerine ortalama = 87.5 — iki hafta sonra kodu açtığında kendine teşekkür edersin.

2. Sayılar: int, float ve e gösterimi

Tam sayılar int (15, -3, 0), ondalıklılar float (14.75, .5, 2.) türündedir. Ayrım göz kararı: nokta varsa float, yoksa int. Bir değerin türünü merak edersen type() ile sorabilirsin:

print(type(7))       # <class 'int'>
print(type(7.0))     # <class 'float'>
print(3 * 1.5)       # 4.5 — int ile float işleme girerse sonuç float

Çok büyük/küçük sayılar için e gösterimi kullanılır. Sıfırları tek tek yazmak yerine "virgülü kaydır" talimatı verirsin — kamerayı ileri/geri zoom'lamak gibi. e'yi şöyle oku: "virgülü şu kadar basamak kaydır" — artıysa sağa, eksiyse sola:

print(7e3)       # 7000.0   (virgül 3 sağa)
print(7e-3)      # 0.007    (virgül 3 sola)
print(2.5e2)     # 250.0
9.1e-31          # muazzam küçük: elektronun kütlesi (kg)
Tuzak 1: e içeren her sayı otomatik float olur — 7e3 sonucunun 7000.0 diye noktalı çıkması bundan.
Tuzak 2: eksi üsleri karşılaştırırken "az eksi olan" büyüktür: 1e-27 > 1e-31 (tam 10.000 kat!). Baştaki rakama değil önce üsse bak.

3. Stringler ve tırnak sorunu

Metinler (string) tırnak içine yazılır; tek veya çift fark etmez — tırnaklar metnin kapısı gibidir: biri açar, aynısından biri kapatır. Sorun, metnin içinde de tırnak olmasıdır — Python içteki tırnağı görünce "kapı kapandı" sanır ve gerisini anlamaz. Üç çözüm:

# 1) öbür tırnağı kullan (içte tek çeşit varsa)
m = 'O bana "gel" dedi'
print(m)                  # O bana "gel" dedi
# 2) üç tırnak — içeride HER ŞEY serbest
m = """O bana "gel" dedi, Ali'yi gördüm"""
# 3) kaçış dizisi — tırnağın önüne ters taksim
m = 'Ali\'yi gördüm'
print(m)                  # Ali'yi gördüm

Stringler + ile uç uca eklenir, * ile tekrarlanır:

print("kara" + "deniz")   # karadeniz
print("ha" * 3)           # hahaha
Tuzak: + string ile sayıyı birleştiremez — "yaş: " + 15 hata verir. Ya str(15) ile çevir ya da birazdan göreceğin f-string'i kullan.

4. Kaçış dizileri: görünmez karakterler

Ters taksim \ arkasındaki karaktere özel anlam yükler. En önemlisi \n: görünmez "satır atla" karakteri — daktilonun şaryo kolu gibi, o noktada satırı bitirip alta geçer:

print("elma\narmut")
# elma
# armut
print("ad:\tAli")    # ad:     Ali   (\t = tab boşluğu)

Yani üç tırnak kullanmadan, tek satırlık bir stringle çok satırlı çıktı üretebilirsin.

5. f-string: metne değişken ve hesap gömmek

f-string'i boşluk doldurmalı şablon cümle gibi düşün: "___ aldı: ___" cümlesindeki boşluklara Python değerleri yerleştirir. Tırnaktan önce f koy, boşlukları süslü parantezle aç:

ad = "Ali"
puan = 87.6543
print(f"{ad} aldı: {puan:.2f}")     # Ali aldı: 87.65
print(f"5 fazlası: {puan + 5}")     # 5 fazlası: 92.6543
fiyat, adet = 20, 2
print(f"{adet} ekmek = {fiyat * adet} TL")   # 2 ekmek = 40 TL

Süslü parantezin içi Python kodu gibi çalışır — değişken, hesap, hepsi olur. :.2f = "ondalıklı yaz, virgülden sonra 2 basamak" (yuvarlayarak).

f harfini unutursan hata almazsın ama süslü parantezler aynen yazılır: print("{ad} aldı"){ad} aldı. Çıktında süslü parantez görüyorsan ilk bakacağın yer baştaki f.

6. bool: True/False ve doluluk kuralı

bool() her değeri True/False'a çevirir. Kutuya bakıp tek soru soran bir görevli düşün: "içinde bir şey var mı?" — ne olduğuyla ilgilenmez, dolu mu boş mu ona bakar:

FalseTrue
Sayıdeğeri sıfırsa (0, 0.0, -0.0)sıfır olmayan her şey (eksiler dahil)
Stringboşsa ("")dolu her string — "0" ve "False" bile!
Noneher zaman False
print(bool(5))        # True
print(bool(0))        # False
print(bool(-3))       # True  (eksi ama sıfır değil)
print(bool(""))       # False (bomboş)
print(bool(" "))      # True  (içinde 1 boşluk karakteri var!)
print(bool("False"))  # True  (içinde 5 karakter var)
Tuzak: stringde içeriğin ANLAMI önemsizdir, doluluğu önemlidir. bool("0") → True, çünkü string boş değil — içinde bir karakter var.

7. Tek satır koşul ve "kapı bekçisi" mantığı

if aslında soru sormaz — önüne konan True/False değerine bakan bir kapı bekçisidir: True ise kapıyı açar, False ise kapatır. Tek satırlık hali "şu doğruysa bunu, değilse şunu seç" demektir ve çok kullanışlıdır:

kullanici = ""
print(kullanici if kullanici else "Misafir")   # Misafir  (boş → False)
kullanici = "Ayşe"
print(kullanici if kullanici else "Misafir")   # Ayşe     (dolu → True)

Bir üstteki doluluk kuralı burada işe yaradı: if'e bool olmayan değer verirsen bekçi önce bool() görevlisine sorar.

8. Tür dönüşümleri

Dışarıdan (klavyeden, dosyadan, internetten) gelen veri hep string gelir — "25" sayı değil, 2 ve 5 karakterlerinden oluşan bir metindir. Hesap için bir çevirmene ihtiyacın var:

yas = int("25")        # 25 — artık hesap yapılabilir
print(yas + 5)         # 30
kilo = float("12.5")   # 12.5
etiket = str(42)       # "42" — sayıdan metne (tersi yön)
print("no: " + etiket) # no: 42 — artık + ile birleşebilir
Tuzak: int("3.5") hata verir! int() sadece tam sayı görünümlü metni çevirir; ondalıklı metne float("3.5") gerekir.

9. Sık Yapılan Hatalar

Bu konuda öğrencilerin en çok takıldığı beş nokta — sen düşmeden gör:

HataYanlışDoğru
e gösterimini parçalayarak yazmak9.1*-31e10, 9.1 e -319.1e-31 — e gösterimi TEK parçadır: sayı + e + üs, araya boşluk/işaret karışmaz
Tırnak çakışması'Ali'nin kalemi'"Ali'nin kalemi" veya 'Ali\'nin kalemi'
Ondalıklı metni int'e vermekint("3.5") → hatafloat("3.5")
String + sayı toplamak"5" + 3 → hataint("5") + 3 → 8 veya "5" + str(3) → "53"
Kural dışı değişken adı1_sayi, toplam fiyat, classsayi_1, toplam_fiyat, sinif
Görünmez hata: print(f"...") yazarken f'yi unutmak. Program çalışır, hata da vermez — ama çıktıda {ad} aynen görünür. "Hata yok ama çıktı tuhaf" durumlarının bir numaralı şüphelisi.

10. Kendini Sına

Cevabı görmeden önce gerçekten tahmin et — yanılmak da öğretir:

1) bool("0") ne verir? Peki bool(0)? — cevabı gör

bool("0")True: tırnak var, yani bu bir string; içinde 1 karakter olduğu için doludur. bool(0)False: bu bir sayı ve değeri sıfır. Aynı görüntü, iki farklı tür, iki farklı kural!

2) print(2.5e-2) ekrana ne yazar? — cevabı gör

0.025 — üs eksi olduğu için virgül 2 basamak sola kayar: 2.5 → 0.25 → 0.025. Ve e gösterimi olduğu için sonuç float'tır.

3) ad = "Ece" iken print(f"{ad} {len(ad) if False else 3} yaş") yerine daha basiti: print(f"{ad} aldı: {90.567:.1f}") ne yazar? — cevabı gör

Ece aldı: 90.6:.1f virgülden sonra 1 basamağa yuvarlar: 90.567 → 90.6 (kesip atmaz, yuvarlar; 90.5 değil!).

Hazırsan pratiğe: her kavramın alıştırması var, yanlışında ipucu alırsın. 🟢 Kolay'dan başla, ısınınca seviye atla.