Bu derste python veri tiplerine giriş yapıyoruz. Önceki derste name ve value kavramlarını anlamıştık, bir değişken tanımlarken bir isime bir değer ataması yaparız. Değer dediğimiz şeyler birer veridir aslında, bu verilerin de farklı çeşitleri vardır.
Bir veri üzerinde halihazırda tanımlı işlemlerin nasıl çıktılar üreteceği tamamen verinin tipine göre belirlidir. Bir önceki derste gördüğümüz gibi 2
ve "2"
verilerinde çarpma işlemi farklı sonuçlar üretir, bunlardan birisi integer diğeri ise string veridir.
Yazdırılabilir karakterlerin sıralanarak oluşturduğu verilere string tipi veriler denir. Tırnak işaretleri içine yazılan veriler (tek veya çift tırnak olabilir) python tarafından string veri tipi olarak değerlendirilir.
string1 = 'Merhaba dünya..'
string2 = "Merhaba dünya.."
Pythonda bir değişkenin tipini öğrenmek için type()
komutunu kullanırız.
type(string1)
String verileri genelde yazdırma amaçlı kullanırız, nasıl yazdırabileceğimize bakalım. print ifadesini kullanacağız.
print string1
Tek bir print ifadesi içinde birden fazla string tipi veriyi yazdırabiliriz, bunun farklı yolları var. Birincisi print içerisinde string verileri virgülle ayrılmış olarak sıralayabiliriz.
string3 = "Merhaba"
string4 = "dünya"
print string3, string4
Başka bir örnek verelim, stringler illa değişken olarak önceden tanımlanmış olmak zorunda değil. Print ifadesi içinde doğrudan yazılabilir.
print string3, "yalan", string4,".."
Bu yöntemin bir sıkıntısı var, stringlerin arasına otomatik olarak bir boşluk ekliyor. Bazen bunu istemeyiz, yukarıdaki durumda olduğu gibi.
Böyle durumlarda başka bir yöntemi kullanabiliriz, mesela string toplama. Toplama ikili işlemi stringler üzerinde uygulandığında iki stringi yanyana ekleyerek yeni bir string çıktı üretir.
print string3 + "yalan" + string4 + ".."
Gördüğünüz gibi gereksiz boşluk yok bu yöntemle, gerekli yerlere kendimiz boşluk ekleyebiliriz.
print string3 + " yalan " + string4 + ".."
String verilerini biçimlendirmede en kullanışlı yöntemlerden biri de aşağıdaki örnekte gösterilmektedir.
print "%s yalan dünya.." % string3
Buradaki %s
ifadesine bir biçimleyici (formatter) denir, bulunduğu yere satır sonunda belirtilen string tipi veriyi yazdırır.
Bu yöntemle birden fazla string değişkeni kullanılacaksa parantez kullanılmalıdır, aşağıdaki gibi.
print "%s yalan %s.." % (string3, string4)
String verilerde bazen bir karakterden fazla boşluk bırakmak, bir alt satıra geçmek, bazı özel karakterler yazmak gibi ihtiyaçlarımız olabilir. Bunları kaçış (escape) karakterleri denilen komutlarla yaparız.
Aşağıdaki örnekte dört karakter boşluk (tab boşluğu) eklemek için \t
, bir alt satıra geçmek için \n
, ve "
karakterini yazdırmak için \"
kaçış karakterlerini kullandık. Bunların dışındaki kaçış karakterlerini raştırıp öğrenin.
gunler = "Pts, Sl, Çrş, Prş, Cm, Cts, Pz"
aylar = "\nOcak\nŞubat\nMart\nNisan\nMayıs\nHaziran"
print "Haftanın günleri:", gunler
print "Bir yarım yıldaki aylar:", aylar
print """
Diğer yarım yıldaki aylar ise
Temmuz, Ağustos, Eylül,
Ekim, Kasım ve Aralık'tır.
"""
#bir liste yazdıralım
print """ \t *İlkbahar
\t *Yaz
\t *Sonbahar
\t *Kış
"""
#özel karakterler için
print "3'21\" ifadesi \nÜç Dakika yirmi bir Saniye \nolarak okunur."
Bu örnekte yeni birşey daha gördük, birden fazla satırdan oluşan string verilerini nasıl tek print ifadesi ile yazdıracağımızı. Gördüğümüz gibi bunun için ardışık üç tane tırnak işareti kullanırız.
Python nesne yönelimli bir programlama dilidir, pythonda herşey bir nesnedir, stringler de. OOP konusuna geçince bunlar daha iyi anlaşılacak, ama şimdilik her nesne üzerinde tanımlı işlemler ve fonksiyonlar var demekle yetinelim. Bunlara metod diyoruz.
Bir nesne üzerinde tanımlı bir metodu kullanmak için nesne.metod()
gibi bir komut kullanırız, örneğin string verileri üzerinde tanımlı bir upper
metodu vardır, bu metod bir stringi büyük harfle yeniden tanımlar.
print string3.upper()
Bir nesne üzerinde kullanılabilir metodları dir
komutuyla öğrenebiliriz. Aşağıda gördüğünüz gibi bir string veri için çok sayıda metod var, bunların ne işe yaradığı üzerinde durmayacağız. Hepsini araştırıp ne işe yaradığını öğrenin, gerektiği durumlar olacak ileride.
dir(string3)
Pythonda bir komut için yardım bilgisi (docstring) görüntülemek için help(komut)
komutu kullanılabilir, Jupyter notebook ile bir komut hakkında yardım bilgisini görüntülemek için sonuna bir soru işareti eklemek yeterli.
help(string3.swapcase)
string verileri karakterlerin sıralanmasıyla oluşturulur demiştik, string veriyi bir sayı dizisi gibi düşünüsek bu karakterlerin string verinin terimleri olur. Sayı dizilerinde olduğu gibi her terimin bir indisi vardır, fakat 1 ile değil 0 ile başlar. Yani string[0]
komutu stringin ilk karakterini verir.
print string1
print string1[0]
print string1[1]
print string1[2]
print string1[3]
İndisler yardımıyla tek bir karakter yerine ardışık karakter dizilerini de elde edebiliriz, köşeli parantezler içinde iki nokta üst üste kullanarak yaparız bunu. Bu işleme dilimleme denir.
print string1[3:8]
print string1[5:]
print string1[:13]
Pythonda indisleme iki türlüdür; baştan sonra, ya da sondan başa doğru. Yukarıdaki örnekler baştan sona indisleme ile ilgiliydi.
print string3
print string3[-1]
print string3[-2]
print string3[-3]
print string3[-4]
print string3[-5]
print string3[-6]
print string3[-7]
Bu durumda dilimleme de benzer şekilde yapılır.
print string4
print string4[-5:-1]
print string4[-3:]
print string4[:-2]
Üzerinde aritmetik işlemler yapılabilen sayılar için integer ve float veri tiplerinden faydalanırız. Trınak işareti kullanmadan bir sayı python tarafından integer olarak algılanır. Ondalıklı sayılar pythonda float veri tipi olatak adlandırılır, tanımlamak için virgül değil nokta kullanırız.
veri1 = 5
veri2 = 3.5
Yukarıda tanımladığımız değişkenlerden ilki bir integer, ikincisi ise bir float verisidir.
type(veri1)
type(veri2)
Integer veya float olarak tanımlanmış bir veriyi str()
komutuyla string tipine çevirebiliriz. int()
komutu da bunun tam tersini yapar, string tipindeki bir veriyi integer tipine dönüştürür, eğer mümkünse.
Aşağıdaki örneği inceleyin, bu örnekte yeni birşeyler göreceksiniz, boş satırlar. Python program kodlarında boş satırların bir anlamı yoktur, kolay okumak için kodlarınız arasına boş satırlar koyabilirsiniz. Yalnız dikkat edin; tüm satırın boş olması anlamsızdır ama belirli sayıda boşluk (tab gibi) python için anlamlıdır, gerekmedikçe kullanmayın.
a = 2
b = 0
c = 9
d = str(a) + 2*str(b) + str(c)
print d, "yazarken de iki", b, "var."
print c, "un yanındaakii", b, "solda", b, ", sildiniz. Kaldı mı", c, "?"
print a, "nin yanında bir", b, "var, onu da sildiniz. Kaldı mı", a, "?"
print "Toplayın ne yapar?", a+c, "yapar."
print d, "un içerisindeki iki", b, "ı da sildiniz. Ne kaldı?"
print str(a) + str (c), "kaldı."
print a + c, "ile", str(a) + str(c), "u toplayın", a + c + int(str(a) + str(c)), "yapar."
Integer ve float ile aritmetik işlemler yaparken şuna dikkat etmeliyiz, iki integerin bölümü pythonda bir integer sonuç döndürür. Bu durum python 3x versiyonlarında böyle değildir, dikkat etin.
Aşağıdaki örneği uygulayın, ayrıca toplama ve çarpma dışında pythonda tanımlı olan aritmetik işlemleri araştırıp öğrenin.
nufus = 125
tavuk = 220
gunluk_toplam_yumurta = 143
gunluk_yumurta_orani = float(gunluk_toplam_yumurta) / tavuk
print "Köyümüzde", nufus, "insan ve", tavuk, "tavuk yaşamaktadır."
print "Günde toplam", gunluk_toplam_yumurta, "kadar yumurta alıyoruz."
print "Dolayısıyla bir tavuk günde ortalama", gunluk_yumurta_orani, "yumurta veriyor."
print "Diğer yandan kişi başına", nufus / tavuk, "tane tavuk düşüyor."
print "Sonuç olarak kişi başına günde", (nufus / tavuk) * gunluk_yumurta_orani, "düşer."
print "Bu işte bir yanlışlık var, bir de şöyle deneyelim"
#ipucu: nufus ve tavuk değişkenleri integer, dikkat et!!
print "Diğer yandan kişi başına", float(nufus) / float(tavuk), "tane tavuk düşüyor."
print "Yani kelle başı", (float(nufus) / float(tavuk)) * gunluk_yumurta_orani, "yumurta!"
Örnekte gördüğümüz gibi bir integer verisini float()
komutuyla float tipine dönüştürebiliriz. Bunun yerine nüfus değerini 125 yerine 125.0 olarak tanımlayabiliriz, böylece bir integeri float verisi olarak kayıt etmiş oluruz.
nufus_yeni = 125.0
type(nufus_yeni)
Daha önce gördüğümüz %s
string biçimleyiciye benzer şekilde %d
ve %f
biçimleyiciler de vardır, aşağıdaki örneği inceleyin.
isim = 'Süleyman'
soyisim = 'Öğrekçi'
yas = 32
boy = 170 #santimetre cinsinden
kilo = 68 #kilogram cinsinden
print "Merhaba, benim adım %s." % isim
print "Ad-Soyad: %s %s." % (isim, soyisim)
print "%d yaşındayım." % yas
print "Boyum %d cm, kilom ise %d kg." % (boy, kilo)
#VKİ = kilo / boy^2 olarak hesaplanır.
print "Vücut kitle indeksim de %f oluyor." % (float(kilo) / (float(boy)/100) ** 2)
print "." * 20 #bu kullanıma dikkat et
yanlisbilgi1 = "Bir %s için VKİ" % 'Erkek'
yanlisbilgi2 = "%d ile %d arasında olmalıdır." % (20, 25)
yalan1 = "%d yaşında bir %s olan" % (yas, 'Erkek')
yalan2 = "%s %s gayet sağlıklı bir insandır." #Bu haliyle biraz eksik gibi sanki
print yanlisbilgi1, yanlisbilgi2
print yalan1, yalan2 % (isim, soyisim) #Burada eksikler tamamlandı
Yazdığımız programlarda sıklıkla kullanıcıdan bazı değerleri girmesini isteriz, bunun için pythonda raw_input()
komutu vardır. Bu komut kullanıcı girişini bir string olarak değerlendirir.
giris1 = raw_input("Birşeyler yaz:")
print "Yazdığın şey \"%s\". " % giris1
print "Bana göre bu verinin tipi aşağıdaki gibi:"
type(giris1)
Daha önce gördüğümüz yöntemlerle bu stringi integer veya float tipine dönüştürebilir ve sonra istediğimiz işlemleri yapabiliriz. Aşağıdaki örneği inceleyin.
isim = raw_input("İsim:")
soyisim = raw_input("Soy İsim:")
yas = int(raw_input("Yaş:"))
boy = int(raw_input("Boy:")) #santimetre cinsinden
kilo = int(raw_input("Kilo:")) #kilogram cinsinden
print "Merhaba, benim adım %s." % isim
print "Ad-Soyad: %s %s." % (isim, soyisim)
print "%d yaşındayım." % yas
print "Boyum %d cm, kilom ise %d kg." % (boy, kilo)
#VKİ = kilo / boy^2 olarak hesaplanır.
print "Vücut kitle indeksim de %f oluyor." % (float(kilo) / (float(boy)/100) ** 2)