1
resposta

(06. Python para Dados: Bibliotecas) Desafio: hora da prática

# 1. Escreva um código para instalar a versão 3.7.1 da biblioteca matplotlib.

# Instalar a versão "3.7.1" do matplotlib
!pip install matplotlib==3.7.1

# Instalar a versão mais recente do numpy
!pip install numpy

# 2. Escreva um código para importar a biblioteca numpy com o alias np.

import numpy as np

# 3. Crie um programa que leia a seguinte lista de números e escolha um número desta aleatoriamente. 

import numpy as np

lista = [8, 12, 54, 23, 43, 1, 90, 87, 105, 77]

numero_aleatorio = np.random.choice(lista)

print(numero_aleatorio)

# 4. Crie um programa que sorteia, aleatoriamente, um número inteiro positivo menor que 100.

from random import randrange

numero = randrange(100)

print(numero)

# 5. Crie um programa que solicite à pessoa usuária digitar dois números inteiros e calcular a potência do 1º número elevado ao 2º.

from math import pow

numero1 = int(input("Digite o primeiro número: "))
numero2 = int(input("Digite o segundo número: "))

resultado = pow(numero1, numero2)

print(resultado)

# 6. Um programa deve ser escrito para sortear uma pessoa seguidora de uma rede social para ganhar um prêmio. A lista de participantes é numerada e devemos escolher aleatoriamente um número de acordo com a quantidade de participantes. Peça à pessoa usuária para fornecer o número de participantes do sorteio e devolva para ela o número sorteado.

from random import randrange

participantes = int(input("Digite a quantidade de participantes: "))

sorteado = randrange(1, participantes + 1)

print("Número sorteado:", sorteado)

# 7. Você recebeu uma demanda para gerar números de token para acessar o aplicativo de uma empresa. O token precisa ser par e variar de 1000 até 9998. Escreva um código que solicita à pessoa usuária o seu nome e exibe uma mensagem junto a esse token gerado aleatoriamente.

from random import randrange

usuarios = []

while True:

    nome = input("Digite seu nome (ou 'sair' para encerrar): ")

    if nome.lower() == "sair":
        break

    # Gera token único
    while True:
        token = randrange(1000, 9999, 2)

        # Verifica se o token já existe
        token_existe = False

        for usuario in usuarios:
            if usuario["token"] == token:
                token_existe = True
                break

        if not token_existe:
            break

    # Guarda nome e token
    usuarios.append({
        "nome": nome,
        "token": token
    })

    print(f"Olá, {nome}, o seu token de acesso é {token}! Seja bem-vindo(a)!")

print("\nLista de usuários e tokens utilizados:\n")

for usuario in usuarios:
    print(f'Nome: {usuario["nome"]} | Token: {usuario["token"]}')

# 8. Para diversificar e atrair novos(as) clientes, uma lanchonete criou um item misterioso em seu cardápio chamado "salada de frutas surpresa". Neste item, são escolhidas aleatoriamente 3 frutas de uma lista de 12 para compor a salada de frutas da pessoa cliente. Crie o código que faça essa seleção aleatória de acordo com a lista abaixo:
# frutas = ["maçã", "banana", "uva", "pêra", "manga", "coco", "melancia", "mamão", "laranja", "abacaxi", "kiwi", "ameixa"]

from random import sample

frutas = ["maçã", "banana", "uva", "pêra",
          "manga", "coco", "melancia", "mamão",
          "laranja", "abacaxi", "kiwi", "ameixa"]

salada_surpresa = sample(frutas, 3)

print("Frutas sorteadas:", salada_surpresa)

# 9. Você recebeu um desafio de calcular a raiz quadrada de uma lista de números, identificando quais resultaram em um número inteiro. A lista é a seguinte:
# numeros = [2, 8, 15, 23, 91, 112, 256]

from math import sqrt

numeros = [2, 8, 15, 23, 91, 112, 256]

raizes_inteiras = []

