koddla

Yazılımcıları bilgi ile güçlendirir.

Python101 – Dizeler

Şimdi dizelerle yapılabilecek harika bir numara sunuyoruz:

def soyle(dize):
    for karakter in dize:
        print("Bir " + karakter + " ver")
        print("'" + karakter + "'")

soyle("Kayıp")

def orta(dize):
    print("Ortanca karakter:", dize[len(didze) // 2])

orta("abcdefg")
orta("The Python Programming Language")
orta("Atlanta")

Ve çıktı şu:

Bir K ver
'K'
Bir a ver
'a'
Bir y ver
'y'
Bir ı ver
'ı'
Bir p ver
'p'

Ortanca karakter: d
Ortanca karakter: r
Ortanca karakter: a

Bu programların gösterdiği şey, dizelerin çeşitli şekillerde listelere benzer olduğudur. soyle() işlevi, döngülerin listelerle kullanılabileceği gibi dizelerle de kullanılabileceğini gösterir. ortanca() işlevi len() işlevinin de dizeler üzerinde de çalıştığını gösterir.

Dizeye özgü başka özelliklere bakalım:

def to_upper(string):
    ## Converts a string to upper case
    upper_case = ""
    for character in string:
        if 'a' <= character <= 'z':
            location = ord(character) - ord('a')
            new_ascii = location + ord('A')
            character = chr(new_ascii)
        upper_case = upper_case + character
    return upper_case

print(to_upper("This is Text"))

çıktı:

THIS IS TEXT

Bilgisayarlar bir dizenin karakterlerini 0 ile 1.114.111 arasında sayılar olarak temsil eder. Örneğin ‘A’ 65 sayısı ile, ‘B’ 66 ile. Bu değerler unicode değeridir. Python’ un bir karakteri sayı olarak döndüren chr() (karakterin kısaltması) adlı bir işlevi bulunur. Bir sayıyı karaktere dönüştüren bir işlev de vardır. Bunu göz önünde bulundurduğunuzda yukarıdaki program net olmaya başlamalı. İlk satır if 'a' <= character <= 'z': bir harfin küçük harf olup olmadığını kontrol eder. Küçükse, sonraki satırlarda kullanılır. İlk olarak, a = 0, b = 1, c = 2 ve benzeri bir sayıya dönüştürülür: location = ord(character) - ord('a'). Sonra yeni değer new_ascii = location + ord('A') ile bulunur. Bu değer, şimdi büyük harf olan bir karaktere geri dönüştürülür. Bir harfin büyük harfine ihtiyacınız varsa upper() işlevini kullanabiliriz: u=var.upper()

Şimdi biraz alıştırmalara bakalım:

>>> # Integer to String
>>> 2
2
>>> repr(2)
'2'
>>> -123
-123
>>> repr(-123)
'-123'
>>> # String to Integer
>>> "23"
'23'
>>> int("23")
23
>>> "23" * 2
'2323'
>>> int("23") * 2
46
>>> # Float to String
>>> 1.23
1.23
>>> repr(1.23)
'1.23'
>>> # Float to Integer
>>> 1.23
1.23
>>> int(1.23)
1
>>> int(-1.23)
-1
>>> # String to Float
>>> float("1.23")
1.23
>>> "1.23" 
'1.23'
>>> float("123")
123.0

Yukarıdaki koddan tahmin etmediyseniz, repr() işlev bir tamsayıyı dizeye dönüştürürken, int() işlevi bir dizeyi tamsayıya dönüştürebilir. float() işlevi bir dizeyi float’a dönüştürebilir. repr(), herhangi bir şeyin yazdırılabilir bir gösterimini döndürür.

>>> repr(1)
'1'
>>> repr(234.14)
'234.14'
>>> repr([4, 42, 10])
'[4, 42, 10]'

int(), bir dizeyi (veya ondalıklı sayıyı) tamsayıya dönüştürür. Bir tamsayıyı veya dizeyi float’a dönüştürecek benzer bir işlev de float() ile yapılır. Python’un sahip olduğu bir başka işlev de eval() işlevdir. eval() işlevi bir dize alır ve python’un bulduğunu düşündüğü türdeki veriye döndürür. Mesela: 

>>> v = eval('123') #tamsayıya dönüştürdü
>>> print(v, type(v))
123 <type 'int'>
>>> v = eval('645.123') #float'a dönüştürdü
>>> print(v, type(v))
645.123 <type 'float'>
>>> v = eval('[1, 2, 3]') #listeye dönüştürdü
>>> print(v, type(v))
[1, 2, 3] <type 'list'>

eval() işlevi kullanırsanız, beklediğiniz türü döndürdrüp döndürmediğini denetlemeniz gerekir.

split() de diğer yararlı bir dize işlevi yöntemdir: 

>>> "This is a bunch of words".split()
['This', 'is', 'a', 'bunch', 'of', 'words']
>>> text = "First batch, second batch, third, fourth"
>>> text.split(",")
['First batch', ' second batch', ' third', ' fourth']

Bir dizenin dize listesine nasıl dönüştürüldüğüne dikkat edin. Dize varsayılan olarak boşlukla veya isteğe bağlı bağımsız değişkenle bölünür (bu durumda virgül). Ayırıcının metni bölmek için kaç kez kullanılacağını söyleyen başka bir bağımsız değişken de ekleyebilirsiniz. Mesela: 

>>> list = text.split(",")
>>> len(list)
4
>>> list[-1]
' fourth'
>>> list = text.split(",", 2)
>>> len(list)
3
>>> list[-1]
' third, fourth'

Dizeleri (ve listeleri) dilimleme

Dizeler parçalara bölünebilir — önceki bölümdeki listeler için gösterildiği gibi — dilimleme “işleci” kullanılır []. Dilimleme işleci listelerle aynı şekilde çalışır: metin[ilk_index:son_index] (çok nadir durumlarda, aşağıda gösterilen örnekte olduğu gibi başka bir iki nokta üst üste ve üçüncü bir bağımsız değişken olabilir).

Bu indexleri dizin sayılarıyla karıştırılmamak için, kırpma yerleri olarak düşünebiliriz. Basit bir metin dizesi için kırpma yerlerini (sarı) ve dizin numaralarını (kırmızı ve mavi) gösteren bir örnek için aşağıya bakalım:

Kırmızı sayılar dizenin başından, mavi indexler ise dizenin sonundan geriye doğru sayıldığına dikkat edin. (Dizenin sonunda mavi -0 olmadığını unutmayın. Çünkü -0 == 0, -0 da “dizenin başlangıcı” anlamına gelir.) Şimdi dilimleme işlemleri için dizinleri kullanmaya hazırız:

metin[1:4]“TRI”
metin[:5]“STRIN”
metin[:-1]“STRIN”
metin[-4:]“YÜZÜK”
metin[2]“R”
metin[:]“STRING”
metin[::-1]“GNIRTS”

metin[1:4] bize kırpma yerleri 1 ve 4 arasındaki metin dizesinin tümünü verir, “TRI”. [ilk_index:son_index] bağımsız değişkenlerinden birini atlarsanız, dizenin başlangıcını veya sonunu varsayılan olarak alırsınız: mesela text[:5], “STRIN” verir. Hem ilk_index hem de son_index için hem kırmızı hem de mavi numaralandırma şemasını kullanabiliriz: metin[:-1] ile metin[:5] aynı şeyi verir, çünkü -1 dizini bu durumda 5 ile aynı yerdedir. İki nokta üst üste içeren bir bağımsız değişken kullanmazsak, sayı farklı bir şekilde ele alınır: metin[2] bize ikinci kırpma noktası olan “R” yi izleyen bir karakter verir. Özel dilimleme işlemi [:] metni “başından sonuna” kırp anlamına gelir ve tüm dizenin (veya önceki bölümde gösterildiği gibi listenin) bir kopyasını üretir.

Son olarak, dilimleme işleminde “adım boyutu” olarak yorumlanan ikinci bir iki nokta üst üste ve üçüncü bir bağımsız değişken olabilir: metin[::-1] baştan sona doğru -1 adım boyutuna sahip metindir. -1, “her karakter, ama diğer yönde” anlamına gelir. “STRING” tersten “GNIRTS”.

Tüm bu dilimleme işlemleri listelerle de çalışır. Bu anlamda dizeler, liste öğelerinin tek karakterli olduğu özel bir liste durumudur. Sadece kırpma kavramını unutmayın.

Örnekler

# This program requires an excellent understanding of decimal numbers.
def to_string(in_int):
    """Converts an integer to a string"""
    out_str = ""
    prefix = ""
    if in_int < 0:
        prefix = "-"
        in_int = -in_int
    while in_int // 10 != 0:
        out_str = str(in_int % 10) + out_str
        in_int = in_int // 10
    out_str = str(in_int % 10) + out_str
    return prefix + out_str

def to_int(in_str):
    """Converts a string to an integer"""
    out_num = 0
    if in_str[0] == "-":
        multiplier = -1
        in_str = in_str[1:]
    else:
        multiplier = 1
    for c in in_str:
        out_num = out_num * 10 + int(c)
    return out_num * multiplier

print(to_string(2))
print(to_string(23445))
print(to_string(-23445))
print(to_int("14234"))
print(to_int("12345"))
print(to_int("-3512"))

Çıktı:

2
23445
-23445
14234
12345
-3512

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top