Bir önceki derste gördüğümüz Kural #3 çok önemlidir, bu nedenle bu konuyu tekrar etme zorunluluğu hissediyorum.
Gazete dağıtımına en son getirdiğimiz çözümde az da olsa tekrarlar vardı. Örneğin turn_left()komutu turn_right()'ı tanımlayabilmek için ardı ardına üç kez kullanıldı. Benzer şekilde climb_up_four_stairs()'in tanımlanmasında climb_up_one_stair()dört kez kullanıldı. Bu 3 numaralı kurala ters düşüyor. Bu tekrarlardan kaçınmanın bir yolu Reeborg'un özel bir komut yardımıyla işlemleri tekrar etmesini sağlamak olabilir.
Reeborg'un bir işlemi tekrar etmesini sağlamak için
repeat() komutunu kullanabiliriz:
repeat( işlemin adı, kaç kez yapılacağı)
işlemin adı parantez kullanılmadan belirtilmelidir:
def turn_right():
repeat(turn_left, 3)
Gazete dağıtımı programında repeat() komutunu kullanabildiğiniz her yerde kullanın ve daha kısa bir program elde edin. Programın doğru çalıştığından emin olun.
Bu dersi bir kaç alıştırmayla bitireceğiz. Bu dersin temasına uygun olarak, ilk iki alıştırmamız duvarları yapmak dersindeki alıştırmaların tekrarı olacak. Bunları çözebilmek için yeni öğrendiğiniz komutları [def, repeat()] kullanmalısınız
Reeborg engelli atlama yarışmasına katılıyor. Aşağıdaki şekillerde olduğu gibi Reeborg'un yarışmayı hızlı bir şekilde tamamlamasını sağlayan YENİ bir program yazın, dünya dosyası hurdles1.wld.
jump_hurdle()(engel atla) adında aşağıdaki şekildeki gibi hareket eden yeni bir komut tanımlamak yararlı olacaktır.
Yeni programınızı bir önceki ile karşılaştırın. [Kaydetmiştiniz, değil mi?]
Hasat zamanı! Reeborg'un evinin bahçesindeki havuçları (bipler) toplamasını sağlayan bir program yazınız, dünya dosyası harvest1.wld.
Programınız aşağıdaki komutları tanımlamalıdır.
move_to_first_row() harvest_two_rows() move_right_to_next_row()
Bu komutları aşağıda olduğu gibi daha çok parçaya ayırabilirsiniz.
def harvest_two_rows():
harvest_one_row()
move_left_to_next_row()
harvest_one_row()
tabi bunu iyi bir harvest_one_row()
tanımlamasıyla elde
edebilirsiniz. Parçalara ayırma işlemini kendi mantığınıza göre de
yapabilirsiniz. Benim çözümüm aşağıdaki gibi, üç yeni tanımlamaya ihtiyaç var ve
az da olsa hala tekrarlama var:
move_to_first_row() harvest_two_rows() move_right_to_next_row() harvest_two_rows() move_right_to_next_row() harvest_two_rows() turn_off()
Yeni programınızı bir önceki ile karşılaştırın.
Yine hasat zamanı! Ancak bu defa satırlar diagonal bir şekilde yerleştirilmiş. Reeborg'un biplerle temsil edilen tüm havuçları toplamasını sağlayın. Dünya dosyası harvest2.wld.
Bir önceki örnekte de olduğu gibi, programınız aşağıdaki komutları içeren tanımlamaları yapabilir:
move_to_first_row() harvest_two_rows() move_right_to_next_row()
Bu komutların tanımlamaları, öncekilerden farklı olacaktır. Ancak bu tanımlamalar doğru olarak yapıldıktan sonra, programınız az önceki örnekte olduğu gibi aşağıdaki gibi yazılabilir:
move_to_first_row() harvest_two_rows() move_right_to_next_row() harvest_two_rows() move_right_to_next_row() harvest_two_rows() turn_off()
Dikkat, duvara çarpmayın! Hasata nereden ve hangi yönde başlayacağınızı düşünün. Bunu bir kağıda çizmeniz size yardımcı olur.