Importante

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!

2
respostas

[Dúvida] Dados Estruturados

Quero saber maneiras de reduzir, aprimorar ou deixar mais efetivo essa solução da questão 6 da aula de dados estruturados e se está correta.

data = input('Digite uma data no formato dd/mm/aaaa: ')
dia, mes, ano = data.split('/')
dia = int(dia)
mes = int(mes)
ano = int(ano)
if mes < 0 or dia < 0 or mes < 0 or ano < 0:
  print('Data inválida!')
elif mes > 12:
  print('Data inválida!')
elif ano % 4 == 0 and (ano % 100 != 0 or ano % 400 == 0):
  if mes == 2:
    if dia >= 30:
      print('Data inválida!')
    elif 0 < dia < 30:
      print('Data válida!')
    else:
      print('Data inválida!')
  elif mes == 1 or mes == 3 or mes == 5 or mes == 7 or mes == 8 or mes == 10 or mes == 12:
    if dia >= 32:
      print('Data inválida!')
    elif 0 < dia < 32:
      print('Data válida!')
    else:
      print('Data inválida!')
  else:
    if dia >= 31:
      print('Data inválida!')
    elif 0 < dia < 31:
      print('Data válida!')
    else:
      print('Data inválida!')
elif mes == 2:
  if dia >= 29:
    print('Data inválida!')
  elif 0 < dia < 29:
    print('Data válida!')
  else:
    print('Data inválida!')
elif mes == 4 or mes == 6 or mes == 9 or mes == 11:
  if dia >= 31:
    print('Data inválida!')
  elif 0 < dia < 31:
    print('Data válida!')
else:
  if dia >= 32:
    print('Data inválida!')
  elif 0 < dia < 32:
    print('Data válida!')
  else:
    print('Data inválida!')
print(data)
2 respostas

Dúvida Questão 7
Também quero compreender melhor essa.

multiplicacao = [1.2, 2.1, 3.3, 5.0, 7.8, 11.3, 16.6, 25.1, 37.8, 56.9]
amostra_atual = 0
amostra_passada = 0
percentual = []
print('CRESCIMENTO DA COLÔNIA\nDia 1 = 1.2')
for dia in range(1,len(multiplicacao)):
  print(f'Dia {dia+1}: {multiplicacao[dia]} de multiplicação')
  amostra_atual = multiplicacao[dia]
  amostra_passada = multiplicacao[dia-1]
  variacao = 100 * (amostra_atual - amostra_passada) / (amostra_passada)
  print(f'Percentual de crescimento: {variacao}%')
  percentual.append(variacao)
print(f'Percentuais de crescimento: {percentual}')

Ei! Tudo bem, Regina?

Parabéns por buscar evoluir seus códigos! Suas duas lógicas funcionam bem e realmente conseguimos resolver a questão de outras formas.

Outra forma de resolver a questão 6: Validação de datas

Podemos criar um dicionário mapeando os meses e a quantidade máxima de dias que cada um aceita. Para o mês de fevereiro, ajustamos o limite dinamicamente se o ano for bissexto:

data = input('Digite uma data no formato dd/mm/aaaa: ')
dia, mes, ano = map(int, data.split('/'))

# Dicionário com o limite padrão de dias por mês
dias_por_mes = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 
                7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}

# Ajusta fevereiro se o ano for bissexto
if ano % 4 == 0 and (ano % 100 != 0 or ano % 400 == 0):
    dias_por_mes[2] = 29

# Uma única validação direta
if (1 <= mes <= 12) and (1 <= dia <= dias_por_mes.get(mes, 0)) and (ano >= 0):
    print('Data válida!')
else:
    print('Data inválida!')

Outra forma de resolver a questão 7: crescimento da colônia

O loop começa no range(1, len(multiplicacao)), ou seja, a partir do índice 1 (segundo elemento). Isso é necessário porque o "Dia 1" não tem um dia anterior para comparar. Ao fazer multiplicacao[dia-1], você olha para trás de forma segura.

Uma forma elegante de deixar esse código mais pythonico é usar a função zip(), que nos permite parear a lista com ela mesma deslocada em uma posição. Isso evita ter que ficar calculando índices manuais (dia-1), reduzindo as chances de erros visuais:

multiplicacao = [1.2, 2.1, 3.3, 5.0, 7.8, 11.3, 16.6, 25.1, 37.8, 56.9]
percentual = []

print('CRESCIMENTO DA COLÔNIA\nDia 1 = 1.2')

# Pareia o dia anterior com o dia atual automaticamente
for dia, (passada, atual) in enumerate(zip(multiplicacao, multiplicacao[1:]), start=2):
    variacao = 100 * (atual - passada) / passada
    percentual.append(round(variacao, 2)) # Arredonda para 2 casas decimais
    print(f'Dia {dia}: {atual} de multiplicação')
    print(f'Percentual de crescimento: {round(variacao, 2)}%')

print(f'Percentuais de crescimento: {percentual}')

Na atividade, em Ver a opinião da pessoa instutora você consegue ver outra forma de fazer, vale a pena!

E clicando aqui você acessa o notebook no qual testei os códigos acima.

Espero ter ajudado e conte sempre com o nosso auxílio aqui no fórum.

Bons estudos e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado