Coding for KidsCoding for Kids
ระดับสร้างสรรค์ความท้าทายคู่มือครู
โหวตสำหรับฟีเจอร์
หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ

การจัดการข้อยกเว้น
ส่วน else

วัตถุประสงค์

เอาวัสดุซ่อมแซมแล้วจัดเรียง จากนั้นกำจัดของเสียที่ไม่ต้องการโดยใช้ else clause พร้อมกับการจัดการข้อยกเว้น

วัสดุซ่อมแซมบางอย่างถูกเก็บไว้ที่ด้านบนของอาคาร โดยใช้ในการซ่อมแซมหลังคาหลังจากพายุหรือการสึกหรอทั่วไป บางอย่างเพิ่งถูกส่งมาและยังคงถูกเก็บในห่อหุ้มและภาชนะบรรจุ ในขณะที่วัสดุบางอย่างถูกเก็บไว้นานและถูกรวมเข้ากับขยะ จึงเป็นความคิดที่ดีที่จะจัดเรียงวัสดุเหล่านี้และเก็บรักษาอย่างเหมาะสม ในขณะที่กำจัดของเสียและของขยะ

เนื่องจากลักษณะของวัสดุที่จัดเก็บแบบไม่เป็นระเบียบ คุณอาจคาดหวังว่าจะเกิดข้อผิดพลาดขึ้นได้ คุณสามารถจัดการกับปัญหานี้ด้วยการใช้บล็อกโค้ด try / except แต่ก็อาจจะยุ่งยากถ้าคุณไม่คุ้นเคยกับข้อผิดพลาดที่อาจเกิดขึ้น อย่างไรก็ตามคุณสามารถเพิ่มเครื่องมือจัดการข้อยกเว้นของคุณด้วยการเพิ่ม clause else ซึ่งจะช่วยให้คุณเรียกใช้โค้ดในกรณีที่บล็อก except ไม่ถูกดำเนินการ ช่วยให้โค้ดของคุณเป็นระบบและเหมาะสำหรับการระบุและแก้ไขข้อผิดพลาด

เริ่มต้นด้วยการเดินเข้าไปในห้องเก็บของฝั่งซ้ายแล้วเดินไปยังเครื่องหมาย X ที่สว่าง ห้องนี้เก็บกระเบื้องหลังคาที่ใช้ซ่อมแซม หลังจากนั้นใช้ฟังก์ชัน collect() เพื่อหยิบค่าคงที่แบบลิสต์ที่ชื่อ shingles

ลิสต์นี้อาจมีวัสดุขยะหลายอย่างผสมอยู่ซึ่งต้องนำออก ทั้งนี้วัสดุเหล่านี้ถูกจัดเก็บในหก (6) ช่องที่แตกต่างกัน โดยแต่ละช่องมีปริมาณวัสดุของตนเอง คุณจำเป็นต้องรวมวัสดุทั้งหมดเข้าด้วยกันเป็นกองเดียว สร้างตัวแปรชื่อ red_storage เพื่อเก็บวัสดุทั้งหมดและลิสต์ชื่อ junk เพื่อเก็บวัสดุของเสีย

โดยปกติแล้วคุณจะระบุวัสดุ แปลงให้เป็นตัวเลขจำนวนเต็มด้วย int() แล้วเก็บไว้ในตัวแปรเพื่อที่จะนำไปจัดเก็บ แต่เช่นที่คาดไว้จากระดับก่อนหน้าในบทนี้และหัวข้อของแบบฝึกหัดนี้ ข้อผิดพลาดเป็นสิ่งที่หลีกเลี่ยงไม่ได้

for x in range(6): player.speak(int(shingles[x])) red_storage+=int(shingles[x])

น่าเสียดายที่โค้ดด้านบนจะสร้าง Value Error เนื่องจากบางรายการในลิสต์ดูเหมือนว่าจะไม่ใช่ตัวเลข เพื่อแก้ไขปัญหานี้ คุณสามารถใช้บล็อกโค้ด try / except และ else ในการจัดเรียงวัสดุ โดยการใช้บล็อก else เราจะเปลี่ยนบล็อก except ให้ทำหน้าที่เป็นตัวกรองที่ช่วยคัดแยกองค์ประกอบที่ไม่ต้องการออกจากลิสต์ ในขณะที่บล็อก else จะดักจับและถ่ายโอนองค์ประกอบที่ใช้ได้เข้าสู่อาร์เรย์ที่เราสร้างไว้

for x in range(6): try: player.speak(int(shingles[x])) except: player.speak("Item %s is junk" % (x)) junk.append(shingles[x]) else: red_storage+=int(shingles[x])

