แบบฝึกหัด: คาเรล#

ก่อนเริ่ม#

ติดตั้งไลบรารี stanfordkarel#

ก่อนเริ่มให้ติดตั้งคาเรล โดยการ (สำหรับ Windows) เปิด Anaconda prompt (สำหรับ Mac) เปิด Terminal และพิมพ์ pip install stanfordkarel แล้วกด Enter ถ้าลงโปรแกรมสำเร็จจะขึ้นว่า Successfully installed

ทดลองเขียนและรันโปรแกรมบน VSCode#

จากนั้นจึงเริ่มดาวน์โหลดไฟล์โค้ดตั้งต้นและลองทดสอบการติดตั้ง โดยมีวิธีดังนี้

  1. ดาวน์โหลด attapol/programming-nlp-book

  2. ขยาย zip file ไปที่โฟลเดอร์ใดก็ได้บนเครื่อง

  3. เปิด Visual studio code กด Open Folder .. แล้วเลือกโฟลเดอร์จากขั้นตอนที่แล้ว (karel-exercise)

  4. คลิกแถบฟ้ามุมขวาล่างที่เขียนว่า Python 3.x (ให้คลิกตรงตัวเลข) แล้วจะมีแถบด้านบนเด้งออกมาให้เลือกตัว interpreter สำหรับการเขียนโค้ดในโฟลเดอร์นี้ เพราะว่าบางเครื่องอาจจะมี interpreter ติดตั้งไว้แล้วหลายตัว ให้เราเลือก Python interpreter ที่เขียนว่า anaconda3 ซึ่งก็คือ Python interpreter ที่มากับ anaconda ที่เรา install ไว้

  5. ทดสอบโดยการรันโค้ด ให้คลิกขวาบนไฟล์ที่ต้องการจะรันที่อยู่ Editor Tab ทางซ้าย เช่น collect_newspaper_karel.py แล้วกด Run Python File on Terminal ถ้าหน้าต่างคาเรลเปิดขึ้นมา แสดงว่าติดตั้งโปรแกรมต่าง ๆ สำเร็จ

เมื่อจะเริ่มเขียนโค้ดให้ลบ pass ออกไปก่อน และเริ่มแก้ def main(): หรือเพิ่มฟังก์ชันต่าง ๆ เข้าไป ทุกครั้งที่แก้โค้ด ต้องเซฟโค้ดให้เรียบร้อยและปิดหน้าต่างคาเรลก่อนที่จะรันโค้ดใหม่อีกครั้ง หากต้องการทดสอบกับ world แบบอื่น ๆ ให้ลองกด Load world เพื่อเลือกไฟล์ที่ต้องการทดสอบ

โจทย์แบบฝึกหัด#

ข้อ 1#

collect_newspaper_karel.py จงเขียนโปรแกรมสั่งให้คาเรลหยิบ beeper และเดินกลับมาที่เดิม โดยให้เขียนฟังก์ชันย่อยตามหลักการย่อยโจทย์ (decomposition) เพื่อทำให้โค้ดดูสะอาดตา อ่านง่ายเข้าใจง่ายขึ้น

ข้อ 2#

corner_to_corner_karel.py จงเขียนโปรแกรมสั่งให้คาเรล วิ่งจากจุดเริ่มต้นที่มุมซ้ายล่างไปมุมขวาบน โดยที่เราไม่รู้ว่า world จะมีขนาดเท่าไร ให้ลองทดสอบกับ world หลาย ๆ แบบ

ข้อ 3#

four_corner_karel.py จงเขียนโปรแกรมสั่งให้คาเรลวาง beeper ไปทั้งสี่มุม มุมละ 3 beeper โดยที่เราไม่รู้ว่า world จะมีขนาดเท่าไร ให้ลองทดสอบกับ world หลาย ๆ แบบ

ข้อ 4#

roomba_karel.py จงเขียนโปรแกรมสั่งให้คาเรลเก็บ beeper ที่กระจัดกระจายอยู่ทั้งห้อง โดยโปรแกรมจะต้องทำงานทั้ง roomba_karel.w และ roomba_karel2.w

ข้อ 5#

alternate_beeper.py จงเขียนโปรแกรมสั่งให้คาเรลวาง beeper แบบช่องเว้นช่องเฉพาะแถวล่าง โดยที่เราไม่รู้ว่า world จะมีขนาดเท่าไร ให้ลองทดสอบกับ world หลาย ๆ แบบ