## 26. Python komutlarının yorumlanması

Son derste Python yorumlayıcısını kullanarak basit matematiksel hesaplamaları nasıl yapacağımızı öğrendik. Bu derste Reeborg'un dünyasında gördüğümüz Python komutlarının Python yorumlayıcısı tarafından nasıl işlendiğini göreceğiz.

### Satırların ayrılması

Basit bir işlemle başlayalım: `3*(2+2)``ifadesini girin ve Enter'a basın.` Sonuç aşağıdaki gibi olmalıdır:

    >>> 3*(2+2)
    12
    >>>

Şimdi ifadenin bir bölümünü `3*(` girin ve Enter'a basın. Sonuç aşağıdaki gibi olmalıdır:

    >>> 3*(
    ...     |

dikey çizgi "|" yanıp sönen imleçtir (körsır). Burada dikkat edilecek bir kaç nokta vardır:

- Prompt `>>>` den `...`'ya değişti. Python bu farklı prompt ile bizi yarım bıraktığımız ifadeyi tamamlamaya davet ediyor ve girdiğimiz ifadenin eksik olduğunu düşünüyor.
- İmleç prompt'un hemen yanında değil 4 boşluk ilerisinde bekliyor. Python girilen ifadenin tam olmadığını düşündüğünde, kullanıcının ifadenin devamını girebilmesi için imleci içeride bekletir, bu şekilde istenirse bir blok da oluşturulabilir. (Örneğin fonksiyonları tanımladığımızda da böyle bir yapıyla karşılaşmıştık.)

İfadenin geri kalanını aşağıdaki gibi girelim ve Enter tuşuna basalım.

    >>> 3*(
    ...     2+2)
    12
    >>>

Python ifadenin tamamını girdiğimize karar verdi ve işlemi yapıp doğru sonucu (12) verdi. Prompt normal haline geldi, ve yeni komutlar girmemizi bekliyor.

Şimdi, `3*` ifadesini yazıp enter tuşuna basın. Benim elde ettiğim sonuç:

    >>> 3*
      File "<input>", line 1
        3*
          ^
    SyntaxError: invalid syntax
    >>>

Buradaki fark Python'a ifadenin devamı olduğuna dair bir ipucu vermemiş olmamızdır. İlk durumda, parantez açmıştık ve kapatmadan enter'a basmıştık. Python parantezin açılmış olmasını, ifadenin henüz tamamlanmamış olması olarak algılar, en azından açılmış bir parantezin kapanması gereklidir, ve kullanıcıya bunu tamamlama fırsatını farklı bir prompt ve imleci içeride bekleterek verir. `3*` yazdığımızda Python başka eklenecek bir şey olmadığını varsayıp ifadeyi işletti ve bu ifadeden bir sonuç alamadığını bize söyledi.

Şimdi aşağıdaki örneği deneyin:

    >>> 3*(
    ...     2+2
    ...
    ...
    ...     )
    12
    >>>

Python ifadeyi tamamlamadığımızı düşündüğü müddetçe farklı bir prompt sunarak ifadeyi tamamlamamızı bekler, Enter tuşuna üst üste basılsa dahi bu değişmez. Aşağıdaki örnekle devam edelim:

    >>> 3*(
    ...     2+2
    ...     )+(
    ...     1+1
    ...     )
    14
    >>>

okuması ve anlaması oldukça zor, bunun yerine aşağıdakini yazmak daha akıllıca olur.

    >>> 3*(2 + 2) + (1 + 1)
    14
    >>>

Aşağıdaki bölüme geçmeden önce biraz daha örnek yapabilirsiniz.

### Fonksiyonların Tanımlanması

Reeborg'un dünyasında gördüğümüz Python komutlarını (ve konularını) yeniden incelemek için hazır durumdayız. İlk komut def. 2 sayısını yazan bir fonksiyon tanımlayalım. Aşağıdaki tanımlamayı sizde yapın.

    >>> def print2():
    ...     print 2
    ...
    >>> print2()
    2
    >>> print2()
    2
    >>>

Tanımlama satırı yazılıp enter'a basıldıktan sonra Python'un prompt'u değiştirdiğine ve içe girik olduğuna dikkat ettiniz mi? Boş bir satır bırakıp enter'a basıldığında da (enter'a üst üste 2 kez basıldığında) Python'un bunu tanımlamamızı bitirdiğimiz şeklinde algıladığına da dikkat etmiş olmalısınız. Bu arada print2() ile `print 2`'nin farkını da görmüş olmalısınız.

Şimdi aşağıdakini deneyelim:

    >>> def print_many():
    ...     print 3
    ...     print 2
    ...     print 1
    ...     print 0
    ...
    >>> print_many()
    3
    2
    1
    0
    >>>

Fonksiyonu tanımlarken boş satır bırakmadığımız müddetçe, Python yeni satır girişleri yapmamızı bekler. Boş bir satır bıraktığımızda da Python fonksiyonu tamamladığımızı kabul eder. Bu nedenle boş satırların Python yorumlayıcısında anlamı vardır. Ama bu durum Reeborg'un dünyası için geçerli değildir. Programınızı Python yorumlayıcısında yazmıyorsanız da durum farklı olacaktır. Her iki durumda da boş satırlar işleme katılmayacaktır.

### Eğer kafanız karıştıysa (if you are confused)

Boş satırlar kafanızı karıştırdı mı? Umutsuzluğa kapılmayın, kısa zamanda buna alışacaksınız. Şimdi daha önceden görmüş olduğumuz Python komutlarıyla devam ediyorum ve if komutu ile başlıyorum.

    >>> if 5 > 4:
    ...     print 5 > 4
    ...
    True
    >>>

5, 4'ten büyük olduğu için Python if bloğunun içindeki ifadeyi yerine getirdi ve 5 > 4 'ün sonucunu "True" olarak verdi. Ama bizim istediğimiz genelde bu değildir. Aşağıdakini deneyin.

    >>> if 5 > 4:
    ...     print "5 > 4"
    ...
    5 > 4
    >>>

İfadeleri çift tırnak ("....") içine alarak Python'da string adı verilen ve sıradan yazı olarak işlem gören (hesaplanmayan) ifadeyi elde ettik. Çift tırnağın içerisinde ne varsa bir işleme tabi tutulmadan ekranda görüntülenir. Aşağıdaki gibi de string kullanabiliriz:

    >>> if 5 > 4:
    ...     print '5 is greater than 4'
    ...
    5 is greater than 4

burada matematiksel semboller yerine kelimeler kullandık, bunun yanı sıra çift tırnak yerine tek tırnak ('....') kullandık. Python çift tırnak ve tek tırnak kullanımını aynı şekilde değerlendirir. Ancak tek tırnak ile başlatılan bir ifade tek tırnakla, çift tırnakla başlatılan bir ifade de çift tırnakla bitirilmelidir. Bu esnekliği aşağıdaki örneklerde olduğu gibi tek tırnakla başlatılmış bir ifadenin içerisinde çift tırnak veya çift tırnakla başlatılan bir ifadenin içerisinde tek tırnak yazdırmak için kullanabiliriz.

    >>> print "It's easy."
    It's easy.
    >>> print 'He said: "It is easy".'
    He said: "It is easy".

Bir string'in içerisinde başlangıç ve bitişte kullanılan tırnağın aynısının yazının içerisinde de gösterilmesi isteniyorsa bu durumda ters slaş (\) kullanılır, aşağıdaki örneklerde olduğu gibi ters slaş tırnak işaretinden hemen önce koyulmalıdır.

    >>> print 'She said: "It\'s easy".'
    She said: "It's easy".

if'e geri dönelim ve else ile birlikte kullanalım.

    >>> if 5 > 4:
    ...    print "5 is greater than 4"
    ... else:
    ...    print "4 is greater than 4"
    ...
    5 is greater than 4

Yukarıdaki çıktı sizin için bir sürpriz olmamalı. Ancak bu kodları kendiniz de mutlaka denemelisiniz. else'i if'le aynı hizaya getirmek için backspace tuşunu kullanmanız gerekecek.

### Biraz daha fonksiyon tanımlayalım

Az önce yazdığımız kodu daha yararlı hale getirelim:

    >>> def greater():
    ...     if 5 > 4:
    ...         print "5 is greater than 4"
    ...     else:
    ...         print "4 is greater than 5"
    ...
    >>> # şimdi kullanalım!
    >>> greater()
    5 is greater than 4

İlerideki konulara geçmeden önce yukarıdaki örneği mutlaka kendiniz deneyin, ve hizalamalara dikkat edin.

Yukarıdaki fonksiyon herhangi iki sayıyı karşılaştırabilseydi daha iyi olmaz mıydı? Bunu yapabilmek için değişkenlerin kullanımını öğrenmeliyiz.

Python toplama yapmayı zaten biliyordu - - Değişkenler