Coding for KidsCoding for Kids
창의적인 레벨도전 과제교사 가이드
기능 투표
고급 파이썬 개발 과정
챕터
>
레벨

예외 처리
else 절

목표

수리 자재를 가져와 정렬한 후, else 절과 예외 처리를 사용하여 불필요한 폐기물을 버리세요.

일부 수리 자재는 건물 꼭대기에 보관되어 있으며, 이는 폭풍우나 일반적인 마모 후 지붕 수리에 사용됩니다. 일부는 최근에 배송되어 여전히 포장 및 용기에 보관되고 있으며, 다른 일부는 오랫동안 보관되어 쓰레기와 함께 섞여 버려졌습니다. 자재를 정리하여 제대로 보관하고 쓰레기와 폐기물을 버리는 것이 좋습니다.

정리되지 않은 자재들의 특성상 오류가 발생할 가능성이 높습니다. 이러한 문제는 try / except 코드 블록으로 해결할 수 있으나, 예상치 못한 오류 종류에 익숙하지 않다면 다소 까다로울 수 있습니다. 그러나 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 / exceptelse 코드 블록을 사용하여 자재를 정렬할 수 있습니다. 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 리스트의 유용한 모든 자재를 int()를 사용하여 변환한 후 planks_set 리스트에 추가하고, 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 / exceptelse 코드 블록을 사용하여 해결할 수 있으며, try 블록은 리스트를 합치고, except 블록은 리스트에서 폐기물을 걸러내며, 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 리스트를 폐기물 통에 버려, 작업을 완료하세요.

코드북