Курс по усъвършенствано разработване с Python
Глава
>
Ниво
Разширени списъци
Картографиране, филтриране, редуциране
Цел
Завърши смесването и производството на сладолед, като използваш Maps, Filter и Reduce.
Някои от вкусовете на сладолед са ниски или празни, но разполагаме с достатъчно материали, за да компенсираме и да направим още сладолед. За да постигнеш това, трябва да използваш Map, мощен инструмент, който ти позволява да минимизираш количеството код, който трябва да напишеш, като съкращаваш цикли и разклонения в кода. Функциите Filter и Reduce са допълнение към функцията Map и предоставят необходимата гъвкавост на твоето кодиране.
За начало трябва да импортираш Reduce от библиотеката functools, за да можеш да използваш функцията, като добавиш този ред в началото на програмата: from functools import reduce . Функциите Map и Filter са вградени в Python и не е необходимо да се импортират.
Първо трябва да вземеш някои съставки от морозилната стая (walk in freezer), да отидеш до златната маркирана X, да се обърнеш към вратата и да я отвориш, използвайки функцията open(). Вземи всички буркани с "cream" от морозилника, след което отиди до светлата маркирана X върху зеления килим.
Има три (3) константи списъци в полето, наречени: vanilla, strawberry и chocolate. Всяка константа съдържа комбинация от съставки, която съставлява вкуса на сладоледа. При зелената маркирана X провери съдържанието на константата списък strawberry. Първо използвай функцията place(), за да депозираш "cream", която преди това взехте, и използвай функцията speak() за да провериш съдържанието на списъка strawberry.
След като бъде потвърдено, време е да използваш функцията Map със списъчната константа strawberry, чийто елементи са десетични числа. Използвайки функцията map(), можеш да закръглиш всички елементи в списъка, което премахва необходимостта от итерация на всеки елемент в цикъл за отделно закръгляне. За това създай списък с име map1 и използвай функцията map() в комбинация със списъка strawberry и функцията round(), както е показано тук: map1 = list(map(round, strawberry)) . След това използвай функцията speak() със map1, за да провериш резултата.
След това преминаваме към Filter, който работи по същия начин като Map, но вместо това изисква използването на функция в съчетание с него. В началото на редактора ще имаш предварително зададена функция с име main_ingredients, която определя дали дадено число е по-голямо от числото 25.
def main_ingredients(value):
return value > 25
Вместо да използваш цикъл, можеш да приложиш тази функция в комбинация с функцията filter(), за да съставиш нов списък с елементи, които надвишават 25 – тези са основните съставки. Създай нов списък с име filter1 и приложи функцията filter() с main_ingredients и map1, за да определи всички основни съставки, намерени в създадения по-горе списък от Map, както е показано тук: filter1 = list(filter(main_ingredients, value)) . След това използвай функцията speak() със filter1, за да провериш резултата.
Сега преминаваме към Reduce, който се използва по същия начин като Filter, но може да се използва за свиване на списък до една единствена стойност. Подобно на Filter, той използва персонализирана функция, този път с име custom_sum, която динамично събира две числа.
def custom_sum(first, second):
return first + second
Създай променлива с име reduce1 и използвай функцията reduce() в съчетание с функцията custom_sum и filter1, за да обединиш всички елементи в една единствена стойност, както е показано тук: reduce1 = reduce(custom_sum, filter1) . След това използвай функцията speak() със reduce1, за да провериш резултата.
Сега, след като завърши цикълът Map, Filter, Reduce, повтори същия цикъл върху светлинните маркирани X върху червения и синия килим. На червения килим използвай константата списък vanilla и създай map2, filter2 и reduce2. На синия килим използвай константата списък chocolate и създай map3, filter3 и reduce3.
Отиди до последния светъл X маркиран, който се намира върху лилавия килим, събери reduce1, reduce2 и reduce3, като обединиш основните съставки на vanilla, strawberry и chocolate. Създай променлива с име neapolitan и събери всички резултати от Reduce, както е показано тук: neapolitan = reduce1+reduce2+reduce3 . Използвай функцията speak() с комбинацията, за да я провериш, и използвай функцията place() с нея, за да създадеш неаполитенски сладолед и да завършиш нивото.