



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!




Olá, Silvana. Como vai?
Meus parabéns pela dedicação e pela resolução completa desse imenso caderno de exercícios! Tirar os códigos do papel, estruturá-los em arquivos Python e testar cada uma das saídas no console (como você fez de maneira brilhante nas imagens) é a melhor e mais rápida forma de consolidar a lógica de programação.
Seus códigos demonstram uma excelente compreensão das estruturas condicionais if, elif e else, além de um ótimo uso de operadores lógicos como o and, métodos de string como .upper() e .lower(), e o operador de pertencimento in.
Para enriquecer o seu post e trazer algumas sugestões de melhoria para os seus estudos, separei duas análises sobre pontos específicos dos seus algoritmos que podem te ajudar a escrever códigos ainda mais limpos e eficientes no seu dia a dia:
No seu exercício de ordenar três números de forma decrescente (e na lógica de encontrar o produto mais barato), você construiu estruturas de if/elif/else bem profundas, testando manualmente várias combinações possíveis. Essa abordagem funciona, mas é fácil se perder em meio a tantos blocos.
Na programação real com Python, quando precisamos apenas ordenar ou extrair valores extremos (mínimos e máximos), nós confiamos nas funções nativas da linguagem. Elas reduzem dezenas de linhas de condicionais para apenas uma linha direta.
Veja como o seu exercício de valor mais alto e mais baixo (que você resolveu super bem com a lógica de inicializar as variáveis maior e menor) e o de ordem decrescente ficariam usando as funções max(), min() e sorted():
# --- Simplificando Valor Mais Alto e Mais Baixo ---
preco_ano1 = float(input('Informe o preço médio no primeiro ano: '))
preco_ano2 = float(input('Informe o preço médio no segundo ano: '))
preco_ano3 = float(input('Informe o preço médio no terceiro ano: '))
# O Python encontra os extremos instantaneamente para você:
maior = max(preco_ano1, preco_ano2, preco_ano3)
menor = min(preco_ano1, preco_ano2, preco_ano3)
print(f'O preço mais alto foi de R$ {maior:.2f}')
print(f'O preço mais baixo foi de R$ {menor:.2f}')
# --- Simplificando a Ordem Decrescente ---
num1 = int(input('Informe o primeiro número: '))
num2 = int(input('Informe o segundo número: '))
num3 = int(input('Informe o terceiro número: '))
# Colocamos os números em uma lista e pedimos para o Python ordenar de forma reversa
numeros_ordenados = sorted([num1, num2, num3], reverse=True)
print("Números em ordem decrescente:")
for num in numeros_ordenados:
print(num)
No seu script da calculadora ("Momento dos projetos"), você construiu uma ótima validação para verificar as propriedades do resultado da operação (se é par/ímpar, positivo/negativo ou inteiro/decimal).
No entanto, há uma "pegadinha" clássica de engenharia de software na operação de divisão (/): o usuário pode digitar o número 0 como o segundo número. Se isso acontecer, a linha resultado = num1 / num2 quebrará o programa imediatamente com um erro crítico de ZeroDivisionError.
Uma excelente prática de proteção é interceptar essa possibilidade no exato momento da operação. Veja como o seu bloco elif operacao == '/': pode ganhar uma camada de segurança:
elif operacao == '/':
if num2 == 0:
print("Erro: Não é possível realizar uma divisão por zero!")
resultado = 0
else:
resultado = num1 / num2
Sua divisão de tarefas e a consistência em testar cenários variados — como o cálculo de variação percentual de vendas, a classificação de triângulos e a validação do turno de estudos — mostra que você está construindo uma base fantástica em Data Science.
Qual desses exercícios você achou mais desafiador de estruturar logicamente?