Python ile Programlamaya Giris Ders 4 Veri Tipleri Arasinda Dönüsüm Asagida iki farkli veri tipi, int ve str, gösteriliyor. >>> 3 3 >>> '3' '3' >>> Ilk girilen sayi 3 bir tamsayi iken ikinci girilen sayi tirnak içerisinde oldugundan bir tamsayi degeri degil, bir string degeridir. Görmüs oldugumuz int, float ve str veri tipleri arasinda Python ile dönüsüm yapmak mümkün. Bir tamsayi veya virgüllü sayi degerini str veri tipine dönüstürmek için str fonksiyonunu kullaniriz. >>> str(3) '3' >>> str(1.2) '1.2' Asagidaki örnekte str fonksiyonu kullanilarak bir tamsayi degeri str veri tipine dönüstürülmüs. >>> x = str('5') >>> x * 5 '55555' str fonksiyonu bir str veri tipi verdiginden x * 5 islemindeki x
degiskeni str veri tipindendir. Bu yüzdünden islemin sonucu 25 degil, 5 tane 5 string'inin yanyana yazilmasiyla sonuclanmistir. Bir str veri tipi int fonksiyonu ile tamsayiya çevrilebilir. >>> int('3') 3 int fonksiyonu int veri tipine dönüstürür. >>> int('5') * 3 15 Eger int fonksiyonuna parametre olarak verilen str degeri bir tamsayiya dönüstürülemezse Python hata verir. Ayni sekilde str tipini virgüllü sayiya dönüstürmek için float fonksiyonu kullanilir. >>> float('1.23') 1.23 float fonksiyonu verilen deger bir sayiya çevrilebildigi sürece herzaman bir float veri tipi verir. Asagidaki örnekte tirnak içinde str olarak verilen deger bir tamsayi olsada sonucu float tipindendir ve virgüllü sayidir. >>> float('4') 4.0 Alistirma: float(str(45)) degeri nedir? str(int('99')) == '99' hangi sonucu verir? Bu dönüsümler Python'da çok kullanilir ve çok önemlidir. Mesela daha önce görmüs oldugumuz str veri tipi üzerinde toplama islemi str + int için geçerli degildi. Bu durumda yapmak istedigimiz isleme göre int'i str tipine veya str'i int tipine dönüstürebiliriz. >>> "Notunuz: " + str(100) 'Notunuz: 100'
Asagidaki gibi bir degiskenin tipi int olabilir. >>> x = 98 >>> "Notunuz: " + str(x) 'Notunuz: 98' Veya tam tersine bir str degerini int veya float degerine dönüstürmek isteyebiliriz. >>> int('3') + 5 8 Mesela input fonksiyonu herzaman str tipinden bir deger verir. >>> s = input("bir sayi giriniz: ") Bir sayi giriniz: 3 >>> print("iki kati", 2 * int(s)) Iki kati 6 Yukaridaki örnekte s degiskenini int fonksiyonu ile tamsayiya çevirip islem yaptigimizi farkettiniz mi? String Veri Tipi Üzerinde Islemler Daha önce str veri tipi üzerinde toplama ve çarpma islemlerini görmüstük. Toplama, iki str degerini yanyana birlestiriyor, çarpma ise verilen sayi kadar str degerini yanyana birlestiriyor. Simdi str ile yapilabilecek farkli islemler görecegiz. Karsilatirma Operatörleri Sayilar için gördügümüz karsilastirma operatörleri str için de kullaniliyor.
Kiyaslama Örnek Açiklama Esittir == "cat"=="abcd" Iki str esitse True degilse False Esit degildir!= "cat"!="abds" Iki str esitse False degilse True Küçüktür < "abc"<"abd" Büyüktür > "abc">"abd" Alfabedeki harf sirasina göre kiyaslama. Ilk farkli deger solda alfabede daha önce gelirse True yoksa False Alfabedeki harf sirasina göre kiyaslama. Ilk farkli deger solda alfabede daha sonra gelirse True yoksa False Küçük esittir Büyük esittir <= "abc"<="abd" Esittir ve küçüktürün birlesimi >= "abc">="abd" Esittir ve büyüktürün birlesimi Içinde in "bc" in "abcd" Soldaki str degeri sagdaki str degerinin içinde bulunursa True bulunamazsa False (Programlamada küçük harfler her zaman büyük harflerden önce gelir.) Burada in adahtar kelimesiyle ilk defa karsilasiyoruz. Aradigimiz bir karakter dizisinin baska bir karakter dizisinde bulunup bulunmadigini in ile kolayca tespit edebiliriz. Asagidaki örnek bir amino asit dizisinde belli bir amino asit üçlüsünün bulunup bulunmadigini tespit ediyor.
>>> fasta = "IKDLLVSSSTDLDTTLVLVNAIYFKGMWKTAFNAEDTREMP" >>> "DLL" in fasta True >>> "LDL" in fasta False Verilen dizi ayni sirada olmali. Mesela "zoo" in "ooze" sonucu False olur. str Uzunlugu str uzunlugu bir str degerindeki karakter sayisidir. str degerinin uzunlugunu bulmak için len fonksiyonu kulanilir. >>> len("aac") 3 >>> len("abadef") 6 Alistirma: len("merhaba" + 3*"abc") ifadesinin ve len("abc")*3 ifadesinin sonuclari nedir? str Indeksleme Her str degerleri bir karakter dizisidir. Dizideki karakterlere tek tek ulasmak için [] operatörü kullanilir. >>> s = "Ali top at" >>> s[4] 't' [ ] köseli parantezlerin içine str degerinin kaçinci karakterine ulasmak istedigimizi yazariz. Yazdigimiz degere indeks diyecegiz. indeks sifirdan baslar ve birer birer artar. Buna göre Ali top at ifadesinin indexleri asagidaki gibi olur.
0 1 2 3 4 5 6 7 8 9 A l i t o p a t s degiskeninin altinci elemanina indeks 5 ile ulasilir. >>> s[5] 'o' Python ile sondan basa dogru indekleme de yapilabilir. Bu durumda negatif sayilar kullanilir. 0 1 2 3 4 5 6 7 8 9 A l i t o p a t -10-9 -8-7 -6-5 -4-3 -2-1 En sondaki elemana -1 ile ulasilir ve basa dogru birer birer eksilir. Mesela s degiskenindeki sondan dördüncü elemanina indeks -4 ile ulasilir. >>> s[-4] 'p' Eger verilen indeks str verisinin sinirlarinin disina çikarsa, mesela 15 veya -50 gibi, Python hata verir. str Bölme Indeksleme ile str degerinin bir elemanina, yani bir karakterine, ulasabiliyoruz. Birden fazla elemanina ulasmak için str degerini yine [ ] operatörü ve : ile bölebiliriz. : sembolünün sol tarafina baslangiç indeksi, sag tarafina ise bitirme indeksi kullanilir. Baslangiç indeksi sonuca dahildir, bitirme indeksi degildir.
>>> s[4:7] 'top' s degiskenindeki str degerinin ilk üç harfine ulasmak için 0 ve 3 kullanilir. >>> s[0:3] 'Ali' Sifir ile baslayan bölmelerde sifir yazilmak zorunda degildir. >>> s[:3] 'Ali' Bir str degerinin besinci elemanindan sonuncu elemanina kadar olan bölümü istiyorsak : operatörünün sag tarafina tabi ki str degerinin uzunlugu yazilmalidir. >>> s[4:len(s)] 'top at' Besinci elemanindan baslamak için 4 indeksini kullandigimizi farkettiniz mi? Eger bir str degerinin son elemanina kadar olan bölümünü istiyorsak : operatörünün sag tarafini bos birakabiliriz. Asagidaki örnek yukaridaki ile ayni sonucu verir. >>> s[4:] 'top at' Bölme islemi için negatif indeksler de kullanilabilir. Mesela besinci elemanindan baslayip sondan üçüncü elemanina kadar (sondan üçüncü dahil degil) bulmak istiyorsak asagidaki gibi 4 ve -3 indeksini kullanabiliriz. >>> s[4:-3] 'top' str Degiskenleri Degistirilemez Pyhon'da str degiskenlerinin degerleri asla degistirilemez. Mesela asagindaki
ifade yanlistir. >>> s[0] = 'F' Traceback (most recent call last): File "<pyshell#60>", line 1, in <module> s[0] = 'F' TypeError: 'str' object does not support item assignment Ayni sekilde str degerinin bir bölümü dahi degistirilemez. >>> s[4:-3] = "ip" Traceback (most recent call last): File "<pyshell#61>", line 1, in <module> s[4:-3] = "ip" TypeError: 'str' object does not support item assignment >>> Bir str degerinden baska bir str degeri türetilebilir. >>> s[:4] + "ip" + s[7:] + "la" 'Ali ip atla' String ile for Döngüsü str degerlerinin elemenlarina, yani karakterlerine, tek tek ulasmanin yolunu gördük. Eger tüm indeksleri birer kez sorgulamak istersek for anahtar kelimesini kullanip for döngüsü kurarak ulasabiliriz. Mesela s degiskeni asagidaki gibi verilsin. >>> s = "Merhaba" for döngüsü kullanarak s degiskenin her bir elemanini ch degiskenine atan bir döngü olusturalim.
>> for ch in s: print(ch) M e r h a b a Yukaridaki örnek for döngüsünün en basit halini gösteriyor. for anahtar kelimesinden sonra bir degisken tanimliyoruz. Daha sonra in anahtar kelimesini kullanip bir str degeri veriyoruz. Yukaridaki örnekte bu s degiskenindeki str degeridir. Döngünün içinde bir satirlik print(ch) islemi var. ch degiskeni s degiskenindeki her bir elemani temsil ediyor. "Merhaba" str degerinin 7 elemani oldugu için döngünün içindeki print(ch) fonksiyonu 7 defa farkli ch degerleri için çalisir. ch degiskeninin degeri sirasiyla "M", "e", "r", "h", "a", "b", "a" olacaktir. Asagidaki örnekte gösterilen seslileri_say fonksiyonu verilen str degerinin içindeki sesli harflerin sayisini geri veriyor. def seslileri_say(s): sayac = 0 for ch in s: if ch in "aeıioöuüaeiioöuü": sayac = sayac + 1 return sayac Bu fonksiyon "Merhaba" _str_degerindeki sesli harfleri bulup, yani "e", "a" ve tekrar "a", sayisini veriyor. >>> seslileri_say(s) 3
Akümülatör Degiskenler Yukaridaki örnekte kulandigimiz sayac degiskenine programlamada akümülatör denir. Akümülatör degiskenler istenilen degerleri toplamak için kullanilir. Yukaridaki örnekte her sesli harf bulundugunda akümülatör bir artiriliyor ve sonunda fonksiyon bu degeri geri veriyor. Akümülatörlerin önemli bir özelligi de her zaman bir baslangiç degerinin olmasidir. Yukaridaki örnekte sayac akümülatör degiskeninin baslangiç degeri sifirdir. Akümülatör degiskenler bildigimiz siradan degiskenlerdir. Sadece bizim bu degiskene üstledigimiz görevinden dolayi özel bir isim almistir. Degiskenin isminin sayac olmasinin özel bir nedeni yoktur. Degiskenin ismi sesli_toplam gibi bir isim de olabilirdi. Akümülatör degiskenler sadece sayaç olarak kullanilmak zorunda degildir. Ayni sekilde bu degiskeni istenilen olaylari biriktirmek için de kullanabiliriz. Mesela yukaridaki örnek verilen str degerinin sesli harflerinin sayisini veriyor. Simdi buna benzer bir fonksiyon daha yazalim. Bu sefer fonksiyon verilen str degerindeki sadece sesli harfleri geri versin. def seslileri_ver(s): sesliler = '' for ch in s: if ch in "aeıioöuüaeiioöuü": sesliler = sesliler + ch return sesliler Akümülatörümüz sesliler degiskeni ve baslangiç deger bos bir str. Her sesli harf bulundugunda degiskene bulunan sesli harf, yani ch degiskeninde eger bir sesli harf varsa, ekleniyor. >>> seslileri_ver("merhaba") 'eaa' >>> seslileri_ver("programlak çok güzel") 'oaaoüe'
Asagida verilen örnek ögrendigimiz for döngüsünü ve akümülatör degisken olgusunu kullanarak verilen bir amino asit dizisindeki yine verilen belli amino asitleri seçiyor ve diger amino asitleri çikartarak yeni bir dizi olusturuyor. def amino_asit_sec(fasta, aas): yeni_fasta = '' for amino_asit in fasta: if amino_asit in aas: yeni_fasta = yeni_fasta + amino_asit return yeni_fasta Amino asit dizisi asagidaki gibi verilsin. fasta = "IKDLLVSSSTDLDTTLVLVNAIYFKGMWKTAFNAEDTREMP" fasta degiskeninin her bir elemani bir amino asiti temsil ediyor. Asagidaki örnekte dizideki sadece A, D, V ve K amino asitlerini kullanarak yeni bir dizi temsili olusturabiliriz. >>> amino_asit_sec(fasta, "ADVK") 'KDVDDVVAKKAAD'