Curso Avançado de Desenvolvimento Python
Capítulo
>
Nível
Módulos Matemáticos
Módulo de Operadores
Objetivo
Verifique e aloque os novos pedidos de material de construção para desenvolvimento agrícola utilizando o módulo operator.
O piso superior do anexo possui alguns escritórios que armazenam registros do inventário e pedidos dos materiais de construção necessários para o novo desenvolvimento da terra. Existem várias ferramentas que podem ser utilizadas para verificar e calcular os materiais para que possam ser usados na construção; além do módulo de matemática e estatística, podemos usar o módulo operator.
Este módulo, import operator, pode ser usado para simplificar cálculos de operador e agrupá-los de forma conveniente em funções. Você pode usar essas funções tanto para otimização quanto para produzir valores sem precisar criar um objeto para armazenar os valores dos cálculos.
operators.eq(): Recebe dois argumentos, verificando se os argumentos são iguais entre si.operators.lt(): Recebe dois argumentos, verificando se o primeiro argumento é menor que o segundo.operators.gt(): Recebe dois argumentos, verificando se o primeiro argumento é maior que o segundo.operators.floordiv(): Recebe dois argumentos, divide o primeiro argumento pelo segundo e aplica o equivalente amath.floor(), arredondando o resultado para baixo.operators.mod(): Recebe dois argumentos, retornando o resto da divisão entre os dois argumentos.operators.contains(): Função utilizada com uma lista, que recebe dois (2) argumentos; o primeiro é uma lista e o segundo é um valor que você deseja verificar se está presente na lista. Retorna:trueoufalse, dependendo se o valor está presente ou não.operators.concat(): Recebe dois argumentos do tipo lista, combinando as duas listas por meio de uma única função eficiente, podendo ser mais rápida que outros métodos.operators.countOf(): Recebe dois argumentos, uma lista e um valor para verificar quantas vezes esse valor está presente na lista. Retorna o número de instâncias em que o valor aparece.
Para começar, caminhe até a marca de X escura sobre os tapetes coloridos de vermelho, azul e verde. Existem seis (6) constantes: red_order, blue_order, green_order, que correspondem aos pedidos de materiais, e: red_req, blue_req, green_req, que são as quantidades necessárias para a construção.
Na marca de X escura sobre o tapete vermelho, use a função read() para verificar a quantidade necessária de materiais. Crie uma variável chamada red_verification e utilize a função operator.eq() com as constantes red_order e red_req, assim: red_verification = operator.eq(red_order,red_req). Em seguida, com a função pré-escrita write(), utilize red_verification para exibir o resultado.
Nas marcas de X azul e verde, repita o mesmo processo: use a função read() e crie as variáveis blue_verification e green_verification. Para a variável azul, armazene o valor de operator.lt() utilizando as constantes blue_order e blue_req para verificar se o pedido é menor do que o necessário. Para a variável verde, armazene o valor de operator.gt() utilizando as constantes green_order e green_req para verificar se o pedido é maior do que os materiais requeridos. Utilize as funções pré-escritas write() com as respectivas verificações correspondentes aos tapetes coloridos.
Em seguida, caminhe até a marca de X clara e, na mesa, use a função read() para verificar os pedidos que já foram realizados e que estão a caminho. No livro de pedidos, você encontrará os valores de duas constantes variáveis: main_order e sub_order, bem como a quantidade de seções em que os materiais precisam ser divididos. Após consultar o livro, crie uma variável chamada allocations e armazene o valor de operator.floordiv() para dividir o valor de main_order pela quantidade de seções descritas no livro, assim: allocations = operator.floordiv(main_order, -add sections-). Isso dividirá o pedido e arredondará o resultado para baixo. Utilize a função pré-escrita write() com a variável allocations para registrar o resultado.
Caminhe até a marca de X dourada e crie uma variável chamada remainder. Armazene o resultado de operator.mod() ao somar as constantes main_order e sub_order, produzindo o resto dos dois pedidos. Na mesa, utilize a função pré-escrita write() com a variável remainder para registrar o resultado.
Dirija-se até a marca de X escura sobre o tapete roxo; aqui, verificaremos se as ferramentas necessárias para a construção foram entregues. Temos duas constantes do tipo lista, delivery_1 e delivery_2, e verificaremos se as ferramentas foram entregues na primeira remessa. Crie uma variável chamada tools e armazene o resultado de operator.contains(), para o primeiro argumento adicione a lista delivery_1 e, para o segundo, a string “tools”. Isso verificará se as ferramentas estão presentes na entrega, assim: tools = operator.contains(delivery_1,"tools"). Uma vez feito isso, na mesa, utilize a função pré-escrita write() com a variável tools para registrar se as ferramentas foram entregues com sucesso.
Em seguida, para verificar todas as entregas, dirija-se até a marca de X escura sobre o tapete branco e crie uma lista chamada materials. Utilize-a para armazenar o valor de operator.concat(), utilizando as listas delivery_1 e delivery_2 como argumentos. Isso irá mesclar rapidamente as duas listas em uma única lista. Na mesa, use a função pré-escrita write() com a variável materials para anotar todos os materiais que já foram entregues para a construção.
Por fim, caminhe até a marca de X escura sobre o tapete laranja; aqui, há alguns pré-requisitos escritos para iniciar a construção, sendo uma das principais a quantidade de madeira necessária no início, expressa em toneladas. Verifique quanta madeira foi entregue em toda a remessa e anuncie essa quantidade, utilizando a função speak() com a função operator.countOf(). Para o primeiro argumento, adicione a lista materials que você criou, seguido da string “wood”. Isso retornará o número de vezes que a madeira aparece na lista materials. Isso ilustra como as funções do operator podem ser utilizadas de forma independente, sem a necessidade de um objeto para armazená-las, assim: player.speak(operator.countOf(materials,"wood")). Isso completará o nível.