Продвинутый курс разработки на Python
Глава
>
Уровень
Математические модули
Модуль операторов
Цель
Проверьте и распределите заказы на новые строительные материалы для сельскохозяйственных угодий, используя модуль operator.
На верхнем этаже пристроя находятся несколько офисов, в которых ведутся журналы учёта запасов и заказов на строительные материалы, необходимые для освоения новой земли. Существует множество различных инструментов для проверки и расчёта материалов, которые можно использовать в строительстве; помимо модуля math и statistics, здесь можно использовать модуль operator.
Этот модуль, import operator, можно использовать для упрощения вычислений с операторами и удобного упаковки их в функции. Вы можете использовать эти функции как для оптимизации, так и для получения значений без необходимости создавать объект для хранения значений вычислений.
operators.eq(): Принимает два аргумента, проверяет, равны ли они друг другу.operators.lt(): Принимает два аргумента, проверяет, меньше ли первый аргумент второго.operators.gt(): Принимает два аргумента, проверяет, больше ли первый аргумент второго.operators.floordiv(): Принимает два аргумента, делит первый аргумент на второй и применяет аналогmath.floor(), округляя результат вниз.operators.mod(): Принимает два аргумента, возвращает остаток от деления первого аргумента на второй.operators.contains(): Функция используется со списком, принимает два аргумента: первый аргумент — список, второй — значение, которое вы хотите проверить на наличие в списке. Возвращает:trueилиfalseв зависимости от того, присутствует значение или нет.operators.concat(): Принимает два аргумента-списка, объединяет два списка с помощью одной удобной функции; может быть быстрее, чем другие методы.operators.countOf(): Принимает два аргумента, список и значение, чтобы проверить, сколько раз это значение встречается в списке. Возвращает количество экземпляров этого значения.
Для начала пройдите к темной отметке в форме X, расположенной над красными, синими и зелеными коврами. Существует шесть (6) констант: red_order, blue_order, green_order, которые представляют заказы на материалы, и: red_req, blue_req, green_req — требуемое количество материалов для строительства.
На темной отметке X над красным ковром используйте функцию read(), чтобы проверить требуемое количество материалов. Создайте переменную с именем red_verification и используйте функцию operator.eq() с константами red_order и red_req, например, так: red_verification = operator.eq(red_order,red_req). С помощью заранее написанной функции write() выведите результат, используя переменную red_verification.
На отметках X над синим и зеленым коврами повторите тот же процесс, используя функцию read() и создав переменные: blue_verification и green_verification. Для переменной blue сохраните значение operator.lt(), используя константы blue_order и blue_req, чтобы проверить, меньше ли заказ требуемого количества. Для переменной green сохраните значение operator.gt(), используя константы green_order и green_req, чтобы проверить, больше ли заказ требуемого количества материалов. Используйте заранее написанные функции write() с соответствующими переменными проверки для каждого цветного ковра.
Далее пройдите к отметке X со светлой подсветкой и на столе используйте функцию read(), чтобы проверить заказы, которые уже размещены и находятся в пути. В заказной книге вы найдёте значения двух переменных-констант: main_order и sub_order, а также количество секций, на которые необходимо разделить материалы. После просмотра книги заказов создайте переменную с именем allocations и сохраните в неё результат operator.floordiv(), чтобы разделить значение main_order на количество секций, указанных в книге, например: allocations = operator.floordiv(main_order, -add sections-). Это разделит заказ и округлит результат вниз. Используйте заранее написанную функцию write() с переменной allocations, чтобы зафиксировать результат.
Пройдите к отметке X с золотой подсветкой и создайте переменную с именем remainder, сохраните в неё результат функции operator.mod(), применив константы main_order и sub_order для нахождения остатка от деления двух заказов. На столе используйте заранее написанную функцию write() с переменной remainder, чтобы зафиксировать результат.
Перейдите к темной отметке X над фиолетовым ковром, здесь мы будем проверять доставку инструментов, необходимых для строительства. У нас есть два списка-константы, delivery_1 и delivery_2; мы проверим, были ли инструменты доставлены при первой поставке. Создайте переменную с именем tools и сохраните в неё результат функции operator.contains(), для первого аргумента укажите список delivery_1, а для второго — строку "tools". Это проверит, присутствуют ли инструменты в доставке, например: tools = operator.contains(delivery_1,"tools"). После этого на столе используйте заранее написанную функцию write() с переменной tools, чтобы зафиксировать, успешно ли были доставлены инструменты.
Далее проверьте все поставки: пройдите к темной отметке X над белым ковром и создайте список с именем materials. Используйте его для сохранения результата функции operator.concat(), передав в качестве аргументов списки delivery_1 и delivery_2. Это действие объединит два списка в один. На столе используйте заранее написанную функцию write() с переменной materials, чтобы зафиксировать все материалы, которые уже были доставлены для строительства.
Наконец, пройдите к темной отметке X над оранжевым ковром, здесь указаны некоторые предварительные условия для начала строительства, одним из основных указаний является количество древесины, необходимой в начале, в тоннах. Проверьте, сколько древесины было доставлено во всех поставках, и сообщите об этом, используя функцию speak() с функцией operator.countOf(). Для первого аргумента введите созданный вами список materials, а затем строку "wood". Это вернёт, сколько раз слово wood встречается в списке materials. Это демонстрирует, как функции оператора могут использоваться самостоятельно без создания объекта для их хранения, например: player.speak(operator.countOf(materials,"wood")). Это завершит уровень.