Python objeleri ve veri yapıları

Karakter Dizileri

Artık Python’da ilk kodumuzu yazmaya hazırız. Yeni bir programlama dili öğrenmeden önce o dilde önce ekrana merhaba dünya yazdırılır. Bu bir gelenektir. Bizde bu geleneği bozmayalım ve Python ile merhaba dünya yazısını ekrana bastıralım

print("Merhaba Dünya")

Konuyu anlatmaya geçmeden önce küçük bir duyuru yapmak istiyorum. Biz bu eğitim serisini hiç programlama bilmeyen birisinin anlayacağı düzeyde anlatacağız. Eğer bu konuları bildiğini iddia ediyorsan bir sonraki dersleri takip edebilirsin. Lakin bizim tavsiyemiz programlama biliyor olsanız dahi bu eğitimi baştan sona kadar düzenli okumanızdır. Olur da belki bilmediğiniz bir şeyler çıkabilir.

Öncelikle karakter dizilerinin ne olduğunu anlayalım. Bir veya birden fazla karakterin bir araya gelmesiyle oluşan yapılara karakter dizileri denir. Örneğin ;

"Python Öğreniyorum"

Ne demiştik, bir veya birden fazla karakterin bir araya gelmesiyle oluşan yapılara string yani karakter dizileri denir.

"P"

Aynı şekilde yukarıdaki ifade de bir string’dir.

"123456"

Dikkat! yukarıdaki ifadenin içinde rakam var. O zaman bu bir string ifade değil midir diyeceğiz. Tabi ki de hayır. Tırnak işaretleri(“”) arasına yazılan her şey karakter dizisi yani string ifade olarak anılır. Bu yüzden tırnakların arasına neyin yazıldığı bizi ilgilendirmez. Dolayısıyla artık şöyle bir yorum yapabiliriz sanırım. string ifadeler matematik işlemlere tabi tutulamazlar.

""

Mesela bu içinde herhangi bir karakter olmayan içi boş bir karakter dizisi

" "

Bu ise içinde boşluk karakteri olan bir karakter dizisi. Bir önceki karakter dizi içinde herhangi bir karakter yoktu. Bunun içinde ise bir boşluk karakteri var. Yani ikisi aynı şey değil. Dolayısıyla bunları ekrana yazdıracağımız zaman ilkinde ekrana hiç bir şey yazmazken ikincisinde ise ekrana bir boşluk karakteri yazılacaktır. Şimdi size bu anlattıklarım size çok basit geliyor olabilir ama sakın öyle düşünmeyin. Bu işi en temelinden öğrenmemiz lazım.

Karakter dizileri iki tırnak arasına yazılır. Tabi isterseniz tek tırnak ya da üç tırnak arasına da yazabilirsiniz ama diğerlerini şimdilik işin içine karıştırmıyorum ki kafanız karışmasın. Diğer ikisinin kullanımına daha sonra bakarız.

İstersek print() fonksiyonuyla karakter dizilerini ekrana bastırabiliriz. Bu fonksiyonu sonraki derslerimizde anlatacağız, şimdilik print() fonksiyonunun girilen argümanları ekrana yazdıran bir fonksiyon olarak bilmeniz yeterlidir.

print("Python öğreniyorum")
python öğreniyorum

Bu kodu Spyder kod editörümüze yazıp çalıştırdığımızda consolda python öğreniyorum yazısını görebilirsiniz. Bundan sonra yazdığımız bazı kodların sonucunu anlık olarak görebilmemiz için print() fonksiyonuyla ekrana bastıracağız.

Biz yukarıdaki verilere karakter dizisi dedik. Peki bir verinin karakter dizisi olup olmadığına nasıl karar vereceğiz. Az önce dedik ki iki tırnak arasına yazılan şeyler karakter dizisidir. Ama yinede biz type() fonksiyonuyla bir verinin tipinin ne olduğunu öğrenebiliriz.

print(type("python öğreniyorum"))
<class 'str'>

Gördüğünüz gibi sonuç str yani string olarak ekrana yazdırıldı. İşte buda bize kanıtlıyor ki iki tırnak arasına yazılan veriler karakter dizisidir. Buraya kadar her şeyi anladığımızı varsayıyorum. O zaman konuyu biraz daha ilerletebiliriz.

