Boa noite!
3, 4.
5, 6.
7, 8.
9, 10.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Boa noite!

3, 4.
5, 6.
7, 8.
9, 10.
Olá, Estudante. Como vai?
Os seus códigos do desafio ficaram fantásticos! Você resolveu todos os exercícios propostos de forma muito organizada e correta, explorando de maneira perfeita as principais bibliotecas utilitárias do Python (como math e random), além de demonstrar um ótimo domínio de manipulação de strings com as f-strings.
Vamos destacar os pontos altos da sua resolução e trazer algumas pequenas observações técnicas que agregam ainda mais valor à sua prática:
sqrt(i) // 1 == sqrt(i)) foi super criativa! No cálculo do valor da grama, você utilizou a formatação de duas casas decimais ({area:.2f}) perfeitamente, o que é uma excelente prática para lidar com moedas.random: Você soube diferenciar muito bem quando usar cada função:choice(lista) para pescar um único número.randrange(1, 100) para gerar um valor inteiro dentro de um intervalo.sample(fratas, k=3) para selecionar múltiplos elementos únicos sem repetição (perfeito para a salada de frutas!).randrangeAnalisando a imagem em que você gerou o token de acesso para o usuário Daniel, você usou a seguinte estrutura:
print(f"Olá, {name}, o seu token de acesso é {randrange(initLim, finLim)}")
Vale apenas lembrar um pequeno detalhe técnico sobre o funcionamento do randrange(start, stop): o limite final (stop) é exclusivo.
Isso significa que, com as suas variáveis configuradas como initLim = 1000 e finLim = 9999, o Python gerará números aleatórios de 1000 até 9998. Se o seu objetivo era incluir o número 9999 como um token possível para o sorteio, basta ajustar o limite final somando 1:
initLim = 1000
finLim = 10000 # O limite vai até 9999
print(f"Olá, {name}, o seu token de acesso é {randrange(initLim, finLim)}")
Outra alternativa equivalente muito usada em Python para quando queremos incluir os dois limites (mínimo e máximo) é usar a função randint:
from random import randint
# O randint inclui tanto o 1000 quanto o 9999 no sorteio
token = randint(1000, 9999)
Parabéns pelo excelente desempenho na entrega de toda a seção de exercícios! Os prints mostram que o seu ambiente de desenvolvimento (Google Colab / Jupyter) rodou tudo de primeira e com muito sucesso. Continue com esse foco nos próximos capítulos!
Espero que possa ter lhe ajudado!