เพื่อที่จะให้เห็นความสามารถพิเศษที่ได้เพิ่มเติมหลังจากการประกาศฟังก์ชันใหม่ จะเพิ่มเงื่อนไขให้หุ่นยนต์คาเรลทำงานมากขึ้น จากภาพโลกของคาเรลด้านล่าง ถ้าต้องการให้คาเรลเดินบนถนนแถวที่ 2 จากซ้ายไปขวา โดยมีเงื่อนไขว่า ในกรณีที่มีช่องว่างทางด้านขวา หุ่นยนต์คาเรลจะต้องนำเหรียญไปวางแทนที่ช่องว่างจนเต็มก่อนที่จะเดินผ่านไป
ถ้าผู้ใช้ถูกจำกัดให้ใช้คำสั่งได้เพียง 4 คำสั่งพื้นฐานของคาเรล ลำดับคำสั่งในฟังก์ชัน main()
สำหรับแก้ปัญหานี้
จะมีลักษณะตามโปรแกรมดังนี้:
def main():
move()
turn_left()
turn_left()
turn_left()
move()
put_beeper()
turn_left()
turn_left()
move()
turn_left()
turn_left()
turn_left()
move()
บทก่อนหน้านี้ ผู้ใช้ได้ทำการสร้างฟังก์ชัน turn_right()
เพื่อลดการให้ลำดับคำสั่งดูซับซ้อนมากขึ้นเมื่อต้องคอยสั่ง
turn_left()
สามครั้งสำหรับการหันขวา การประกาศฟังก์ชันใหม่มีประโยชน์สำคัญอีกอย่างคือ
สามารถแบ่งลำดับคำสั่งงานที่มีความซับซ้อนให้มีขนาดเล็กลงได้
จากตัวอย่างเงื่อนไขข้างต้น ผู้บังคับหุ่นสามารถกำหนดให้คาเรลทำงานเป็นลำดับขั้นแบบนี้ได้:
ถ้าจะเขียนโปรแกรมโดยวางวิธีแก้ปัญหาไว้แบบนี้ ผู้ใช้สามารถสร้างฟังก์ชัน main
ออกมาได้ประมาณนี้
def main():
move()
fill_pothole()
move()
ตอนนี้ลำดับคำสั่งสำหรับควบคุมคาเรลนั้นดูดี เข้าใจง่าย ติดปัญหาเพียงตรงที่ จะทำอย่างไรให้คาเรลเข้าใจคำสั่ง fill_pothole() เพื่อที่จะอุดรูกำแพง จากเทคนิคการประกาศฟังก์ชันในบทก่อนหน้านี้ สามารถทำให้คาเรลเข้าใจคำสั่ง fill_pothole() ด้วยการประกาศฟังก์ชันนี้ขึ้นมา พร้อมกับใส่ลำดับคำสั่งเพื่อเอาเหรียญไปอุดรูกำแพง ฟังก์ชัน fill_pothole() ก็จะมีลักษณะดังภาพ
def fill_pothole():
turn_right()
move()
put_beeper()
turn_around()
move()
turn_right()
ข้างล่างคือตัวอย่างโปรแกรมที่คาเรลเดินเอาเหรียญไปอุดรูกำแพง โดยผู้ใช้สามารถเขียนฟังก์ชันที่มนุษย์พอจะเข้าใจได้ง่าย และคาเรลก็สามารถทำงานได้ตรงตามที่ได้โปรแกรมไว้ ลองกดปุ่ม “Run Program” แล้วสังเกตลำดับการทำงานของหุ่นยนต์โดยดูจากไฮไลท์ที่แสดงในหน้าต่าง IDE