+ operatörü ile iki ya da daha fazla string ifadeyi birleştirebiliriz.

"python"+"öğreniyorum"

Yukarıda iki tane string ifade var ama aralarında + operatörü var. Bu yüzden artık yukarıdaki ifade birleşmiştir ve tek bir ifade haline gelmiştir. Şimdi bunu ekrana yazdırarak sonucu görelim.

print("python"+"öğreniyorum")
pythonöğreniyorum

Gördüğünüz gibi iki tane string ifadeyi birleştirip ekrana yazdırdık ve print() fonksiyonuyla ekrana yazdırdık.

Karakter dizilerini + operatörü ile birleştirdik. Bunun yanında *(çarpı) işaretini de kullanabiliriz. Bunu hemen bir örnek üzerinden görelim.

print(3*"mehmet")
mehmetmehmetmehmet

Eğer çıktıya bakarsanız kodun ne işe yaradığını elbette anlarsınız. Bir karakter dizisini herhangi bir sayı ile çarparsanız o karakter dizisini çarptığınız sayı dizisi kadar çoğaltmış olursunuz. Makalemizin başlarında da dediğimiz gibi string ifadelerle matematik işlemler yapılamaz. Yani bir string ifadeyi her hangi bir sayı ile çarparsanız ancak yukarıdaki gibi bir sonuç alırsınız.

Peki biz karakter dizilerini Python’da bu şekilde mi kullanacağız. Tabi ki de bu şeklide bir kullanım söz konusu değil. Karakter dizilerini değişkenlerle beraber kullanacağız.

Karakter dizilerinin her bir elemanı indis numaraları ile numaralandırmıştır. Örnek üzerinden açıklamak daha mantıklı olacaktır.

isim="mehmet"
print(isim[0])
m

isim[0] kodu bize m harfini getirdi.

isim="mehmet"
print(isim[1])
e

isim[1] kodu ise bize e harfini getirdi. O zaman şunu kesin söyleyebiliriz. Bir karakter dizisinin her bir karakteri sırasıyla 0’dan başlayarak numaralandırılıyor. Aynı şey listeler içinde geçerlidir ama biz daha listeleri görmedik.

isim="mehmet"
for i in isim:
    print(i)

Bu kodu sizde deneyerek isim değişkenin her bir karakterinin alt alta yazıldığını göreceksiniz. Karakter dizilerini ayrı bir bölüm olarak işleyeceğimiz için şimdilik bu kadarlık bilgi yeterlidir.

Sayılar

Karakter dizilerini anladığımıza göre şimdi de sayı veri tipine bakalım. Ne demiştik: karakter dizileri ile matematik işlemler yapılamaz. Matematik işlemler yapmamız için sayılara ihtiyacımız. Karakter dizilerinin diğer adı hatırlarsanız string demiştik. Sayı veri tiplerinin adına ise int diyoruz.

Eğer ilkokulu bitirdiyseniz sayıların ne olduğunu bilirsiniz. 🙂

print(3+5)
8
print(10-5)
5
print(3*5)
15
print(10/3)
3.3333333333333335

Bu örnek de sayılarla bazı işlemler yapıp sonuçları ekrana yazdırdık. En son ekranda 10 sayısını 3 sayısına böldük ve sizinde gördüğünüz gibi sonuç ondalıklı bir sayı çıktı. İşte biz bu sayılara da float diyeceğiz. Tam sayılara ise int diyecektik hatırlayın. Sayılarda toplama, çıkarma, çarpma ve bölmenin nasıl yapıldığını bildiğinizi varsayarak konuya devam ediyoruz.

print(type(5))
<class 'int'>

type() metoduyla bir verinin tipini belirliyorduk. Gördüğünüz gibi 5 sayısının tipine baktığımızda int tipini görüyoruz ekranda. Çünkü 5 sayısı bir tam sayı.

print(type(5.2))
<class 'float'>

Bu seferde type() metoduyla 5.2 sayısının tipine baktık ve Python bize float sonucunu veriyor. Çünkü 5.2 ondalıklı bir sayıdır ve biz dedik ki ondalıklı sayılar float tipiyle anılırlar.

