Bir önceki problemde sorun yaşamamızın nedeni önce bip'i bıraktığımızdan dolayı while döngüsünün hiç bir zaman çalışmamasıdır. while döngüsünün çalışabilmesi için bir bip'in yanında olmamamız gerekiyor, oysa biz hep bir bip'in yanında kalıyoruz. Bir move()komutu ekleyerek bu hatayı giderebiliriz.
put_beeper() move() while not next_to_a_beeper(): if front_is_clear(): move() else: turn_left() turn_off()
Deneyin!
Yazdığımız programı aşağıdaki dünyada deneyelim. Bu dünyayı kendiniz kolaylıkla yaratabilirsiniz, yaratın ve kaydedin.
Programı denediğinizde tam olarak istediğinizi yapmadığını göreceksiniz. Reeborg aşağıda olduğu gibi yolunu kısa yoldan tamamlar.
Reeborg ileriye gitmeye veya sola dönmeye programlandığından, program istediğimiz gibi çalışmaz. Böyle durumlarla karşılaştığında Reeborg'un sağa dönmesi gereklidir. Önce sağında duvar olup olmadığını kontrol etmeli ve eğer yoksa sağa dönmelidir. Aşağıda bunu yapmaya çalışan bir program görüyorsunuz:
def turn_right(): repeat(turn_left, 3) put_beeper() move() while not next_to_a_beeper(): if right_is_clear(): turn_right() elif front_is_clear(): move() else: turn_left() turn_off()
Çalıştı mı? Programı dikkatlice inceleyin ve eğer gerekiyorsa gerekli değişikliği yapın.