Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Desafio 4] Soluções avançadas para os desafios

Olá pessoal, espero que esta mensagem os encontre bem ao tempo de sua leitura!

Estou compartilhando os principais pontos que achei pertinente demonstrar a minha solução para o desafio, as respostas completas pode ser visualizada no projeto: https://github.com/vitorkol/python-for-data disponibilizado no meu github.

Questão 1 uso das funções min() e max() para suporte da função range().

inicio = int(input('Insira o primeiro número: '))
fim = int(input('Insira o segundo número: '))

if inicio == fim:
    print('Os números são iguais.')
else:
    # Apliquei as funções min() e max() da documentação python que garantem que o range sempre funcione, independente da ordem que o usuário digitou.
    menor = min(inicio, fim)
    maior = max(inicio, fim)
    
    for i in range(menor + 1, maior):
        print(i)

Questão 2

# Coleta de Dados, pensando em um sistema que possa ser reutilizado através de parâmetros.
print("--- Simulador de Crescimento Microbiológico ---")

# Usei nomes de variáveis curtos para as contas, mas mantemos a lógica clara, uma vez que os dados
# serão armazenados em algum banco de dados.
a = float(input("População inicial da Colônia A: "))
b = float(input("População inicial da Colônia B: "))
taxa_a = float(input("Taxa de crescimento da Colônia A (ex: 0.03): "))
taxa_b = float(input("Taxa de crescimento da Colônia B (ex: 0.015): "))

# Contador de dias
dias = 0

while a <= b:
    a *= (1 + taxa_a)
    b *= (1 + taxa_b)
    dias += 1

    # Adicionei um condição que é útil para entender o que acontece a cada 10 dias em simulações longas
    # Sugestão de melhoria para a RN do desafio.
    if dias % 10 == 0:
        print(f"Dia {dias}: Colônia A = {a:.2f} | Colônia B = {b:.2f}")

print("\n--- Resultado da Simulação ---")
print(f"Tempo necessário: {dias} dias.")
print(f"População final A: {a:.2f} unidades.")
print(f"População final B: {b:.2f} unidades.")

Questão 8 uso de while continue, true e break ensinados no curso, mas avançando para tratamento de erros não especificados na regra de negócios.

# Declaração dos contadores iniciando com 0
contador_0_25 = 0
contador_26_50 = 0
contador_51_75 = 0
contador_76_100 = 0

while True:
    try:
        #  Coletando as idades dos clientes para análise dentro loop como entrada única até encontrar um break
        # Alterei a lógica para aplicar uma RN a fim de evitar o ValueError caso o usuário digitasse: 'vinte' ao inves de 20.
        entrada = input('Informe a idade (ou um número negativo para encerrar): ')
        idade = int(entrada) # Sem essa tratativa o erro aconteceria aqui se fosse digita idade em texto.
        
        # Condição de saída imediata
        if idade < 0:
            print("Encerrando programa...")
            break  # O break "quebra" o loop e pula direto para fora do while
            
        # Processamento dos dados (Regras de Negócio)
        if idade <= 25:
            contador_0_25 += 1
        elif idade <= 50: 
            contador_26_50 += 1
        elif idade <= 75:
            contador_51_75 += 1
        elif idade <= 100:
            contador_76_100 += 1
        else:
            print("Idade fora da faixa de análise (0-100).")
    except ValueError: #Se o usuário digitar texto ao invés de número, o código pula para cá em vez de travar!
        print("Erro: Por favor, digite apenas números inteiros (ex: 25).")

print('\nDistribuição final:')
print(f'[0-25]:   {contador_0_25}')
print(f'[26-50]:  {contador_26_50}')
print(f'[51-75]:  {contador_51_75}')
print(f'[76-100]: {contador_76_100}')

A imagem a seguir exemplificando a sugestão da professora:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
A imagem a seguir exemplificando a minha solução:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Fico totalmente aberto ao diálogo e à construção conjunta.

Espero ter contribuído um pouco mais para os estudos de nossos colegas do fórum!

2 respostas
solução!

Olá, Vitor! Como vai?

Parabéns pelas soluções encontradas!

Observei que você explorou o uso de funções como min() e max() para garantir robustez no controle de intervalos em Python, utilizou muito bem estruturas de repetição e tratamento de erros para tornar o código mais confiável e ainda compreendeu a importância de aplicar regras de negócio claras para simulações e validações de entrada.

Uma dica interessante para o futuro é encapsular suas lógicas em funções, o que facilita a reutilização do código. Assim:

def intervalo(inicio, fim):
    menor, maior = min(inicio, fim), max(inicio, fim)
    return list(range(menor + 1, maior))

print(intervalo(2, 10))

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Olá Daniel, obrigado pelo retorno!

Sua sugestão será acolhida com muito respeito.
Como o curso é bem básico, fiquei com receio de trazer soluções robustas e que não condissessem com o nivelamento da turma.

Todavia, vou aprofundar os estudos para aplicar o conceito encapsular o código.

Um forte abraço e uma excelente semana!