print(10+"10")

TypeError: unsupported operand type(s) for +: 'int' and 'str'

yukarıdaki kodu çalıştırdığımızda gördüğünüz gibi TypeError hatası alıyoruz. Peki biz ne yaptık da Python bize bu hatayı verdi. Yazımızın ilk başında ne demiştik ? string ifadeler matematik işlemlere tabi tutulamazlar birinci 10 değeri int tipinde ama ikinci 10 değeri string tipinde bu yüzden int tipi ile string tipi toplamaya çalıştık ve hatayı aldık.

Değişkenler

Şimdi ye kadar 3 tane veri tipi gördük. Bunlar int, string ve float. Bunların ne işe yaradığını artık biliyorsunuz. Diğer veri tiplerini ilerleyen zamanlarda ayrı başlıklar altında inceleyeceğiz. Şimdi de biraz değişkenlerden bahsedelim. Değişkenler geçici veri tutucularıdır. Değişkenleri anlayabilmemiz için ram belleği bilmemiz lazım. Ram bellek; bilgisayarda elektrik olduğu sürece üzerinde veri tutabilen ama elektriği kestiğimiz zaman üzerindeki verileri kaybeden geçici hafızadır. Değişkenlere veri atadığımız zaman bu veriye ram hafızasında bir adres verilir.

degisken_adi="Python öğreniyorum"

Değişken tanımlarken önce değişken adı sonrada = operatörü ile değişkenin değerini yazıyoruz. Yukarıda degisken_adi adında bir değişken oluşturduk ve içine string tipinde bir veri yerleştirdik. Artık bu veri ram bellek belli bir adreste bir alanı işgal etmiş durumda. Dilediğimiz zamanda bu veriyi ram hafızasından çekip kullanabiliriz.

isim="mehmet"
soyisim="tanrıverdi"
print(isim,soyisim)
mehmet tanrıverdi

Yukarıda gördüğünüz gibi isim ve soyisim adında iki tane değişken oluşturdum ve bu değişkenler string tipinde iki veri atadım. Bu veriler ram hafızasında saklanıyor. Hatta bu verilerin ram hafızasında olduğunu teyit etmek için şu kodu yazıp deneyebilirsiniz.

isim="mehmet"
soyisim="tanrıverdi"
print(id(isim))
print(id(soyisim))

2569458591928
2569458828080

Yukarıdaki rakamlar değişkenlerin Ram hafızasındaki işgal edilen adresler. Bunu id() metodunu kullanarak yaptık. Bu metoda ilerleyen derslerimizde bir daha değineceğiz. Şimdiden dert etmeyin kendinize.

Değişkenleri kullanırken istediğimiz gibi özgür değiliz. Elbetteki bazı kuralları olacak bu işin. Değişken tanımlarken aşağıdaki kurallara dikkat etmemiz gerekiyor.

  • Bir değişkende -/?*+&%$^”(){} vb karakterleri kullanılamaz.
  • Bir değişkenin ilk karakteri sayı ile başlayamaz. Ama sonunda yada ortasında kullanılabilir.
  • Değişken isimleri aynı olamaz. Yani 2 değişkeniniz varsa ikisi aynı isimde olamaz.
  • Değişken isimlerinde büyük küçük harf duyarlılığı vardır. Yani isim ile İsim değişkenleri aynı değil ayrıdır.
  • Değişken kullanımlarında yukarıdaki karakterleri kullanamıyoruz ama _ karakterini kullanabiliriz.
