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
x = 87.5 yerine ortalama = 87.5 — iki hafta sonra kodu açtığında kendine teşekkür edersin.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)
e içeren her sayı otomatik float olur — 7e3 sonucunun 7000.0 diye noktalı çıkması bundan.1e-27 > 1e-31 (tam 10.000 kat!). Baştaki rakama değil önce üsse bak.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
+ 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.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.
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.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:
| False | True | |
|---|---|---|
| Sayı | değeri sıfırsa (0, 0.0, -0.0) | sıfır olmayan her şey (eksiler dahil) |
| String | boşsa ("") | dolu her string — "0" ve "False" bile! |
| None | her 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)
bool("0") → True, çünkü string boş değil — içinde bir karakter var.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.
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
int("3.5") hata verir! int() sadece tam sayı görünümlü metni çevirir; ondalıklı metne float("3.5") gerekir.Bu konuda öğrencilerin en çok takıldığı beş nokta — sen düşmeden gör:
| Hata | Yanlış | Doğru |
|---|---|---|
| e gösterimini parçalayarak yazmak | 9.1*-31e10, 9.1 e -31 | 9.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 vermek | int("3.5") → hata | float("3.5") |
| String + sayı toplamak | "5" + 3 → hata | int("5") + 3 → 8 veya "5" + str(3) → "53" |
| Kural dışı değişken adı | 1_sayi, toplam fiyat, class | sayi_1, toplam_fiyat, sinif |
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.Cevabı görmeden önce gerçekten tahmin et — yanılmak da öğretir:
bool("0") ne verir? Peki bool(0)? — cevabı görbool("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!
print(2.5e-2) ekrana ne yazar? — cevabı gör0.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.
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örEce aldı: 90.6 — :.1f virgülden sonra 1 basamağa yuvarlar: 90.567 → 90.6 (kesip atmaz, yuvarlar; 90.5 değil!).