Python ile Programlama · Ünite 2
Veri Tipleri ve Temel İşlemler
10 soruluk deneme testine geç ↓1. Değişkenler ve atama
Python'da değişken bir kutu değil, bellekteki bir nesneye yapıştırılan etikettir. Atama işareti «eşittir» demek değil, «sağdaki nesneyi soldaki isme bağla» demektir. Önce sağ taraf hesaplanır, sonra isim sonuca bağlanır; x = x + 1 bu yüzden anlamlıdır.
a = 300 b = a print(a is b) # True: aynı nesne b = 301 print(a is b) # False: b yeni nesneye bağlandı print(a) # 300, a değişmedi
- →id(x): nesnenin benzersiz kimliği (CPython'da bellek adresi).
- →type(x): nesnenin sınıfı (veri tipi): type(42) → <class 'int'>.
- →is iki ismin aynı nesne olup olmadığına, eşittir-eşittir operatörü ise değerlerin aynı olup olmadığına bakar.
a = [1, 2, 3] b = [1, 2, 3] print(a == b) # True: değerler aynı print(a is b) # False: iki ayrı liste
Atama kalıpları
ad, yas, sehir = "Ayşe", 28, "Ankara" # çoklu atama (tuple unpacking) x, y = 10, 20 x, y = y, x # yer değiştirme (swap), geçici değişken yok a = b = c = 0 # zincirli atama: üçü aynı nesneye sayac += 1 # artırmalı atama: sayac = sayac + 1
İsimlendirme kuralları
| İsim | Durum | Neden? |
|---|---|---|
| toplam_fiyat, _gizli, x1 | Geçerli, PEP 8'e uygun | Küçük harf + alt tire (snake_case) |
| 2sayi | Geçersiz | Rakamla başlayamaz |
| kullanici-adi | Geçersiz | Tire, boşluk, @ yasak |
| for, if, True, None | Geçersiz | 35 ayrılmış kelimeden biri |
| TotalPrice | Geçerli ama önerilmez | PEP 8 değişkenler için snake_case ister |
| list, print, sum | Geçerli ama tehlikeli | Yerleşik işlevi gölgeler (shadowing) |
- →Büyük-küçük harf duyarlı: Ad ile ad farklı değişkenler.
- →Sabitler büyük harfle: MAKSIMUM_DENEME = 5. Tek harfli isim olarak l, O, I kullanılmaz (1 ve 0'la karışır).
- →match, case, _ ve type gibi yumuşak anahtar kelimeler yalnızca belirli bağlamlarda ayrılmıştır. keyword.iskeyword("for") bir kelimenin ayrılmış olup olmadığını söyler.
- →şehir gibi Türkçe karakterli isimler teknik olarak geçerli (PEP 3131), ama profesyonel projelerde kullanılmaz.
Dinamik tipleme: tür bildirmezsin (C'deki int x; gibi), tür nesnede saklanır. Aynı x önce 5, sonra "beş", sonra [1, 2, 3] olabilir. Esnek ama tür hataları çalışma anına kalır; bu yüzden tp, q, d yerine toplam_fiyat, urun_miktari, indirim_orani gibi anlamlı isimler çok önemli.
2. Sayısal tipler ve aritmetik
| int | float | complex | |
|---|---|---|---|
| Ne? | Tam sayı | Ondalıklı (kayan noktalı) | Gerçel + sanal kısım |
| Bellek | Sınırsız (taşma yok) | 64 bit, IEEE 754 | İki float (128 bit) |
| Kesinlik | Tam | ≈ 15–17 basamak | Her bileşen ≈ 15–17 |
| Örnek | 42, 0xFF, 0b1010 | 3.14, 1.5e6 | 3 + 4j |
| // ve % | Var | Var | Yok (TypeError) |
- →int sınırsızdır: 2 üzeri 1000 bile sorunsuz hesaplanır. Bu yüzden RSA'nın 2048 bitlik anahtarları ek kütüphanesiz kullanılabilir.
- →0xFF onaltılık, 0o77 sekizlik, 0b1010 ikilik yazımdır; hepsi int.
- →complex'te sanal birim j harfidir: z = 3 + 4j → z.real 3.0, z.imag 4.0, abs(z) 5.0, z.conjugate() (3−4j).
Yedi aritmetik operatör
| Operatör | Adı | 15 ve 4 ile | Sonuç |
|---|---|---|---|
| + | Toplama | 15 + 4 | 19 |
| - | Çıkarma | 15 - 4 | 11 |
| * | Çarpma | 15 * 4 | 60 |
| / | Bölme | 15 / 4 | 3.75 (her zaman float) |
| // | Tam bölme (taban) | 15 // 4 | 3 |
| % | Mod (kalan) | 15 % 4 | 3 |
| ** | Üs alma | 15 ** 4 | 50625 |
print(7 / 2) # 3.5 print(7 // 2) # 3 print(-7 // 2) # -4 ← taban: -3.5'ten küçük en büyük tam sayı print(7.0 // 2) # 3.0 ← float girerse float çıkar
Birim dönüştürme kalıbı: tam bölme büyük birimi, mod kalanı verir.
toplam = 90065 gun = toplam // 86400 # 1 kalan = toplam % 86400 saat = kalan // 3600 # 1 kalan = kalan % 3600 dakika = kalan // 60 # 1 saniye = kalan % 60 # 5
İşlem önceliği
- →1. Üs alma, sağdan sola
- →2. Tekli işaret (+x, −x)
- →3. Çarpma, bölme, tam bölme, mod (soldan sağa)
- →4. Toplama, çıkarma (soldan sağa)
print(2 + 3 * 4) # 14 print(2 ** 3 ** 2) # 512 = 2 ** 9 (sağdan sola) print(-1 ** 2) # -1 = -(1 ** 2) print((-1) ** 2) # 1
Tip dönüşümleri ve float hassasiyeti
Örtük dönüşüm: farklı tipler işleme girince sonuç daha geniş tipe yükselir: int → float → complex. 2 + 3.0 = 5.0. Açık dönüşüm: int(), float(), complex() ile sen istersin.
int(3.9) # 3 ← kırpar, yuvarlamaz
int(-3.9) # -3 ← sıfıra doğru kırpar
int("42") # 42
float("3.14") # 3.14
round(2.5) # 2 ← banker yuvarlaması: en yakın çifte
round(3.5) # 4import math
print(0.1 + 0.2 == 0.3) # False
print(math.isclose(0.1 + 0.2, 0.3)) # True
from decimal import Decimal, ROUND_HALF_UP
fiyat = Decimal('149.99') # metin olarak ver!
toplam = (fiyat * Decimal('1.20')).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
print(toplam) # 179.99| math öğesi | Ne yapar? | Örnek |
|---|---|---|
| math.pi, math.e | π ve Euler sayısı | 3.14159…, 2.71828… |
| math.sqrt(x) | Karekök (float) | sqrt(16) → 4.0 |
| math.floor(x) | x'ten küçük-eşit en büyük tam sayı | floor(-2.1) → -3 |
| math.ceil(x) | x'ten büyük-eşit en küçük tam sayı | ceil(-2.1) → -2 |
| math.isclose(a, b) | Yaklaşık eşitlik | Float karşılaştırma |
3. Karakter dizileri (string)
String: tırnak içindeki, Unicode karakterlerden oluşan sıralı ve değiştirilemez (immutable) dizi. Tek ('…'), çift ("…") ya da çok satır için üçlü tırnak kullanılır. İçinde ' geçiyorsa "…" seç. Ham dize r"C:\Users\dosya" ters eğik çizgiyi kaçış karakteri saymaz; Windows yolları için ideal.
| Kaçış | Anlamı |
|---|---|
| \n | Yeni satır |
| \t | Sekme (tab) |
| \\ | Ters eğik çizginin kendisi |
| \' ve \" | Tırnak işareti |
İndeksleme ve dilimleme
Dilim söz dizimi metin[başlangıç:bitiş:adım]. Başlangıç dahil, bitiş hariç.
s = "Python" s[0] # 'P' s[-1] # 'n' s[1:4] # 'yth' (1, 2, 3) s[:3] # 'Pyt' s[3:] # 'hon' s[::2] # 'Pto' (ikişer atla) s[::-1] # 'nohtyP' (ters çevir) s[0:100] # 'Python' (taşma hata vermez)
- →+ birleştirir: "Ayşe" + " " + "Yılmaz". Çarpı tekrarlar: "-" * 20.
- →len() karakter sayısını verir.
- →Döngüde art arda + ile birleştirmek her seferinde yeni nesne yaratır, yavaştır. Çok parçayı "".join(liste) ile tek seferde birleştir.
- →Değiştirilemez oldukları için stringler sözlük anahtarı olabilir; aynı değerdeki bazı stringler (ör. kısa, isim benzeri sabitler) bellekte tek nesneyi paylaşabilir (string interning).
Sık kullanılan metotlar
| Metot | Örnek | Sonuç |
|---|---|---|
| upper / lower | "py".upper() | "PY" |
| strip / lstrip / rstrip | " hi ".strip() | "hi" |
| replace | "ab".replace("a", "c") | "cb" |
| split | "a,b".split(",") | ["a", "b"] |
| join | "-".join(["a", "b"]) | "a-b" |
| find | "abc".find("z") | -1 (bulamazsa) |
| index | "abc".index("z") | ValueError (bulamazsa) |
| startswith / endswith | "x.pdf".endswith(".pdf") | True |
| count | "banana".count("a") | 3 |
| capitalize | "py".capitalize() | "Py" |
| casefold | "Straße".casefold() | Gelişmiş küçük harf |
Biçimlendirme: %, format(), f-string
| Yöntem | Örnek | Sürüm | Hız / okunurluk |
|---|---|---|---|
| % operatörü | "Merhaba %s" % ad | 2.x | Orta / düşük |
| str.format() | "Merhaba {}".format(ad) | 2.6+ | Yavaş / orta |
| f-string | f"Merhaba {ad}" | 3.6+ (PEP 498) | En hızlı / yüksek |
4. Mantıksal ifadeler (bool)
bool yalnızca True ve False alır ve int'in alt sınıfıdır: True 1, False 0 gibi davranır. True + True = 2, sum([True, True, False]) = 2. Python'a 2.3 sürümünde PEP 285 ile eklendi.
- →Altı karşılaştırma: eşit, eşit değil (!=), <, <=, >, >=. Sonuç her zaman bool.
- →Zincirleme karşılaştırma: 0 <= yas < 18 matematikteki gibi çalışır.
- →None kontrolünde her zaman is None yaz.
not, and, or ve kısa devre
| Operatör | Ne döndürür? | Kısa devre |
|---|---|---|
| not x | Her zaman True / False | Yok (tek işlenen) |
| x and y | x falsy ise x, değilse y | x falsy ise y'ye hiç bakılmaz |
| x or y | x truthy ise x, değilse y | x truthy ise y'ye hiç bakılmaz |
Öncelik: not → and → or. and ile or her zaman bool döndürmez, son baktığı değeri döndürür. Bu yüzden kullanici_adi = girdi or "Misafir" girdi boşsa varsayılan değeri atar.
0 or [] or None or "merhaba" # 'merhaba' (ilk truthy)
"" or "armut" # 'armut'
False and print("D") # False, print hiç çalışmaz
not "python" # FalseTruthy / falsy
Her nesnenin bir doğruluk değeri var. Falsy olanlar az: None, False, 0, 0.0, 0j, boş string "", boş [] () {} set(), range(0). Geri kalan her şey truthy.
| Çağrı | Sonuç | Not |
|---|---|---|
| int(True) | 1 | bool → int |
| int("merhaba") | ValueError | Sayısal olmayan metin |
| float(True) | 1.0 | |
| bool(42) | True | Sıfır dışı her sayı truthy |
| bool("") | False | Boş string |
| str(True) | 'True' | bool → str |
5. Girdi ve çıktı
Program üç evreden oluşur: girdi → işlem → çıktı. stdin (standart girdi) genelde klavye, stdout (standart çıktı) terminaldir; input() ve print() bunları bizim yerimize yönetir.
print() fonksiyonu değerlerin arasına sep, sonuna end koyar. Varsayılanlar tek boşluk ve yeni satır.
print("Elma", "Armut", "Muz", sep=", ") # Elma, Armut, Muz
print("2025", "04", "22", sep="-") # 2025-04-22
print("Yükleniyor", end=" ")
print("tamamlandı.") # Yükleniyor tamamlandı.
print("C:\\Users") # C:\Usersf-string biçim belirteçleri
Süslü parantezde ifadeden sonra iki nokta koyup biçim belirteci yazılır. Hizalama: < sol, > sağ, ^ orta.
| Belirteç | Örnek | Çıktı |
|---|---|---|
| :.2f | f"{3.14159:.2f}" | 3.14 |
| :>10 | f"{'Py':>10}" | 8 boşluk + Py |
| :^20 | f"{'Başlık':^20}" | Ortalanmış |
| :, | f"{1234567:,}" | 1,234,567 |
| :,.2f | f"{1234.5678:,.2f}" | 1,234.57 |
| :.1% | f"{0.87:.1%}" | 87.0% |
| :10.3f | f"{3.14159:10.3f}" | Genişlik 10, 3 basamak |
kilo = float(input("Kilo (kg): "))
boy = float(input("Boy (m): "))
vki = kilo / (boy ** 2)
print(f"VKİ: {vki:.2f}")
print("-" * 25)Kendini test et!
Cevabı görmek için soruya dokun.
1.x, y = 3, 8 ve ardından x, y = y, x çalışınca x ve y ne olur?
✓ x = 8, y = 3. Sağ taraf önce hesaplanır, sonra isimlere dağıtılır.
2.17 // 5, 17 % 5, -17 // 5 ve 17 / 5 kaçtır?
✓ 3, 2, -4 (taban) ve 3.4.
3.9735 saniye kaç saat, kaç dakika, kaç saniyedir?
✓ 9735 // 3600 = 2 saat, kalan 2535; 2535 // 60 = 42 dakika, 2535 % 60 = 15 saniye.
4.s = "yapayzeka" için s[2:5] ve s[-4:] nedir?
✓ 'pay' ve 'zeka'.
5."" or "Misafir" ve "Ali" or "Misafir" ne döndürür?
✓ 'Misafir' (boş string falsy) ve 'Ali' (ilk truthy değer).
6.yas = input("Yaş: ") satırından sonra yas + 5 neden hata verir?
✓ input() string döndürür; string ile int toplanamaz (TypeError). int(input(...)) ile dönüştürmek gerekir.
Deneme testi
Sınavda çıkabilecek türden 10 soru. Bir şık seç; doğru cevap ve açıklaması hemen çıkar.
1.Aşağıdaki değişken adlarından hangisi Python'da geçersizdir?
2.a = [1, 2] ve b = [1, 2] tanımlanırsa a == b ve a is b ifadeleri sırasıyla ne döndürür?
3.print(-7 // 2) satırının çıktısı nedir?
4.print(2 ** 3 ** 2) satırının çıktısı nedir?
5.int(-3.9) ve round(2.5) ifadelerinin sonuçları sırasıyla nedir?
6.s = "Python" için s[1:4] ifadesinin sonucu nedir?
7.Aranan alt dize bulunamadığında -1 döndüren string metodu hangisidir?
8.bool("False") ifadesinin sonucu nedir?
9.kullanici = "" or "Misafir" satırından sonra kullanici değişkeninin değeri nedir?
10.print("A", "B", "C", sep="-", end="!") satırının çıktısı nedir?
Bu not ders kitabının yerine geçmez; konu kendi cümlelerimizle, yapay zekâ desteğiyle özetlendi.