1
resposta

[Desafio] Hora da prática (6-10)

Salve pessoal, resolvi compartilhar aqui algumas das resoluções e fico a disposição para sugestões de melhorias.

Achei os exercícios da seção "Aplicando a projetos" muito construtivos, pois mostram como não precisamos reinventar a roda para resolver problemas matemáticos ou de sorteio. Separei as minhas soluções abaixo com alguns comentários sobre as escolhas que fiz em cada código.

Fiquem à vontade para analisar e sugerir outras abordagens!

  1. Sorteio de pessoa seguidora

Para esse desafio, a função randint() da biblioteca random é a mais direta, pois ela inclui tanto o limite inferior quanto o superior no sorteio.

import random

participantes = int(input("Digite o número de participantes do sorteio: "))

# Sorteia um número de 1 até o total de participantes inserido
numero_sorteado = random.randint(1, participantes)

print(f"\nO número sorteado para ganhar o prêmio foi: {numero_sorteado}")

  1. Gerador de Token de Acesso (Números Pares)

Gerar tokens é uma tarefa muito comum no desenvolvimento Back-end. Para garantir que o token seja sempre par entre 1000 e 9998, usei a função randrange() passando o parâmetro step como 2. Assim, ele pula de dois em dois, ignorando os ímpares.

import random

nome = input("Digite o seu nome: ")

# randrange(início, fim, salto) - O fim é exclusivo, então usamos 10000 para incluir até o 9998
token = random.randrange(1000, 10000, 2)

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

  1. Salada de Frutas Surpresa

Como o desafio pede para escolher 3 frutas diferentes, a função random.sample() é perfeita. Ao contrário do choice() ou do choices(), o sample() pega itens únicos, garantindo que não teremos duas frutas iguais sorteadas na mesma salada.

import random

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

# Escolhe 3 itens distintos da lista
salada_surpresa = random.sample(frutas, 3)

print("A sua salada de frutas surpresa contém:")
print(f"- {salada_surpresa[0].capitalize()}")
print(f"- {salada_surpresa[1].capitalize()}")
print(f"- {salada_surpresa[2].capitalize()}")

  1. Validador de Raiz Quadrada Inteira

Aqui, apliquei a dica passada na atividade usando a divisão inteira (//) para comparar o resultado. Mas fica uma dica extra: o Python também possui o método nativo .is_integer() para floats, que faz exatamente essa verificação de forma bem limpa!

import math

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

print("Analisando as raízes quadradas da lista:\n")

for num in numeros:
    raiz = math.sqrt(num)
    
    # Verifica se a raiz tem casas decimais iguais a zero
    if raiz // 1 == raiz: 
        print(f"O número {num} possui raiz quadrada inteira: {int(raiz)}")

  1. Orçamento de Grama para Jardim Circular

Para evitar números mágicos e arredondamentos manuais do pi (como 3.14), chamei a constante exata math.pi. Em seguida, usei math.pow() para elevar o raio ao quadrado.

import math

raio = float(input("Digite o raio da área circular do jardim (em metros): "))
preco_metro_quadrado = 25.00

# Cálculo da área: A = π * r²
area_jardim = math.pi * math.pow(raio, 2)

# Cálculo do preço total
valor_total = area_jardim * preco_metro_quadrado

print(f"\nÁrea total do jardim: {area_jardim:.2f} m²")
print(f"Valor a ser pago pela grama: R$ {valor_total:.2f}")

Espero que esses códigos ajudem quem estiver com dificuldade para implementar os métodos do math ou do random. Bons estudos para todos!

1 resposta

Olá, Weriton. Como vai?

Parabéns pelas resoluções! Seus códigos ficaram excelentes, muito organizados e bem comentados. É nítido que você compreendeu profundamente o propósito de utilizar bibliotecas nativas como random e math para evitar reescrever códigos complexos do zero.

A sua iniciativa de compartilhar as soluções detalhando o porquê de cada escolha (randint, randrange, sample, etc.) ajuda imensamente a comunidade do fórum. Essa troca de conhecimento agrega muito valor para quem está estudando.

Analisando suas soluções, você fez escolhas perfeitas. Deixo aqui alguns complementos técnicos e boas práticas baseados nos pontos interessantes que você levantou:

1. Gerador de Token de Acesso
O uso do random.randrange(1000, 10000, 2) foi uma sacada brilhante! Usar o argumento de passo (step=2) diretamente na geração do número é muito mais eficiente do que gerar um número qualquer e depois testar com um if se ele é par. Parabéns pela lógica!

2. Salada de Frutas Surpresa
Sua explicação sobre a diferença entre random.sample() e random.choices() foi cirúrgica. Para exibir os itens da lista de forma elegante e dinâmica, sem precisar acessar os índices manualmente ([0], [1], [2]), você pode utilizar um laço for. Veja essa alternativa de exibição:

print("A sua salada de frutas surpresa contém:")
for fruta in salada_surpresa:
    print(f"- {fruta.capitalize()}")

Vantagem: Se amanhã o desafio pedir 5 frutas em vez de 3, seu código de impressão continuará funcionando sem precisar mudar nada.

3. Validador de Raiz Quadrada Inteira
Excelente comentário sobre o método .is_integer(). Ele é super elegante! Apenas como curiosidade e boa prática, a partir do Python 3.8, a biblioteca math ganhou uma função chamada math.isqrt(), que calcula diretamente a raiz quadrada inteira arredondada para baixo. No seu caso, o uso do .is_integer() se encaixa perfeitamente na lógica:

for num in numeros:
    raiz = math.sqrt(num)
    if raiz.is_integer():
        print(f"O número {num} possui raiz quadrada inteira: {int(raiz)}")

4. Orçamento de Grama para Jardim Circular
Utilizar math.pi é a melhor prática de mercado, pois garante precisão científica ao cálculo da área. Uma dica simples sobre o Python é que você também pode calcular potências usando o operador de expoente , que é mais comum na comunidade do que o `math.pow()`. O cálculo ficaria: `area_jardim = math.pi * (raio 2)`. Ambas as formas estão corretas, mas o operador costuma deixar o código mais limpo.

Seu repositório de soluções ficou nota 10. Continue compartilhando seus códigos e ajudando os colegas no fórum!

Espero que possa ter lhe ajudado!