21 Ocak 2012 Cumartesi

Karakter Dizi Metodlar-3

Expandtabs metodu
Bu metod ile karakter dizimizdeki sekme boşluklarının büyüklüğünü artırabiliyoruz.

>>> x="python\töğreniyorum."
>>> x.expandtabs(5)
'python    öğreniyorum.'

FIND metodu
Bu metod ile bir karakter dizisi içindeki bir karakterin kaçıncı konumda olduğunu bize söylüyor.

>>> a="Python kolay bir dil"
>>> a.find("o")
4

Gördüğümüz gibi "o" harfinin kaçıncı karakter(0'dan başladığını hatırlayalım) olduğunu bize verdi.
Ama "Python" dilinden sonra bir "o" harfi olan kelimemiz daha var.Ama python solda sağa doğru
okuma yaptığı için ilk "o" harfinin bulunduğu değeri verdi.

eğer arama yaptığımız harf yok ise -1 değerini bize döndürecektir.


>>> a="Python"
>>> a.find("i")
-1

Python bize aralık olarak arama yapmada imkanı veriyor:

>>> a="Python kolay bir dil"
>>> a.find("n",0,6)
5

Bu örnekte 0 ile 6. karakterler arasını araştırp bize "n" harfinin kaçıncı karakter olduğunu
söylemesini istedik.

Rfind metodu
Bu metod find metodu ile aynı görevi yapar fakat tek farkı karakter dizilerini soldan sağa değilde
sağdan sola doğru okur.

>>> a="python"
>>> a.rfind("p")
0


İndex metodu
find() metodu ile aynı işelve sahiptir.Tek değişik yönleri;fin() metodu bir karakteri bulamadığında
-1 değerini döndürür,index() metodu ise hata mesajı.

rindex metodu
Bu da index metodunun soldan sağa yaptığı okuma işini sağdan sola yapmaktadır.

join metodu
Bu metod karakter dizimizdeki her karakter arasına yeni bir karakter ekleme imkanı verir.

>>> a="python"
>>> "-".join(a)
'p-y-t-h-o-n'


>>> a=["php","jquery","ajax","android","python","c#","c++","java"]
>>> ":".join(a)
'php:jquery:ajax:android:python:c#:c++:java'


translate metodu
Bu metodu anlatmak hem karışık hemde zor olduğu için bu metodu istihza.com'dan alıntı yapacağım.


str.maketrans ve translate Metotları

Bu iki metot birbiriyle bağlantılı olduğu için, bunları bir arada göreceğiz.

Diyelim ki elimizde bir karakter dizisi var ve biz bu karakter dizisini şifrelemek istiyoruz. Bunun için şöyle bir kod yazdığımızı varsayalım:

sözlük = {"a":"0",
          "b":"1",
          "c":"2",
          "ç":"3",
          "d":"4",
          "e":"5",
          "f":"6",
          "g":"7",
          "ğ":"8",
          "h":"9",
          "ı":"a",
          "i":"b",
          "j":"c",
          "k":"ç",
          "l":"d",
          "m":"e",
          "n":"f",
          "o":"g",
          "ö":"h",
          "p":"ı",
          "r":"i",
          "s":"j",
          "ş":"k",
          "t":"l",
          "u":"m",
          "ü":"n",
          "v":"o",
          "y":"ö",
          "z":"p",
          " ":" "}

kardiz = "python programlama dili"

şifreli = ""
for i in kardiz:
        şifreli = şifreli + sözlük[i]

print(şifreli)

Bu kodu çalıştırdığımız zaman şöyle bir çıktı alırız:

ıöl9gf ıig7i0ed0e0 4bdb

Aslında bu çıktıda “python programlama dili” yazıyor. Biz yukarıdaki kodlar yardımıyla karakter dizimizi şifreledik. Python, yazdığımız sözlüğü temel alarak “p” harfi gördüğü yere “ı” harfini; “y” harfi gördüğü yere “ö” harfini, “t” gördüğü yere “l” harfini... yerleştiriyor. Böylece karakter dizimizin çıplak gözle anlaşılmasını engelleyecek bir çıktı veriyor bize. İsterseniz yukarıdaki kodları bir fonksiyon olarak tanımlayıp çok daha verimli bir hale getirebiliriz:

sözlük = {"a":"0",
          "b":"1",
          "c":"2",
          "ç":"3",
          "d":"4",
          "e":"5",
          "f":"6",
          "g":"7",
          "ğ":"8",
          "h":"9",
          "ı":"a",
          "i":"b",
          "j":"c",
          "k":"ç",
          "l":"d",
          "m":"e",
          "n":"f",
          "o":"g",
          "ö":"ğ",
          "p":"h",
          "r":"ı",
          "s":"i",
          "ş":"j",
          "t":"k",
          "u":"l",
          "ü":"m",
          "v":"n",
          "y":"o",
          "z":"ö",
          " ":" "}

def sifrele(kardiz):
        şifreli = ""
        for i in kardiz:
                şifreli = şifreli + sözlük[i]

        return şifreli

print(sifrele("python programlama dili"))

Fonksiyonumuzu bir kez bu şekilde tanımladıktan sonra sadece sifrele() fonksiyonunu kullanarak karakter dizilerimizi şifreleyebiliriz:

>>> print(sifrele("merhaba dünya"))

e5i9010 4nfö0

Burada bazı sorunlar olduğu açık. Mesela sözlük içinde tanımlanmamış karakter kullanıldığında programımız hata verecektir. Ayrıca açıkçası bu kodlar biraz “kalabalık” görünüyor göze...

İsterseniz yukarıdaki işlemi daha sade ve performanslı bir biçimde yapmanın bir yolu vardır Python’da...

Bunun için str.maketrans() ve translate() metotlarından yararlanacağız. Şu kodlara bir bakalım:

kaynak_dizi = "abcçdefgğhıijklmnoöprsştuüvyz"
hedef_dizi =  "0123456789abcçdefgğhıijklmnoö"
çeviri_nesnesi = str.maketrans(kaynak_dizi, hedef_dizi)

kardiz = "python programlama dili"

sonuç = kardiz.translate(çeviri_nesnesi)

print(sonuç)

Burada yaptığımız şey çok basit. Öncelikle “kaynak_dizi” adında bir karakter dizisi oluşturduk. Amacımız bir karakter dizisi içindeki karakterleri başka karakterlere dönüştürmek. İşte bu “kaynak_dizi” adlı karakter dizisi özgün kaynak dizimizin karakterlerini temsil ediyor. Alt satırdaki “hedef_dizi” adlı karakter dizisi ise, kaynak dizi içindeki karakterlerin dönüştürüleceği karakterleri gösteriyor. Bu iki karakter dizisini, bir üstteki kodlarda sözlük halinde yazmıştık. Buradaki “kaynak_dizi” adlı karakter dizisi bir önceki kodlardaki sözlüğün “anahtar”larının (keys), “hedef_dizi” adlı karakter dizisi ise sözlüğün “değer”lerinin (values) yerini tutuyor.

Karakter dizilerimizi tanımladıktan sonra str.maketrans() metodunu kullanarak bir “çeviri nesnesi” oluşturacağız. Oluşturacağımız bu çeviri nesnesi, biraz önce tanımladığımız “kaynak_dizi” ve “hedef_dizi” adlı karakter dizilerinin öğelerini birbiriyle eşleştirme vazifesi görecek. Zaten “str.maketrans(kaynak_dizi, hedef_dizi)” satırı bu vazifeyi gözler önüne seriyor... Bu arada maketrans() metodunu, öteki metotlardan farklı olarak str.maketrans() şeklinde kullandığımıza özellikle dikkat edin.

Hemen ardından çeviri işlemine tabi tutacağımız karakter dizimizi yazdık. Bu karakter dizimiz “python programlama dili”.

Daha sonra da “sonuç” adlı bir değişken içinde translate() metodundan faydalanarak yukarıda oluşturduğumuz “çeviri_nesnesi”ni bu metoda argüman olarak veriyoruz. Bu metot, “kardiz” adlı karakter dizisini alıp, yukarıda “çeviri_nesnesi” içinde belirlediğimiz formüle göre çeviri işlemine tabi tutuyor ve ortaya şifrelenmiş bir karakter dizisi çıkarıyor...

Hiç yorum yok:

Yorum Gönder