ด้วยวิธีนี้ ตัวแปร red_storage จะมีกระเบื้องหลังคาที่ใช้ได้ทั้งหมด ในขณะที่ของเสียทั้งหมดจะถูกเก็บในลิสต์ junk เดินไปยังเครื่องหมาย X สีทองในห้องเก็บของฝั่งซ้ายที่คุณอยู่ตอนนี้ แล้วหันหน้าไปที่โต๊ะและใช้ฟังก์ชัน write() เพื่อบันทึกจำนวนกระเบื้องสำหรับการจัดเก็บ เช่นนี้: await player.write("There are %s shingles ready for use in storage" % (red_storage)) หลังจากนั้นให้เดินไปยังเครื่องหมาย X สีเข้มบนพรมสีแดง และใช้ฟังก์ชัน place() เพื่อจัดเก็บตัวแปร red_storage ในกล่อง

เมื่อภารกิจนี้เสร็จสิ้นแล้ว ให้เดินไปยังห้องเก็บของฝั่งขวา ซึ่งในห้องนี้เก็บแผ่นไม้และวัสดุที่จำเป็นสำหรับซ่อมแซมโครงสร้างหลังคาและผนัง มุ่งหน้าไปยังเครื่องหมาย X สีเข้มบนพรมสีเขียวแล้วใช้ฟังก์ชัน collect() เพื่อหยิบค่าคงที่แบบลิสต์ที่ชื่อ planks_set จากกล่อง ซึ่งลิสต์นี้ประกอบด้วยแผ่นไม้ที่ถูกทำความสะอาดจากของเสียแล้ว จากนั้นเดินไปยังเครื่องหมาย X ที่สว่างถัดไป และใช้ฟังก์ชัน collect() อีกครั้งเพื่อหยิบค่าคงที่แบบลิสต์ที่ชื่อ shipment ซึ่งเป็นวัสดุแผ่นไม้ที่เพิ่งจัดส่งมาและยังคงมีของเสียปนอยู่

เช่นเดียวกับในห้องก่อนหน้า ลิสต์ shipment น่าจะมีวัสดุขยะหลายอย่างผสมอยู่ซึ่งต้องถูกกำจัดออก เช่นเดียวกับที่เก็บในหก (6) ช่องที่แตกต่างกันโดยแต่ละช่องมีปริมาณวัสดุของตนเอง สร้างตัวแปรชื่อ blue_storage เพื่อเก็บวัสดุทั้งหมดเพื่อรวมเป็นกองเดียวกัน โดยที่วัสดุของเสียจะถูกเก็บในลิสต์ junk

สำหรับแผ่นไม้ เราจะทำการแปลงและเพิ่มวัสดุที่ใช้งานได้ทั้งหมดในลิสต์ shipment แล้วเพิ่มเข้าไปในลิสต์ planks_set จากนั้นจึงรวมทั้งหมดโดยใช้ int() ในตัวแปร blue_storage อย่างไรก็ตาม เช่นเดียวกับก่อนหน้า ข้อผิดพลาดเป็นสิ่งที่คาดว่าจะเกิดขึ้น

for y in range(6): planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) blue_storage+=int(planks_set[y])

ในครั้งนี้คุณอาจจะพบกับ Type Error ซึ่งเกิดขึ้นเมื่อพยายามบวกตัวเลขกับสตริงเข้าด้วยกัน สามารถแก้ไขปัญหานี้ได้โดยใช้บล็อก try / except และ else อีกครั้ง โดยที่บล็อก try จะทำการบวกลิสต์เข้าด้วยกัน บล็อก except จะทำหน้าที่กรองของเสียออกจากลิสต์ และ clause else จะเพิ่มแผ่นไม้เข้าสู่ blue_storage

for y in range(6): try: planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) except: player.speak( "Item %s is junk. Slot only has %s items" % (y,planks_set[y])) junk.append(shipment[y]) else: blue_storage+=int(planks_set[y])

เมื่อที่ตัวแปร blue_storage ได้ถูกเติมเต็มแล้ว คุณสามารถบันทึกและจัดเก็บแผ่นไม้ทั้งหมดได้ เดินไปยังเครื่องหมาย X สีทองในห้องเก็บของฝั่งขวาที่คุณอยู่ หันหน้าไปที่โต๊ะแล้วใช้ฟังก์ชัน write() เพื่อสรุปวัสดุที่คุณได้รวมเข้าด้วยกัน ดังนี้: await player.write("There are %s planks ready for use in storage" % (blue_storage))

เพื่อสรุประดับนี้ ให้เดินไปยังเครื่องหมาย X สีเข้มบนพรมสีน้ำเงินแล้วใช้ฟังก์ชัน place() เพื่อจัดเก็บตัวแปร blue_storage ลงในกล่อง จากนั้นเดินไปยังเครื่องหมาย X สีเข้มบนพรมสีม่วงในห้องกลางแล้วใช้ฟังก์ชัน place() เพื่อกำจัดลิสต์ junk ลงในท่อขยะ ทำให้ภารกิจของคุณสำเร็จ

หนังสือโค้ด