# # Python Karakter Dizileri

Her programlama dilinde olduğu gibi Python programlama dilinde de **karakter dizileri** yani **string** değişken tipi büyük önem arz eder. Çünkü tanımlayacağınız birçok değişken string ifadeler içerir. Üstelik string değişken tipleri üzerinden yürütebileceğiniz birçok Python fonksiyonu mevcuttur. Bir string yani `str` veri tipinde değerler **`"`** (çift tırnak), **`'`** (tek tırnak), `"""` (üç tırnak) ifadeleri arasında gösterilir.

```python
blog = "Kerteriz Blog" 
blog = 'Kerteriz Blog' 
blog = """Kerteriz Blog"""
```

Bu örnekte gördüğünüz her üç değişken de birebir aynıdır. Siz istediğiniz kullanımı tercih edebilirsiniz. Fakat bir kullanım belirledikten sonra değerinizin içinde aynı işareti kullanamazsınız çünkü Python değerin bitiş yerini orası belirler.

```python
#YANLIŞ
metin = 'Yunus'un arabası var'

#DOĞRU
metin = "Yunus'un arabası var"

#DOĞRU
metin = """Yunus'un arabası var"""
```

Bir string oluşturduğunuzda hangi işaret ile başlıyorsanız bitirirken de aynı işareti kullanmalısınız.

```python
#DOĞRU
isim = 'Kerteriz'

#DOĞRU
isim = "Kerteriz"

#YANLIŞ
isim = "Kerteriz'

#YANLIŞ
isim = "Kerteriz"""
```

{% hint style="info" %}
String (str) değişken tanımlarken birden fazla satırdan oluşan değerler oluşturabilirsiniz.
{% endhint %}

```python
a = '''Merhaba arkadaşlar,
Bu örnekte gördüğünüz gibi,
birden fazla satıra sahip
değişken oluşturabilirsiniz.'''

print(a)
```

## 1. String Değerler Aynı Zamanda Dizidir

Bir **string** veri tipinde değişken oluşturmuşsanız aynı zamanda bir dizi oluşturmuşsunuz demektir. Çünkü ders başlığında da yazdığımız gibi bir string değişken **karakter dizisi** şeklinde veri tipidir. Örneğin " **Kerteriz** " kelimesi `K` , `e` , `r` , `t` , `e` , `r` , `i` , `z` harflerinden meydana gelir. Bunu hemen başka bir örnekle gösterelim:

```python
sehir= "Ankara"

print(sehir[0])    #A
print(sehir[1])    #n
print(sehir[2])    #k
print(sehir[3])    #a
print(sehir[4])    #r
print(sehir[5])    #a
```

{% hint style="info" %}
Dizilerde (ilerleyen derslerde göreceğiz) index her zaman 0 dan başlar. Yani 0.index ilk elemandır.
{% endhint %}

## 2. Metin Dilimleme (String Parçalama)

Programlamanızı yaparken elinizdeki string değişkenlerin belirli bir parçasını kullanmak, başından veya sonundan kırpmak, tersine çevirmek gibi işlemlere tabi tutmak isteyebilirsiniz. İlk olarak elinizdeki metinin bir karakter dizisi olduğunu hatırlayalım.

```python
isim = "Kerteriz"

isim[0] --> K
isim[1] --> e
isim[2] --> r
isim[3] --> t
isim[4] --> e
isim[5] --> r
isim[6] --> i
isim[7] --> z

#Tersinede işlem yapabiliriz
isim[-1] --> z
isim[-2] --> i
isim[-3] --> r
isim[-4] --> e
isim[-5] --> t
isim[-6] --> r
isim[-7] --> e
isim[-8] --> K
```

Öyleyse elimizdeki metin üzerinde x. karakterden y. karaktere kadar kırpma işlemini gerçekleştirelim.

```python
isim = "kerteriz ile Python öğreniyorum"

# 4. indeksten 10.indekse kadar
isim[4:10] --> eriz i

# En baştan 10.indekse kadar
isim[:10] --> kerteriz i

# 4. indeksten sonuna kadar
isim[4:] --> eriz ile Python öğreniyorum'

# İki değer de belirtilmemişse tüm stringi al.
isim[:] --> kerteriz ile Python öğreniyorum

#Son karaktere kadar al.
isim[:-1] --> kerteriz ile Python öğreniyoru'

# Baştan sona 2 değer atlaya atlaya stringi al.
isim[::2] --> krei l yhnörnyrm'

# 4.indeksten 12'nci indekse 3'er atlayarak stringi al.
isim[4:12:3] --> ezl
```

Bir string değişken ile metini tersine çevirmek, metini tersinden yazmak için aşağıdaki örneği inceleyebilirsiniz.

```python
isim = "kerteriz ile Python öğreniyorum"

# Baştan sona -1 atlayarak stringi al.
isim[::-1] --> muroyinerğö nohtyP eli ziretrek
```

## 3. String Fonksiyonları

### 3.1 Metinin Karakter Uzunluğunu Öğrenme

Elinizdeki string değişkenin kaç karakterden oluştuğunu öğrenmek için **len()** fonksiyonunu kullanabilirsiniz.

```python
a = "Merhaba Dünya!"

print(len(a)) # 14
```

### 3.2 Metindeki Boşlukları Temizleme

Bir metinin başındaki ve sonundaki boşlukları temizlemek için **strip()** fonksiyonunu kullanabilirsiniz.

```python
a = " Suyu israf etmeyin! "

print(a.strip()) # "Suyu israf etmeyin!"
```

### 3.3 Metindeki Tüm Karakterleri Büyük Harfe Çevirme

