Hazırlayanlar: Eric Roberts'ın ders notlarını temel alır, Zach Birnholz ve Lisa Yan tarafından güncellenmiştir
Çeviren: Ceren Kocaoğullar
Handouts: Karel Reference
File: banish_winter.py
Karel, Stanford / CTU / Koç kampüsünde yürümek ve bahar için biraz bahçe işleri yapmak istiyor. Bahar başladı, ancak kampüs ağaçları henüz bunu fark edemedi ve hala yapraksızlar. Karel, batıdan doğuya doğru kampüs boyunca yürümeli, tüm ağaçları yapay yapraklarla süslemeli ve kampüsü şu şekilde dönüştürmeli:
Sorun karmaşık çünkü Karel her ağacın ne kadar uzun olduğunu ya da ağaçlar arasındaki mesafeleri bilmiyor. Ancak beeper çantasında tüm ağaçları süslemeye başlayan yeterince beeper olduğunu ve dünyanın (CTU kampüsü) 9 boşluk genişliğinde olduğunu biliyor. Yukarıdaki iki anlık görüntüye bakarak program gereksinimini anlamaya çalışın (dünya dosyasının adı banish_winter.w
.) Programınız yalnızca bu dünyada değil, aşağıdaki dünya için de çalışmalıdır (banish_winter2.w
):
Yukarıdaki gereksinimleri karşılayan herhangi bir dünyada çalışan bir programı nasıl yazabiliriz?
from karel.stanfordkarel import * """ File: banish_winter.py ------------------------ Karel should add leaves to the top of each tree in the world from left to right to spruce up campus for the spring. The world is of width 9, but it may have any number of trees of any height. """ def main(): # world is 9 spaces wide, we start on 1 for i in range(8): if front_is_clear(): move() else: fix_tree() def fix_tree(): """ Karel climbs to the top of one tree, adds leaves, and descends the other side of tree. When this function is called, Karel is assumed to be facing east towards the bottom of the tree to fix, and when the function is done Karel will be facing east immediately after the tree which has now been fixed. """ turn_left() climb_tree() turn_right() place_leaves() turn_right() move_to_wall() turn_left() def move_to_wall(): """ Moves in a straight line in the direction Karel is facing until a wall. """ while front_is_clear(): move() def climb_tree(): """ Karel climbs a tree by moving as long as its right is blocked. After this function finishes, Karel will be facing the same direction as it was originally, but will be one space past the last square where its right was blocked. """ while right_is_blocked(): move() def place_leaves(): """ Adds four leaves, in a square pattern to the top of a tree. Assumes Karel is facing east in the bottom left corner of the square it wants to make with beepers. When the function finishes, Karel will be one square to the east facing east, standing on the bottom right corner of a newly-created square of beepers. """ for i in range(4): put_beeper() move() turn_left() move() def turn_right(): """ Karel turns right - e.g. if Karel is facing east, now Karel will face south. If Karel is facing north, Karel will now face east. """ for i in range(3): turn_left() # There is no need to edit code beyond this point if __name__ == "__main__": run_karel_program()