# Percorre cada número da lista numeros
for numero in numeros:

    # Calcula a raiz quadrada do número atual
    raiz = sqrt(numero)

    # Verifica se a raiz é um número inteiro
    # A divisão inteira (// 1) remove a parte decimal
    # Se o resultado continuar igual ao valor original, então é inteiro
    if (raiz // 1) == raiz:

        # Adiciona uma posição contendo: (número original, raiz inteira)
        raizes_inteiras.append((numero, int(raiz)))


print("Números que possuem raízes inteiras:\n")

# Percorre cada item armazenado na lista raizes_inteiras
for numero, raiz in raizes_inteiras:

    print(f"Número: {numero} | Raiz inteira: {raiz}")

# 10. Faça um programa para uma loja que vende grama para jardins. Essa loja trabalha com jardins circulares e o preço do metro quadrado da grama é de R$ 25,00. Peça à pessoa usuária o raio da área circular e devolva o valor em reais do quanto precisará pagar.

from math import pi, pow

raio = float(input("Digite o raio do jardim: "))

# Calcula a área do círculo
area = pi * pow(raio, 2)

# Calcula o valor total da grama
valor = area * 25

print(f"Área do jardim: {area:.2f} m²")
print(f"Valor a pagar: R$ {valor:.2f}")
1 resposta

Olá, Eduardo. Como vai?

Uau! Que excelente resolução da lista de exercícios! O seu código está extremamente organizado, limpo, bem documentado com comentários e demonstra um domínio fantástico no uso das principais bibliotecas nativas e externas do Python (como math, random e numpy).

Você aplicou os conceitos de forma impecável. Vale destacar alguns pontos altos da sua solução:

  • No Exercício 6, você utilizou corretamente o limite participantes + 1 no randrange, garantindo que o último participante também tenha a chance de ser sorteado (já que o limite superior do randrange é exclusivo).
  • No Exercício 7, a sua lógica para criar tokens únicos usando um laço while aninhado e uma verificação interna ficou excelente. Além disso, usar o passo 2 no randrange(1000, 9999, 2) foi uma sacada brilhante para garantir que o número gerado seja sempre par.
  • No Exercício 8, a escolha do sample foi perfeita, pois ele garante o sorteio de elementos sem repetição, o que faz todo sentido para uma salada de frutas (evitando que o cliente tire três porções de "maçã", por exemplo).

Para agregar ainda mais valor ao seu aprendizado e trazer algumas sugestões de boas práticas do mercado, separei dois pontos de refinamento nos exercícios 5 e 9:

1. Uma alternativa nativa para o método is_integer() (Exercício 9)

No exercício 9, para verificar se a raiz quadrada era um número inteiro, você utilizou a lógica matemática if (raiz // 1) == raiz:. Funciona perfeitamente! Porém, o Python possui um método nativo muito elegante construído dentro dos objetos do tipo float exatamente para essa finalidade, chamado .is_integer().

Usá-lo deixa o seu código mais legível e com uma leitura mais natural ("se a raiz for inteira"):

# Substituindo a sua lógica por uma função nativa do Python
if raiz.is_integer():
    raizes_inteiras.append((numero, int(raiz)))

2. O Operador de Potência do Python (Exercício 5)

No exercício 5, você importou o método pow da biblioteca math. Ele está correto, mas vale saber que o Python possui um operador nativo de potência muito poderoso e amplamente utilizado na comunidade de Data Science: os dois asteriscos ``.

A principal vantagem de usar o é que ele mantém o tipo de dado original. O método `math.pow()` sempre converte o resultado para um número flutuante (*float*). Se você elevar $2$ ao cubo ($2^3$), `math.pow` devolverá `8.0`, enquanto o operador devolverá o número inteiro 8.

Você poderia simplificar o código eliminando o import da biblioteca:

numero1 = int(input("Digite o primeiro número: "))
numero2 = int(input("Digite o segundo número: "))

# Utilizando o operador nativo do Python
resultado = numero1 ** numero2
print(resultado)

No Exercício 10, manter o math.pow ou o pi faz total sentido, pois a biblioteca math traz o valor do número $\pi$ com precisão cirúrgica, o que é excelente para cálculos de engenharia ou ciência de dados.

Parabéns pelo empenho em resolver todo o caderno de atividades com tanta qualidade. Continue com essa constância nos estudos!

Espero que possa ter lhe ajudado!