Elinizdeki metini tamamen büyük harflere çevirmek istiyorsanız **upper()** fonksiyonunu kullanabilirsiniz.

```python
a = "Ağaçlar ciğerlerimizdir"

print(a.upper()) # AĞAÇLAR CIĞERLERIMIZDIR
```

### 3.4 Metindeki Tüm Karakterleri Küçük Harfe Çevirme

Elinizdeki metini tamamen küçük harflere çevirmek istiyorsanız **lower()** fonksiyonunu kullanabilirsiniz.

```python
a = "AĞAÇLAR CİĞERLERİMİZDİR"
print(a.lower()) # ağaçlar ciğerlerimizdir
```

### 3.5 Metindeki Karakterleri Başka Karakterlerle Değiştirmek

Metindeki bir karakter veya bir kelime grubunu başka bir karakter veya metin grubuyla değiştirmek istediğinizde **replace()** fonksiyonunu kullanabilirsiniz.

```python
a = "Muz tatlı bir meyvedir"

print(a.replace("Muz", "Çilek")) #Çilek tatlı bir meyvedir
```

### 3.6 Metini İstenilen Bir Karakterden Bölmek

Elinizdeki belirlediğiniz bir karakterden bölerek diziye atayabilirsiniz. Aşağıdaki örnekte örnek kullanımını görebilirsiniz.

```python
a = "Kayseri,Nevşehir,Kırşehir İç Anadolu bölgesindedir"

print(a.split(",")) # ['Kayseri', 'Nevşehir', 'Kırşehir İç Anadolu bölgesindedir']
```

## 4. Metin İçinde Karakter veya Metin Aramak

Bir metin editöründe nasıl karakter veya metin arayabiliyorsanız Python programlama diliyle de string değişkeniniz içinde **`in`** ve **`not in`** terimleriyle herhangi bir karakter veya metin arayabilirsiniz.

```python
txt = "En sevdiğim hava yağmurlu havadır"

x = "mur" in txt

print(x)            # True
```

Dönecek sonucu ter çevirmek istiyorsanız **not** terimini kullanabilirsiniz.

```python
txt = "En sevdiğim hava yağmurlu havadır"

x = "mur" not in txt 

print(x) # False
```

{% hint style="info" %}
`True` ve `False` mantıksal (bool) ifadelerdir. Doğruysa True, Yanlışsa False değeri döner.
{% endhint %}

## 5. Metin Birleştirme, Toplama ve Çarpma

Bazı durumlarda elinizde bulunan string değerleri birbirleriyle birleştirmek ve yan yana eklemek isteyebilirsiniz. Bunun için matematiksel ifade olan **+** işareti kullanılır. Örneklerini aşağıda görebilirsiniz.

```python
a = "Kerteriz"
b = " "
c = "Blog"

print(a+b+c)                     # Kerteriz Blog
print(c + "yazmak düzeldir")     # Blog yazmak güzeldir
```

Bir kelimeyi veya karakteri istediğimiz adette yazmak için matematiksel ifade olan **\*** işareti kullanılır. Örneklerini aşağıda görebilirsiniz.

```python
a = "elma"

print(a*3)        # elmaelmaelma
```

## 6. String Format Kullanımı

Yukarıdaki örneklerde birden fazla değişkeni birleştirmek için **+** işaretini nasıl kullanabileceğimizi gördük. Peki bir metin içinde belirli alanlar belirleyerek bu alanlara denk gelecek değerleri nasıl yazdırabiliriz? Bunun için **format** özelliğini kullanarak **{}** işaretinin geldiği yerlere sırasıyla değerlerimizi oturtabiliriz.

```python
yas = 24
hava = "Yağmurlu"
hedef = "Okula"

metin = "Dün akşam {} yaşlarında bir genç {} havada yürüyerek {} gidiyordu"

print(metin.format(yas,hava,hedef))       # Dün akşam 24 yaşlarında bir genç Yağmurlu havada yürüyerek Okula gidiyordu
```

## 7. Kaçış (Escape) Karakterleri

Dersimizin en başında dediğimiz gibi bir string değişken belirlerken hangi işaretle başladıysanız o işaretle bitirmelisiniz ve aynı işaretten değişken içinde kullanmamalısınız. Bunu öncelikle bir hatırlayalım.

```python
metin = "Bu aralar "Şeker Portakalı" kitabını okuyorum"

print(metin) # !! HATA !!
```

Böyle bir kullanımda hata alacaksınızdır. Çünkü ilk `"` işaretinden sonra gelen `"` işareti değişken tanımlamayı bitirir ama siz yazmaya devam ettiğiniz için hata alırsınız. Bu hatanın 2 çözüm yöntemi vardır. İlki `"` işareti yerine `'` işareti kullanabilirsiniz.

```python
metin = "Bu aralar 'Şeker Portakalı' kitabını okuyorum"

print(metin) # Bu aralar 'Şeker Portakalı' kitabını okuyorum
```

Fakat siz `"` işaretini kullanmak istiyorsanız devreye **kaçış karakterleri** dediğimiz **\\** işaretinin özel kullanımı giriyor. Eğer **"** işaretinin başlarına **\\** işaretini koyarsak Python bu işaretten sonra gelen karakteri normal bir karakter gibi yorumlayacak ve metine dahil edecektir.

```python
metin = "Bu aralar \"Şeker Portakalı\" kitabını okuyorum"

print(metin) # Bu aralar "Şeker Portakalı" kitabını okuyorum
```

Örnekte gördüğünüz gibi herhangi bir özel karakter kullanmak istediğinizde **\\** işareti sizi kurtaracaktır. Aşağıdaki tablodan diğer örnekleri görebilirsiniz.
