## 32. Many returns

Bildiğiniz gibi Reeborg çok iyi bir durumda değil. Yalnızca sola dönebilir, duvarları önüne geldiğinde görebilir, bipleri üstünde olduğu zaman duyabilir ve yağ sızdırır. Reeborg'un birde pusulası (kırık da olsa) vardır ve bununla kuzeye dönük olup olmadığını anlayabilir. Pusulayı kullanmak için`facing_north` testini kullanabilirsiniz.

### Deneyin!

Reeborg'un yüzü kuzey'e dönünceye kadar sola dönmesini sağlayan kısa bir program yazın. Reeborg'un başlangıç pozisyonu ne olursa olsun yazdığınız program doğru çalışmalıdır.

### Bir fonksiyondan sonuçları almak

Reeborg'un yaptığı testler aslında Python fonksiyonlarıdır. Bu fonksiyonlar bizim şimdiye kadar gördüklerimizden farklı olarak, bir sonuç göstermek yerine bir cevap verirler (True veya False) ve bu cevaba göre işlem yapılır. Bizim gördüğümüz fonksiyonlara benzer bir şeyler yapmak için return komutunu kullanabiliriz. Örnek:

    >>> def add(a, b):
    ...     answer = a + b
    ...     return answer
    ...
    >>> c = add(4, 5)
    >>> print c
    9
    >>> # Sonucu ekrana direk yazdırabiliriz
    >>> print add(1, 1)
    2

Yukarıdaki örnekte `add()` fonksiyonunu bir satır daha kısa bir şekilde aşağıdaki gibi yazabiliriz:

    >>> def add(a, b):
    ...     return a + b
    ...
    >>> c = add(4, 5)
    >>> print c
    9

return komutu yalnızca bir değişkenin değerini değil geçerli bir Python ifadesinin sonucunu da geri döndürebilir. Eğer değerini geri döndürmek istediğiniz ifade kısa ise ekstra bir değişken kullanmak istemeyebilirsiniz (yukarıdaki answer değişkeni gibi). Ancak, ileride göreceğiniz gibi bazen bir değişkenden daha fazla sonuç geri döndürmek isteyebilirsiniz. Bu durumda ifade kullanmak yerine değişken kullanmak daha kolay olabilir.

### Reeborg'un dünyasına dönüş (returning to Reeborg's world)

Dersin başında bahsettiğimiz gibi Reeborg'un kırık bir pusulası vardır. Bu nedenle yalnızca kuzeye dönük olup olmadığını bilebilir. Artık, Reeborg'un aklında bir şeyler tutabileceğini öğrendiğimize göre, ona hangi yöne doğru baktığını öğretebiliriz. Örneğin:

    def facing_south():
        turn_left()
        turn_left()
        answer = facing_north()
        turn_left()
        turn_left()
        return answer

Bunun nasıl çalıştığını iki durumu incelerek anlayalım:

- Reeborg'un güneye baktığını varsayalım. İki sola dönüşten sonra, kuzeye bakar. `facing_north()` testi "`True`" değerini verir ve bu da cevap değişkenine atanır. İki kez daha sola döndükten sonra güneye bakar (orjinal pozisyonuna geri döner) ve "`True`" değeri geri döndürülür.
- Reeborg'un güneye bakmadığını varsayalım Bu durumda iki sola dönüşten sonra kuzeye bakmayacaktır ve `answer` değişkenine "`False`" değeri atanacaktır. İki kez daha sola döndükten sonra yine güneye bakmayacak ve sonrasında "`False`" değeri geri döndürülecektir.

Artık Reeborg'un güneye bakıp bakmadığını anlamak için yeni testimizi kullanabiliriz:

    while not facing_south():
        turn_left()

### Küçük test

Reeborg'un yüzünü batıya dönmesini sağlayan bir program yazın. Reeborg'un başlangıç pozisyonu ne olursa olsun yazdığınız program doğru çalışmalıdır. Reeborg farklı başlangıç pozisyonlarındayken programınızı deneyin.

### Küçük test 2

Boş bir dünyada Reeborg'u yüzü herhangi bir yöne doğru olacak şekilde herhangi bir noktaya koyun. Reeborg'u buradan her zamanki başlangıç noktasına getiren ve yüzünü doğuya çeviren bir program yazın. Bu program Reeborg nereye hangi pozisyonda yerleştirilirse yerleştirilsin doğru olarak çalışmalıdır.

Globalleştirme kötü bir şeydir. - - Repeat() bazı Python komutlarını gizler