Yeni başlayanlar için Python programlamayı anlatan yazı dizimizin ikinci bölümünde sayıları, aritmetik işlemlerini, ve Python’daki temel veri tiplerini (listeler, çokuzlar, dizeler, sözlükler) işliyoruz.
Bu yazıda sadece kısa ve işlevsel bir giriş yapıyoruz. Sonraki bölümlerimizde veri yapılarının kullanımından daha fazla bahsedeceğiz.
Sayılar ve aritmetik
Python’da öntanımlı (built-in) üç çeşit sayı var: Tamsayılar, reel sayılar, ve karmaşık sayılar. Reel sayılar bilgisayarda kayan nokta (floating point) biçiminde temsil edilir. Bilimsel hesaplama yapanlar için kayan nokta temsilini iyi anlamak çok mühim, ama bunu daha sonraya bırakalım.
Bu üç sayı tipiyle öntanımlı olarak yedi aritmetik işlem yapılabilir: Toplama (+
), çıkarma (-
), çarpma (*
), bölme (/
), tamsayı bölme (//
), kalan (%
), ve üs alma (**
).
2 + 3
7 - 12.4
5.25 * 6.25
25 / 8
25 // 8
25 % 8
0.5 ** 1.2
Tamsayılarda üst sınır yoktur; bellek yettiğince büyük sayılara çıkılabilir.
3**1000
Reel sayılarda ise üst sınırı aşma (overflow) problemi, başka dillerde olduğu gibi mevcuttur.
2.9**1000
Karmaşık sayıları yazarken sanal birimi 1j
veya 1J
olarak yazarız. Ayrıca fonksiyon çağrısı complex(a,b)
bize a+bj
sayısını verir.
z = 1 + 3j
z ** 2
z * 1j
z - (3 - 1.3j)
z - complex(3, -1.3)
İki farklı tipte sayı aynı işlemde kullanılırsa, hangi tip daha genelse sonuç o tipte verilir. Tamsayı ve reel sayı kullanılırsa sonuç reeldir; reel sayı ve karmaşık sayı kullanılırsa sonuç karmaşıktır.
1 + 4
1 + 4.0
1 + 4 + 0j
type(1+4), type(1+4.0), type(1+4+0j)
Değişken atamaları
Python’da değişkenlerin tiplerini (int, float, vs.) önceden beyan etmek gerekmez. Değişken isimleri, atamanın sağ tarafındaki ifadeye işaret eden bir isimdir sadece.
x = -2 # bir tamsayı
y = 3/4 * 2 # reel sayı
z = "Merhaba"+"Dünya" # dize
x,y,z
Çoklu atamalar yapmak mümkündür:
x, y, z = -2, 1.5, "Merhaba Dünya"
x,y,z
Bu usulü kullanarak iki değişkenin değerini, bir ara değişken kullanmadan değiştokuş etmek mümkün olur.
x,y = y,x
x,y
Python 3 ile değişken isimlerinde herhangi Unicode karakterleri kullanabilirsiniz.
kağıt_sayısı = 5
ölçü = 0.3
Bir değişkeni del
komutuyla bellekten silebiliriz.
del z
print(z)
İşlem öncelikleri
İşlemlerin bazıları diğerlerinden daha önce yapılır. Önceliklerde okulda öğrendiğimiz kurallar genelikle geçerlidir. Aynı ifade içinde önce üs alma, sonra çarpma, bölme ve kalan bulma işlemleri, sonra da toplama ve çıkarma işlemi yapılır. Aynı öncelik sınıfında bulunan işlemler, soldan sağa sırayla yapılır. Öncelik sırasını değiştirmek için parantez kullanılır.
2 + 3*4, (2+3)*4
4 + 3**2, (4+3)**2
3*4/2*6, 3*4/(2*6)
Öncelik sırası kavramı aritmetik işlem olsun olmasın, dildeki her türlü operatör için de geçerlidir. Tam bir liste için Python referans sayfalarına bakabilirsiniz.
Atama (=
) işlemi en düşük önceliğe sahiptir. Bir değişkene bir değer ataması yaparken önce eşit işaretinin sağ tarafının değeri hesaplanır. Değişkene değer atama işlemi en son yapılır. Python’da bir atama başka bir ifadenin parçası olamaz.
x = 1
x = 3*x + 5
x
(x=3)*x+5
Öntanımlı veri yapıları
Sayılara ek olarak, Python diline dahil birkaç öntanımlı veri yapısı var. Bunları daha sonraki bölümlerde daha ayrıntılı işleyeceğiz. Şimdilik, pratik kullanıma yetecek kadar tanıtalım.
Dizeler
Bir dize (string), karakterlerin (harf, rakam, ve diğer işaretler) birleşiminden oluşur. Tek tırnak veya çift tırnak içinde olmalıdır.
Dizenin içindeki karakterlere indeksleme işlemi []
ile erişilebilir. İndeks değerleri sıfırdan başlar; birinci karakter için 0, ikinci karakter için 1, vs. Negatif indeksler sondan başlayarak saymak için kullanılabilir: Son karakter için -1, sondan bir önceki için -2, vs. gibi.
isim = "Albert Einstein"
isim[0] # İlk karakter
isim[1] # İkinci karakter
isim[-1] # Son karakter
isim[-2] # Sondan bir önceki karakter
Çokuzlar
Bir çokuz (tuple) çeşitli nesneleri yuvarlak parantezler içinde birleştirir. Çokuz elemanlarının aynı tipten olması gerekmez. Dizelerde kullanılan indeksleme kuralları çokuzlarda da geçerlidir.
a = (3.14, 2, 'Albert', 3+4j, (7.25,-23))
a[0] # birinci eleman
a[-1][0] # Son elemanın birinci elemanı
Çokuzlar atamada kullanılırsa, her eleman birebir eşleştirilerek atama yapılır.
(x, y, z) = (-1.25, 42, "Merhaba")
x
y
z
Virgülle ayrılmış bir ifade otomatik olarak çokuza dönüştürülür, yani yukarıdaki örneği
x, y, z = -1.25, 42, "Merhaba"
şeklinde de yazabilirsiniz. Yukarıda bahsettiğimiz çoklu atama bu şekilde çalışır.
Dizelerle çokuzların ortak özellikleri değiştirilemez (immutable) olmalarıdır. Elemanlarına yeni değerler atayamazsınız.
z = "Merhaba"
z[0] = "m"
a = (1,2,3)
a[0] = -1
Listeler
Liste, köşeli parantez içinde, virgülle ayrılmış elemanları birleştiren br yapıdır. Çokuzlar gibi listelerde de elemanlar farklı tiplerde olabilir. Dizeler ve çokuzlar için geçerli olan eleman indeksleme işlemleri listelerde de aynen geçerlidir. Listelerin çokuzlardan farkı değiştirilebilir (mutable) olmalarıdır, yani elemanlarına tekrar atama yapılabilir.
liste = [5, "merhaba", (2,3,1), [-1,0,2]]
liste[0] = 4.1 # birinci elemanı değiştir
liste[-1][0] = 12 # son elemanın birinci elemanını değiştir
liste
liste[1] = "naber" # İkinci elemana başka bir dize ata.
liste
del liste[2] # Üçüncü elemanı sil
liste
Ancak, listenin bir elemanı değiştirilemez bir tipteyse, o elemanın alt elemanlarını silemez veya onlara atama yapamazsınız.
liste[1][0] = "h"
Sözlükler
Dize, çokuz, ve liste tipleri sıralı tip (sequence type) olarak anılır, çünkü birinci elemandan son elemana kadar iyi tanımlanmış bir düzenleri mevcuttur. Sözlük (dictionary) tipi ise sıralı değildir. Sözlükler, listelerin genelleştirilmiş halidir: Listelerde elemanların referanslarının sıfırdan başlayan tamsayılar olması gerekirken, sözlüklerde ise çok değişik veri tipleri her şey referans olarak kullanılabilir. Bu tür veri tipleri hash table, hash map, veya associative array olarak da bilinirler.
d = {-1.75: "merhaba", "isim":"Einstein"}
d[-1.75]
d["isim"]
d[(2,3)] = [1,2,3.14159]
d
d[-2.25] = 3 + 5j
d[1+2j] = 42
d["isim"] = "Eisenstein"
d
del d["isim"]
d
Sözlük yaratırken süslü parantezler {}
kullanırız. Sözlük elemanlarına ise, çokuzlar ve listelerdeki gibi, köşeli parantez içinde referans değerini yazarak erişiriz. Yeni referans değerlerine sahip sözlük elementleri yaratabilir, istemediğimiz elemanları del
komutuyla silebiliriz.
Sözlüklerde referans olarak sadece değiştirilemez tipler kullanılabilir (sayılar, dizeler, çokuzlar). Listeler kullanılamaz.
d[ [1,2,3] ] = 5
Emekleriniz için teşekkürler. Küçük bir düzeltme yapayım:
“Ancak, listenin bir elemanı değiştirilemez bir tipteyse…” ile başlayan yerde verilen örnekten önce, liste içindeki tuple türündeki eleman silinmiş ve artık ikinci eleman “liste” olduğundan değişiklik yapılabilmiş. Yine bu yüzden hata mesajı çıkmamış. Örnekten hemen önce, içinde tuple olacak biçimde liste tekrar tanımlanırsa sorun çözülebilir ve istenen hata mesajı alınabilir.
Ya da “2” yerine “1” yazılabilir elbette.
Haklısınız, gözümden kaçmış, düzelttim. Teşekkür ederim bildirdiğiniz için.
Teşekkürler