Coding for KidsCoding for Kids
Креативни НиваПредизвикателстваРъководство за Учители
Гласувайте за функции
Курс по усъвършенствано разработване с Python
Глава
>
Ниво

Обработка на изключения
Потребителски изключения

Цел

Използвайте персонализирани изключения, за да събирате съобщения с поръчки за продукти и да ги изпращате чрез гълъби-носители.

Някои съобщения са разположени из фермата и други станции чрез куриерски гълъби, така че би било добра идея да се изпратят няколко, за да сме една стъпка пред графика. Досега сме улавяли грешки, използвайки стандартни изключения, но понякога може да бъде полезно да създадете свои собствени персонализирани изключения за специфични ситуации. Ние ще вземем съобщения и ще подберем гълъби, като идентифицираме правилните елементи чрез нашите персонализирани изключения.

Персонализираните изключения се създават чрез дефиниране на класове, като добавяте клаузата (Exception) за да преобразувате даден клас в изпълнение на изключения. За нашите цели ще създадем две: InvalidLocation, което се активира, когато даден низ не премине верификацията, и UnsuitableSelection, което се използва за проверка дали дадено число надвишава определен праг.

class InvalidLocation(Exception): "Raised when location is invalid" pass class UnsuitableSelection(Exception): "Raised when pidgeon is 2 or younger" pass

Сега, след като класовете са настроени, е време да отидем да съберем меморандумите, за да бъдат изпратени. Създайте списък с името prep, за да съхранявате и комбинирате компонентите, необходими за предстоящата размена. Отидете до тъмния X знак върху червения килим, на редицата маси с X знаци отпред, където ще търсим меморандуми с поръчки за западния сектор на фермата.

Съществуват четири променливи константи, използвани в този раздел: red_memo, blue_memo, green_memo и orange_memo. Събирайте само меморандумите, които са обозначени за доставка в сектор "west", за да могат да бъдат изпратени. За да определим дали да вземем меморандума или не, ще използваме блокове с код try/except и else в комбинация с персонализираното изключение InvalidLocation. За да използвате персонализираното изключение, в блока try проверете дали меморандумът е обозначен като "west" и ако не е, вдигнете (raise) изключението. Блокът except потвърждава, че меморандумът е невалиден, а блокът else събира и добавя меморандума към списъка prep, ако установи, че е предназначен за сектор "west". Например:

try: if red_memo != "west": raise InvalidLocation except InvalidLocation: player.speak("This is not an order that needs to be sent out") else: player.collect(red_memo) prep.append(red_memo)

Отидете до всеки от тъмните X знаци върху оцветените килими отпред на масите и изпълнете последователността от изключения, използвайки правилните променливи константи, съответстващи на всеки цвят.

След като съберете меморандумите, отидете до златния X знак пред вратата и използвайте функцията open() за да получите достъп до гълъби-куриерите. Веднъж вътре, отидете до светлия X знак, обърнете се и използвайте функцията close() за да затворите вратата, за да сте сигурни, че нито един гълъб няма да избяга.

Отидете до тъмния X знак върху лилавия килим; на писалките ще проверим дали гълъбът е достатъчно възрастен, за да пренася съобщение, или е млада птица, неспособна да извърши доставка. Има още четири променливи константи, които се използват в този раздел: purple_pen, yellow_pen, white_pen и pink_pen, съответстващи на всеки оцветен килим. Ще използваме същата техника, както при меморандумите, с помощта на втория клас, който беше настроен.

Използвайте блоковете try/except и else с персонализираното изключение UnsuitableSelection, за да определите дали гълъбът е достатъчно стар, за да извърши доставката. Блокът try проверява дали променливата константа, представляваща писалката, има подходящ гълъб, като проверява дали птицата е по-млада от две (2) години. Ако гълъбът не е подходящ, се активира блокът except, в противен случай се активира блокът else, който ви позволява да добавите гълъб към списъка prep, за да извърши доставката на съобщението.

try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")

Отидете до всеки тъмен X знак върху оцветените килими и използвайте тази последователност с правилната променлива константа, съответстваща на конкретния оцветен килим. След като съберете гълъбите и съобщенията, отидете до златния X знак в самото дъно и използвайте функцията place() със списъка prep, който сте създали, за да изпратите гълъбите да доставят съобщенията и да завършите нивото.

Книга с Код