14. if, else, if, else,...

Bir önceki engelli atlama alıştırmasında üç seçimlik vermek istediğimizden dolayı (bitir, git veya zıpla) iç içe iki tane if/else kullanmamız gerekti. Buda yazılan kodun içe içe yazılmasını mecbur hale getirdi. Reeborg'a 10 ayrı seçimlik vermemiz gerekseydi ne olurdu; kodlar içe içe yazılacağından okunması bir hayli zor olacaktı. Bu durumu ortadan kaldırmak için  Guido van Rossum, Python'un yaratıcısı,   else den sonra kullanılan  if leri temsil etmek için  elif adında bir komut hazırlamıştır. elif komutu else if in kısaltılmışıdır. Bu yeni komut yardımıyla az önceki kod aşağıdaki gibi yazılabilir:

def move_jump_or_finish():
    if next_to_beeper():
        turn_off()
    elif front_is_clear():
        move()
    else:
        jump_one_hurdle()

Üç seçimlik olduğunu şimdi daha rahat görebiliyoruz, seçimlikler aynı hizada yazılmışlar. else den sonraki komutun çalıştırılabilmesi için kendisinden önce gelen tüm şartların (next_to_beeper ve front_is_clear) False olması gerekir. Daha fazla seçimliğimiz olsaydı tek yapmamız gereken yeni  elif 'ler eklemek olacaktı. 

def move_jump_or_finish():
    if next_to_beeper():
        turn_off()
    elif front_is_clear():
        move()
    elif right_is_clear(): # her zaman false
        pass 
    else:
        jump_one_hurdle()

Reeborg en alt duvarın üstünde hareket ettiğinden sağında her zaman bir duvar vardır. Bu nedenle right_is_clear() her zaman False sonucunu verir ve pass (Phytonda hiç bir şey yapma anlamına gelir) komutu hiç bir zaman yerine getirilmez. Bunun yerine left_is_clear() kullanılsaydı True değerini alacağından Reeborg takılıp kalacak ve hiç bir şey yapmayacaktı.  Bunu deneyin!

Sıra sizde

if, elif, else kullanarak yeni bir program yazın bu program önceki iki alıştırmadaki engellerle çalıştığı gibi aşağıdaki şekildeki engellerle de çalışabilsin. (dünya dosyası hurdles3.wld).

hurdles start
previous Beni dinle yoksa  ... or else .... - home - Doğru değil Not true!? next