แบบฝึกหัด: คาเรล#
ก่อนเริ่ม#
ติดตั้งไลบรารี stanfordkarel
#
ก่อนเริ่มให้ติดตั้งคาเรล โดยการ (สำหรับ Windows) เปิด Anaconda prompt (สำหรับ Mac) เปิด Terminal และพิมพ์ pip install stanfordkarel
แล้วกด Enter ถ้าลงโปรแกรมสำเร็จจะขึ้นว่า Successfully installed
ทดลองเขียนและรันโปรแกรมบน VSCode#
จากนั้นจึงเริ่มดาวน์โหลดไฟล์โค้ดตั้งต้นและลองทดสอบการติดตั้ง โดยมีวิธีดังนี้
ดาวน์โหลด attapol/programming-nlp-book
ขยาย zip file ไปที่โฟลเดอร์ใดก็ได้บนเครื่อง
เปิด Visual studio code กด Open Folder .. แล้วเลือกโฟลเดอร์จากขั้นตอนที่แล้ว (karel-exercise)
คลิกแถบฟ้ามุมขวาล่างที่เขียนว่า Python 3.x (ให้คลิกตรงตัวเลข) แล้วจะมีแถบด้านบนเด้งออกมาให้เลือกตัว interpreter สำหรับการเขียนโค้ดในโฟลเดอร์นี้ เพราะว่าบางเครื่องอาจจะมี interpreter ติดตั้งไว้แล้วหลายตัว ให้เราเลือก Python interpreter ที่เขียนว่า anaconda3 ซึ่งก็คือ Python interpreter ที่มากับ anaconda ที่เรา install ไว้
ทดสอบโดยการรันโค้ด ให้คลิกขวาบนไฟล์ที่ต้องการจะรันที่อยู่ 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 หลาย ๆ แบบ