Coding for KidsCoding for Kids
Cấp Độ Sáng TạoThử TháchHướng Dẫn Giáo Viên
Bình chọn tính năng
Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ

Xử lý Ngoại lệ
Nhiều ngoại lệ

Mục tiêu

Thu thập và lưu trữ chính xác một số vật tư y tế trong các thùng bằng cách sử dụng nhiều ngoại lệ.

Các kho trên mái cần được bổ sung, một số vật tư đã được sử dụng nhưng chưa được thay thế. Có một đơn đặt hàng cho nhiều vật liệu được ghi trong một biên bản ở một trong các kho, sẽ là ý tưởng hay nếu xử lý việc này. Điều đó có nghĩa là có một loạt các loại vật liệu khác nhau cần được kết hợp và lưu trữ trong các thùng.

Vì các kiểu dữ liệu khác nhau và số lượng vật liệu cần để lấp đầy các thùng, chúng ta có thể gặp phải nhiều lỗi khác nhau. Chúng ta có thể sử dụng try / except để bắt bất kỳ lỗi nào có thể xảy ra và khắc phục một số vấn đề, nhưng điều gì sẽ xảy ra khi có nhiều lỗi có thể gặp phải trong một thao tác duy nhất? Để giải quyết vấn đề này, chúng ta có thể chỉ định các ngoại lệ mà chúng ta đang cố gắng bắt và sử dụng nhiều ngoại lệ.

Để bắt đầu, hãy đi đến dấu X vàng và quay mặt về phía cửa, sử dụng hàm open() để vào kho. Một khi vào bên trong, hãy đi đến dấu X tối và quay sang phải để sử dụng hàm read() và kiểm tra xem các vật liệu và số lượng nào đang được đặt hàng trong biên bản trên bàn. Thông tin về các hằng số danh sách được viết trong biên bản, bao gồm các vật tư và đơn hàng của chúng. Khi hoàn thành, hãy đi đến dấu X sáng trong kho, quay sang thùng và lấy hằng số danh sách pads chứa các vật liệu bên trong bằng cách sử dụng hàm collect(), như sau: player.collect(pads) .

Bên trong kho có các kho chứa "peroxide" và "isopropyl". Hãy đi và thu thập tất cả chúng sau đó ra ngoài và hướng đến dấu X tối trên thảm màu tím. Trên thảm màu tím, khi quay mặt về phía thùng, hãy sử dụng hàm collect() để lấy "water bottle", tiếp tục di chuyển đến dấu X tối trên thảm màu vàng và sử dụng hàm collect() để lấy "glass bottle".

Bây giờ các vật phẩm đã được thu thập, đã đến lúc thực hiện đơn hàng và đặt tất cả các vật liệu bên trong các thùng kho ở bên phải. Để làm điều này, trước tiên chúng ta sẽ lưu trữ: "water bottle", "peroxide" và "isopropyl" trong một danh sách có tên supplies. Trên các dấu X tối trên thảm màu red, greenblue, chúng ta sẽ sử dụng các thùng để lưu trữ các vật tư y tế. Để làm điều này, chúng ta sẽ thiết lập ba danh sách: blue_crate = [], green_crate = []red_crate = [].

Trước khi đặt tất cả các vật phẩm, chúng ta phải điền đầy tất cả các danh sách với các vật liệu, đối với việc này chúng ta sẽ sử dụng một vòng lặp để lặp qua các danh sách và kết hợp chúng thành một danh sách duy nhất. Điều này sẽ đưa tất cả supplies vào danh sách và sẽ chia số lượng các vật phẩm pads theo order trong biên bản trong kho.

for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])

Mặc dù vậy, bạn sẽ nhận thấy rằng các lỗi sẽ xuất hiện, mặc dù mọi thứ được thực hiện đúng và mã lập trình ổn. Tuy nhiên, đây là vấn đề, danh sách supplies chỉ có ba (3) vật phẩm, nhưng vòng lặp chạy năm (5) lần gây ra lỗi Index Error. Trong khi đó, đối với danh sách pads không chỉ có ba (3) vật phẩm mà còn có một trong các giá trị đơn hàng là 0, bất kỳ số nào chia cho 0 sẽ gây ra lỗi Zero Division Error vì không số nào có thể chia cho 0 trong toán học.

Đây chính là lúc các ngoại lệ đa dạng có ích, chúng ta sử dụng các khối mã try / except để bắt các lỗi và cho phép chúng ta tiếp tục với mã. Vì có hai lỗi xảy ra, chúng ta phải xác định từng lỗi để bắt các ngoại lệ cụ thể. Điều này được thực hiện bằng cách mở rộng các khối mã except theo cách sau: except IndexError:except ZeroDivisionError:. Ví dụ:

for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)

Lỗi Index Error được khắc phục bằng cách điền vào những vị trí thiếu trong danh sách với "glass bottle" và lỗi Zero Division Error được giải quyết bằng cách thêm giá trị 0 nếu hành động không hợp pháp xảy ra.

Hãy làm điều này cho các danh sách blue_crate = [], green_crate = []red_crate = []. Đi đến dấu X tối trên thảm màu blue, greenred và sử dụng hàm place() để lưu trữ các danh sách vào các thùng tương ứng nhằm hoàn thành cấp độ.

Sách Mã