Escreva um programa no qual o usuário digita uma data e seja impresso na tela o dia, mês e ano separadamente (Exemplo: o programa pede para o usuário digitar uma data; o usuário digita 3/8/2003; o programa exibe na tela: dia: 3 mês: 8 ano: 2003).

Passo 1

O enunciado pede que o usuário digite uma data e que o programa exiba na tela o dia, o mês e o ano separadamente. Informações e requisitos explícitos/implícitos que temos:
  • Entrada: o usuário digita uma data em formato parecido com o exemplo dado: 3/8/2003.
  • Saída esperada: imprimir três linhas (ou frases) contendo o dia, o mês e o ano separados, por exemplo:
    • dia: 3
    • mês: 8
    • ano: 2003
  • Observações de formato que vamos assumir (porque o enunciado não detalha): o separador usado no exemplo é a barra /; dia e mês podem ter 1 ou 2 dígitos; ano tem 4 dígitos típicos.
    Nada mais foi pedido (por exemplo, não foi exigido aceitar outros separadores), então vamos resolver para o formato com barras e ainda mostrar como tornar o programa mais robusto.

Passo 2

Escolha do método de resolução (motivo):
  • O enunciado não exige método específico, então vamos escolher um método simples e didático: receber a data como string e “quebrá-la” usando o separador /. Esse método usa operações de string básicas (que geralmente são as primeiras coisas ensinadas) e é suficiente para o exemplo.
  • Alternativas: usar expressões regulares, ou usar um parser de datas (por exemplo, o módulo datetime do Python). Vou mostrar a abordagem simples primeiro (com split) e, em seguida, uma versão mais robusta que valida a data com datetime. Preferi começar pela versão básica porque é rápida de entender e de implementar sem bibliotecas.

Passo 3

Conceitos básicos que usamos: leitura de entrada e strings (explicado passo a passo)
  • Para receber texto do usuário em Python usamos a função input(). Exemplo: texto = input("Digite a data: ").
  • input() sempre retorna uma string (texto). Mesmo que o usuário digite números, eles chegam como texto.
  • Strings têm métodos úteis. O que vamos usar primeiro é strip() para remover espaços em branco extras do começo e do fim: texto.strip().

Passo 4

Como separar dia, mês e ano da string: o método split
  • O método split(sep) quebra uma string em uma lista de pedaços usando o separador sep.
  • Exemplo: se s = "3/8/2003", então s.split("/") resulta na lista ["3", "8", "2003"].
  • Se houver espaços, é bom fazer s.strip() antes: s.strip().split("/").
  • Depois de split, teremos três strings correspondentes a dia, mês e ano (ou menos/more se o usuário errou o formato — vamos tratar isso).

Passo 5

Converter cada parte para número inteiro e por que fazer isso
  • As partes retornadas por split são strings; para garantir que são valores numéricos e para permitir validações (por exemplo, checar se dia está entre 1 e 31), convertemos para inteiro com int(): dia = int(partes[0]).
  • int("03") resulta em 3, então zeros à esquerda não são problema.
  • Como int() lança erro se a string não for um número (por exemplo, se o usuário digitar 3/ago/2003), devemos usar tratamento de exceção (try / except) para capturar entradas inválidas e exibir mensagem amigável.

Passo 6

Validação simples dos valores (para evitar imprimir resultados absurdos)
  • Verificações mínimas recomendadas:
    • Existem exatamente 3 partes após o split.
    • 1 <= dia <= 31.
    • 1 <= mês <= 12.
    • ano é um número inteiro razoável (por exemplo, ano >= 1).
  • Essas checagens pegam muitos erros comuns. Para validação completa (por exemplo, fevereiro com 29 dias, anos bissextos, meses com 30 dias), recomendamos usar datetime do Python (vou mostrar logo a seguir).

Passo 7

