Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Xử lý Ngoại lệ
Câu lệnh else
Mục tiêu
Lấy các vật liệu sửa chữa và sắp xếp chúng, sau đó loại bỏ chất thải không cần thiết bằng cách sử dụng câu lệnh else với xử lý ngoại lệ.
Một số vật liệu sửa chữa đã được lưu trữ ở trên đỉnh tòa nhà, được sử dụng để sửa chữa mái nhà sau bão hoặc hao mòn chung. Một số được giao gần đây và vẫn được lưu trữ trong các gói bọc và thùng chứa, trong khi những vật liệu khác đã được lưu trữ rất lâu và bị ném chung với rác. Sẽ là một ý tưởng hay nếu sắp xếp các vật liệu và lưu trữ đúng cách các vật liệu, đồng thời loại bỏ rác và chất thải.
Do tính chất của các vật liệu không được sắp xếp, bạn có thể dự đoán sẽ gặp phải lỗi. Bạn có thể giải quyết vấn đề này với khối lệnh try / except tuy nhiên nó có thể hơi khó nếu bạn chưa quen với những lỗi có thể gặp phải. Tuy nhiên, bạn có thể mở rộng công cụ xử lý ngoại lệ của mình bằng cách thêm câu lệnh else. Điều này cho phép bạn thực hiện mã nếu khối except không được chạy, giúp hợp lý hóa mã của mình và rất thích hợp khi xác định và dọn dẹp các lỗi.
Để bắt đầu, bạn nên đi vào kho bên tay trái và di chuyển về phía dấu X sáng. Phòng này lưu trữ ngói dùng để sửa các viên ngói. Sử dụng hàm collect() để nhặt hẳn danh sách hằng số có tên là shingles.
Danh sách này có khả năng chứa một số vật liệu rác lẫn vào, cần được loại bỏ, hơn nữa chúng được lưu trữ trong sáu (6) ngăn khác nhau, mỗi ngăn chứa một lượng vật liệu riêng. Bạn cần hợp nhất tất cả các vật liệu thành một chồng duy nhất. Tạo một biến có tên red_storage để lưu trữ tất cả các vật liệu và một danh sách có tên junk để bạn có thể đặt tất cả các chất thải.
Thông thường, bạn chỉ cần xác định các vật liệu, chuyển đổi chúng thành số nguyên bằng int() và lưu chúng vào một biến để bạn có thể cất đi. Nhưng như bạn có thể đã dự đoán, xét với các mức trước trong chương và chủ đề của bài tập này, một lỗi chắc chắn sẽ xảy ra.
for x in range(6): player.speak(int(shingles[x])) red_storage+=int(shingles[x])
Điều này, thật không may, sẽ tạo ra một Value Error, vì một số mục trong danh sách dường như không phải là số. Để khắc phục điều này, bạn có thể sử dụng các khối lệnh try / except và else để sắp xếp các vật liệu. Bằng cách sử dụng khối else chúng ta đã hiệu quả biến khối except thành một bộ lọc loại bỏ các phần tử không mong muốn trong danh sách trong khi khối else bắt và chuyển các phần tử tốt của danh sách vào biến mà chúng ta đã tạo.
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])
Với cách này, biến red_storage bây giờ có tất cả các ngói có thể sử dụng được, trong khi tất cả rác đã được thêm vào danh sách junk. Hãy đi đến dấu X vàng trong kho bên trái bạn đang đứng, và sử dụng hàm write() để ghi lại số lượng ngói để lưu trữ, như sau: await player.write("There are %s shingles ready for use in storage" % (red_storage)) Sau đó, hãy đi đến dấu X đậm trên thảm đỏ và sử dụng hàm place() để lưu trữ biến red_storage vào thùng chứa.
Khi hoàn thành nhiệm vụ này, hãy di chuyển đến kho bên phải. Phòng này lưu trữ các tấm ván gỗ và vật liệu cần thiết để sửa chữa cấu trúc mái và tường. Hãy hướng đến dấu X đậm trên thảm xanh và sử dụng hàm collect() để lấy một danh sách hằng số có tên planks_set từ thùng chứa; danh sách này chứa các tấm ván đã được loại bỏ mọi chất thải. Đi đến dấu X sáng bên cạnh và sử dụng hàm collect() một lần nữa để lấy một danh sách hằng số khác có tên shipment, đây là các vật liệu ván được chuyển hàng gần đây và vẫn chứa một số chất thải.
Tương tự như trong phòng trước, danh sách shipment có khả năng chứa một số vật liệu rác lẫn vào cần được loại bỏ. Giống như trước, chúng được lưu trữ trong sáu (6) ngăn khác nhau, mỗi ngăn chứa một lượng vật liệu riêng. Tạo một biến có tên blue_storage để lưu trữ tất cả các vật liệu để bạn có thể hợp nhất chúng thành một chồng duy nhất. Giống như trước, chất thải sẽ được cất vào danh sách junk.
Đối với các tấm ván, chúng ta sẽ chuyển đổi và cộng tất cả những vật liệu hữu ích trong danh sách shipment và thêm chúng vào danh sách planks_set, sau đó hợp nhất tất cả chúng, sử dụng int(), vào biến blue_storage. Tuy nhiên, cũng như trước, có thể gặp các lỗi.
for y in range(6): planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) blue_storage+=int(planks_set[y])
Lần này bạn có thể mong đợi một Type Error, đó là khi bạn cố gắng cộng số và chuỗi với nhau. Điều này có thể được giải quyết bằng cách một lần nữa sử dụng các khối lệnh try / except và else, khối try cộng hai danh sách lại với nhau, khối except lọc ra những phần tử không mong muốn khỏi danh sách và khối else thêm các tấm ván vào 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])
Bây giờ, khi biến blue_storage đã được lấp đầy, bạn có thể ghi lại và lưu trữ tất cả các tấm ván. Hãy đi đến dấu X vàng trong kho bên phải bạn đang ở, đối diện với bàn và sử dụng hàm write() để tổng hợp số lượng vật liệu bạn đã hợp nhất, như sau: await player.write("There are %s planks ready for use in storage" % (blue_storage))
Để hoàn tất cấp độ, hãy đi đến dấu X đậm trên thảm xanh dương và sử dụng hàm place() để lưu trữ biến blue_storage vào thùng chứa. Sau đó, hãy đi đến dấu X đậm trên thảm tím ở phòng giữa và sử dụng hàm place() để loại bỏ danh sách junk vào hộc rác, hoàn thành nhiệm vụ của bạn.