1sayi=10  #hatalı kullanım
%sayi=9   #hatalı kullanım
+sayi=8   #hatalı kullanım
/sayi=7   #hatalı kullanım
(sayi=6   #hatalı kullanım
 %sayi=5  #hatalı kullanım
 &sayi=4  #hatalı kullanım

Yukarıdaki gibi değişken tanımlarsanız hata alacağınızdan emin olabilirsiniz. Ama _ karakterini kullanabilirsiniz.

isim="mehmet"
İsim="yusuf"
print(isim)
print(İsim)
mehmet
yusuf

Yukarıda isim adında 2 tane değişken tanımladık ama dikkat edin bir tanesinin ilk harfi büyük. Bu yüzden ikisi aynı değişkenler değil farklı değişkenlerdir.

a="mehmet"
print("Hoş geldiniz",a,"bey")
Hoş geldiniz mehmet bey

Değişkenleri bir kere tanımladıktan sonra artık istediğimiz her yerde kullanabiliriz.

a=10
print(a)
a="Python"
print(a)
10
Python

Bir değişkenin değerini istediğimiz zaman değiştirebiliriz. Python’un diğer dillerden farkı değişkenin veri tipini de değiştirebiliyor olmamızdır. Yani hem değişkenin değerini hem de değişkenin tipini değiştirebiliyoruz. Yukarıda gördüğünüz gibi a değişkeni önce int tipinde ve 10 değerini tutuyor daha sonra herhangi bir dönüştürmeye tabi tutmadan string bir ifadeyi a değişkenine atadık.

Değişkenlere değer atamak için = operatörünü kullanıyoruz.

x=20
x=x+10
print(x)
30

x değişkenine önce 20 değerini verdik. Sağdaki soldakine atanır her zaman. 2. satırda x=x+10 dedik yani x değişkeni 10 daha ekledik ve tekrar x’e atadık. x’in değeri zaten 20 idi 10 daha ekleyince değeri 30 oldu. İşte bu kadar basit. 🙂

a="Python"
print(type(a))
a=10
print(type(a))
a=10.5
print(type(a))
<class 'str'>
<class 'int'>
<class 'float'>

type() metoduyla verilerin tiplerini öğrenebileceğimizi biliyorsunuz. a değişkenine önce string bir değer atadık, sonra int bir değer atadık sonra ise float bir değer atadık. Biz bu atmayı her yaptığımızda Python arka planda bu değişkenlerin tipini değiştiriyor.

Değişkenler konusu da bu kadar arkadaşlarım. Diğer başlıklarla konumuza devam edelim.

Veri Tipi Dönüşümleri

Veri tipi dönüşümleri her programlama dilinde kaçınılmaz bir külfettir. Ama diğer programlama dillerine nazaran Python bunu çok basit bir şeklide yapabilmektedir. Hemen bir örnek yaparak başlayalım.

x="10"
print(2*x)
1010

Bu kodun çıktısını 1010 olarak gördük. Çünkü string veri tipiyle matematiksel işlemler yapamıyorduk. string bir veri tipiyle matematiksel işlemler yapmadan önce mutlaka bu veriyi dönüştürmemiz gerekiyor.

x="10"
x=int(x)
print(2*x)
20

Gördüğünüz gibi sonuç bu sefer 20 oldu yani tamda bizim istediğimiz sonuç.

x="10.6"
x=float(x)
print(2*x)
21.2

x’in değeri olan 10.6 yı float tipine dönüştürdük ve 2 ile çarptık. Buraya kadar bir sıkıntı yok. Dönüştüreceğimiz verinin dönüştüreceğimiz tip ile uyuşması lazım yoksa hata ile karşılaşırız.

x="1a2"
x=int(x)
print(2*x)
ValueError: invalid literal for int() with base 10: '1a2'

x değişkenin değeri int tipine dönüştürülemez. Çünkü x’in değerinde yani 1 ile 2 nin arasında ‘a’ karakteri var. int tipi ise sadece sayıları kabul eden bir veri tip olduğu için bu veriyi int tipine dönüştürürken hata aldık. Aynı şekilde bu veriyi float tipine de dönüştüremeyiz.

x=10
y=5
x=str(x)
y=float(y)
print(type(x),x)
print(type(y),y)
<class 'str'> 10
<class 'float'> 5.0

Gördüğünüz gibi x in değeri int iken string’e y’nin değeri de int iken float tipine dönüştürüldü. İşte veri tipi dönüşümlerini de bu şekilde yapıyoruz. Konuyu daha kavramanız için mutlaka bol bol örnek yapmanız gerekiyor. Yoksa bu dersi okumayı bıraktığınız gibi unutabilirsiniz.

Yorum yapın