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.
>>>
Bir
>>>
Iki
s = input("Bir sayi giriniz: ")
sayi giriniz: 3
print("Iki kati", 2 * int(s))
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
Esittir
Esit
degildir
Örnek
==
"cat"=="abcd"
!=
"cat"!="abds"
Açiklama
Iki str esitse True degilse
False
Iki str esitse False degilse
True
Alfabedeki harf sirasina göre
Küçüktür
<
"abc"<"abd"
kiyaslama. Ilk farkli deger solda
alfabede daha önce gelirse
True yoksa False
Alfabedeki harf sirasina göre
Büyüktür
>
"abc">"abd"
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
Soldaki str degeri sagdaki str
Içinde
in
"bc" in "abcd"
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
A
l
i
3
4
5
6
t
o
p
7
8
9
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
A
l
i
-10 -9
-8
3
-7
4
5
6
t
o
p
-6
-5
-4
7
-3
8
9
a
t
-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'
Download

Python ile Programlamaya Giris