Olá, Rafaela. Como vai?
Os seus códigos do desafio ficaram ótimos! Você conseguiu resolver toda a seção de aquecimento e exercícios práticos passando por todas as etapas com muito sucesso, utilizando de forma muito inteligente as funções das bibliotecas math e random.
Para que a sua resolução fique ainda mais perfeita e alinhada com as melhores práticas de desenvolvimento em Python, quero trazer algumas observações bem pontuais sobre sintaxe e comportamento de funções que vão te ajudar muito no dia a dia:
1. O erro de sintaxe na Q2 (!pip install numpy as np)
No seu segundo exercício, você escreveu o seguinte comando:
!pip install numpy as np
O gerenciador de pacotes do Python (pip) serve estritamente para instalar bibliotecas no ambiente e ele não aceita apelidos como o as np. Esse comando gerará um erro no terminal do Google Colab ou Jupyter Notebook.
Para instalar a biblioteca e depois usá-la com o apelido correto dentro do seu código, o processo deve ser dividido em duas etapas:
!pip install numpy # Na célula de instalação
import numpy as np # Na célula onde você vai escrever o código Python
2. Boas práticas de Importação (Evite o from biblioteca import *)
Nos exercícios de 3 a 8, você utilizou a sintaxe from random import * e from math import *. O uso do asterisco (*) importa absolutamente tudo o que existe dentro daquela biblioteca para a memória do seu programa.
Em projetos reais, isso é considerado uma má prática chamada de Poluição do Escopo Global, pois se você tiver uma função própria com o mesmo nome de alguma função interna da biblioteca, um código vai sobrescrever o outro e gerar bugs difíceis de encontrar.
- A sugestão ideal: Importe apenas as funções específicas que você vai de fato utilizar na célula, exatamente como você fez de forma perfeita nas questões 9 e 10!
Veja como o seu código da Q3 e Q4 fica muito mais elegante e limpo:
from random import choice, randrange
lista = [8, 12, 54, 23, 43, 1, 90, 87, 105, 77]
print(choice(lista))
print(randrange(100))
3. Ajuste de lógica no token da Q7
Na Q7, o seu objetivo era gerar um token de acesso de 4 dígitos. Você utilizou a função randrange(1000, 9998, 2).
Essa estrutura está correta para gerar apenas números pares (por conta do passo 2), mas vale lembrar que o limite superior do randrange é exclusivo. Da forma como está, o número 9998 nunca seria sorteado. Se a intenção era incluir o intervalo completo de 4 dígitos até o último número par possível, o limite final deve ser 10000:
from random import randrange
nome = input("Digite o seu nome: ")
token = randrange(1000, 10000, 2) # Sorteia números pares de 1000 até 9998
print(f'Olá, {nome}, o seu token de acesso é {token}! Seja bem-vindo(a)!')
No mais, a sua lógica na Q9 para descobrir se o número possui raiz inteira usando a divisão inteira (raiz // 1 == raiz) foi extremamente criativa, e a formatação de valores monetários na Q10 com o :.2f ficou impecável!
Parabéns pela dedicação e por postar a sua lista de exercícios completa aqui no fórum. Continue com esse ritmo excelente de estudos!
Espero que possa ter lhe ajudado!