Como imprimir o resultado de forma simples
  • Em Python, podemos usar print() para mostrar linhas.
  • Para imprimir exatamente no formato do enunciado:
    • print("dia:", dia) — isso imprime dia: 3 (com um espaço após os dois-pontos, como no exemplo).
    • print("mês:", mes) — note que mês com acento pode ser usado no string, mas a variável chamaremos mes.
    • print("ano:", ano)

Passo 8

Programa simples completo (versão clara e didática, com validação básica)
  • Explicação do fluxo do programa:
    1. Ler a string da data.
    2. Remover espaços e dividir por /.
    3. Verificar que há 3 partes.
    4. Tentar converter para inteiros.
    5. Validar intervalos básicos.
    6. Imprimir dia, mês e ano.
  • Código (versão simples e legível):
# Versão simples com validação básica
entrada = input("Digite a data (d/m/aaaa): ").strip()
partes = entrada.split("/")

if len(partes) != 3:
    print("Formato inválido. Use d/m/aaaa, por exemplo: 3/8/2003")
else:
    try:
        dia = int(partes[0])
        mes = int(partes[1])
        ano = int(partes[2])

        if not (1 <= dia <= 31):
            print("Dia inválido. Deve estar entre 1 e 31.")
        elif not (1 <= mes <= 12):
            print("Mês inválido. Deve estar entre 1 e 12.")
        elif ano < 1:
            print("Ano inválido. Deve ser um número positivo.")
        else:
            print("dia:", dia)
            print("mês:", mes)
            print("ano:", ano)
    except ValueError:
        print("Partes da data devem ser números. Use o formato d/m/aaaa.")

Passo 9

Versão mais robusta usando o módulo datetime (valida dias/meses/anos corretamente)
  • O módulo datetime permite tentar criar um objeto date(year, month, day) e ele vai falhar se a data não existir (por exemplo, 31/2/2021).
  • Fluxo dessa versão:
    1. Ler e dividir.
    2. Converter para inteiros com int() dentro de try.
    3. Tentar datetime.date(ano, mes, dia) dentro de try para validar.
    4. Se tudo ok, imprimir.
  • Código mais robusto:
# Versão robusta com validação completa usando datetime
import datetime

entrada = input("Digite a data (d/m/aaaa): ").strip()
partes = entrada.split("/")

if len(partes) != 3:
    print("Formato inválido. Use d/m/aaaa, por exemplo: 3/8/2003")
else:
    try:
        dia = int(partes[0])
        mes = int(partes[1])
        ano = int(partes[2])

        # Validação completa: tenta criar um objeto date
        data = datetime.date(ano, mes, dia)

        # Se não houve exceção, a data é válida
        print("dia:", dia)
        print("mês:", mes)
        print("ano:", ano)
    except ValueError:
        print("Data inválida. Verifique dia, mês e ano (ex.: 3/8/2003).")

Passo 10

Exemplos de execução (para você testar mentalmente ou na prática)
  • Entrada: 3/8/2003
    • Saída:
      • dia: 3
      • mês: 8
      • ano: 2003
  • Entrada: 03/08/2003 (com espaços e zeros à esquerda)
    • Com strip() e int() vai resultar:
      • dia: 3
      • mês: 8
      • ano: 2003
  • Entrada inválida: 31/2/2021
    • Versão simples pode aceitar ou rejeitar dependendo das checagens; versão com datetime retornará “Data inválida.”

Resposta

import datetime

entrada = input("Digite a data (d/m/aaaa): ").strip()
partes = entrada.split("/")

if len(partes) != 3:
    print("Formato inválido. Use d/m/aaaa, por exemplo: 3/8/2003")
else:
    try:
        dia = int(partes[0])
        mes = int(partes[1])
        ano = int(partes[2])

        # Validação completa: tenta criar um objeto date
        datetime.date(ano, mes, dia)

        # Se não houve exceção, a data é válida
        print("dia:", dia)
        print("mês:", mes)
        print("ano:", ano)
    except ValueError:
        print("Data inválida. Verifique dia, mês e ano (ex.: 3/8/2003).")

Exercícios relacionados