> For the complete documentation index, see [llms.txt](https://bytistan.gitbook.io/baytistan/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bytistan.gitbook.io/baytistan/kedi-problemi/seviye-5-yukleniyor.md).

# Seviye 5: Yükleniyor

## Amaç

`settings.py` dosyasına eklediğin ASCII kediyi, yukarıdan aşşağı ve aşşağıdan yukarı olacak şekilde teker teker yazdırmalısın.

### Beklenen Davranış

<figure><img src="https://1592666604-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fy0QTCliryu3DkL9lOYgq%2Fuploads%2Fa5kLX8A5cIOAAcv6V2tC%2Fezgif.com-video-to-gif-converter(4).gif?alt=media&amp;token=8d6678e9-15b6-4e0f-b4b7-58f05527a6c9" alt=""><figcaption><p>1.0</p></figcaption></figure>

* Başlangıç konumundan başlayarak yukarıdan aşşağı ve aşşağıdan yukarı, her zaman birbirinin zıttı şekilde ilerleyerek kediyi adım adım çizmeli.

## Problemin Çözümü

Bu kafanı biraz karıştırmış olabilir.

<details>

<summary>Cevap</summary>

```python
# ...

def print_cat():
    
    flag = True
    data = {} 
    new_line = "\n"
    interval = 0.001

    for r in range(0 ,len(ascii_art[0])):
        l = ascii_art if flag else reversed(ascii_art)

        for row_index,row in enumerate(l):
            os.system("clear")
            
            data[row] = data.get(row) + row[r] if data.get(row) is not None else row[r] 

            print(new_line.join(data.values()))
            time.sleep(interval)

        flag = False if flag else True

# ...
```

</details>

### Döngünün Amacı ve Yapısı

Kodda yer alan döngü, `ascii_art` isimli bir listeyi (bu liste büyük ihtimalle bir ASCII sanatını temsil ediyor) satır satır işleyerek ekrana basma işlemi yapıyor. Döngü, **sütun sütun ilerleyerek** her seferinde bir sütunu ekrana ekliyor ve her sütun tamamlandığında ekranı temizleyip yeni sütunu ekleyerek ilerliyor.

```python
data[row] = data.get(row) + row[r] if data.get(row) is not None else row[r]
```

{% hint style="info" %}
Döngü her başlarken `l = ascii_art if flag else reversed(ascii_art)` bu satır aracılığı ile listeyi ters çeviriyorum.  Bu sayede aşağıdan yukarı ve yıkarıdan aşşağıya olacak şekilde ilerleyebiliyorum.
{% endhint %}

### Açıklaması

Bu satır, her bir satır (`row`) için şu işlemi gerçekleştiriyor:

1. **Amaç:** `data` sözlüğü, ASCII sanatındaki her satırın o ana kadarki birikmiş halini tutuyor. Yani her satırın tamamlanan kısmı burada saklanıyor. Örneğin, ilk sütunu işlediğinde sadece ilk karakterler ekranda görünecek. Her döngüde, o satırın bir sonraki sütunu da ekleniyor ve birikimli bir görüntü oluşturuluyor.
2. **İşleyiş:**
   * `data.get(row)`: `data` sözlüğünden `row` anahtarına karşılık gelen değeri alır. Eğer daha önce bu satır işlenmişse o ana kadar işlenen kısım burada bulunur, aksi takdirde `None` döner.
   * `if data.get(row) is not None`: Eğer satır daha önce işlenmişse (`None` değilse), o ana kadar birikmiş olan karakterlere yeni bir karakter eklenir (`row[r]`), yani o sütundaki karakter.
   * `else row[r]`: Eğer satır daha önce hiç işlenmemişse (yani bu o satırın ilk işlenişi ise), o satır için sadece mevcut sütundaki karakter (`row[r]`) eklenir.
3. **Sonuç:** Bu işlem, her döngüde her satırın o ana kadar işlenen kısmına yeni bir karakter ekleyerek ekranda metnin adım adım oluşmasını sağlar.

<figure><img src="https://1592666604-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fy0QTCliryu3DkL9lOYgq%2Fuploads%2FfldukPXtQGaetLQEWpTI%2FUntitled-2024-09-24-0616(1).png?alt=media&amp;token=fe2ab107-648c-419c-9d06-920a9127c4c8" alt=""><figcaption><p>1.0</p></figcaption></figure>

### Yardımcı Fonksiyonlar

`reversed` fonksiyonu verilen listeyi ters çeviriyor.

```bash
dogukan@train:~/Develop/Others/meow$ python3
Python 3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> example_list = [1,2,3,4,5,6,7]
>>> reversed_list = reversed(example_list)
>>> print(list(reversed_list))
[7, 6, 5, 4, 3, 2, 1]
```
