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
datetimedo Python). Vou mostrar a abordagem simples primeiro (comsplit) e, em seguida, uma versão mais robusta que valida a data comdatetime. 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 separadorsep. - Exemplo: se
s = "3/8/2003", entãos.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
splitsã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 comint():dia = int(partes[0]). int("03")resulta em3, 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 digitar3/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).
- Existem exatamente 3 partes após o
- Essas checagens pegam muitos erros comuns. Para validação completa (por exemplo, fevereiro com 29 dias, anos bissextos, meses com 30 dias), recomendamos usar
datetimedo 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 imprimedia: 3(com um espaço após os dois-pontos, como no exemplo).print("mês:", mes)— note quemêscom acento pode ser usado no string, mas a variável chamaremosmes.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:
- Ler a string da data.
- Remover espaços e dividir por
/. - Verificar que há 3 partes.
- Tentar converter para inteiros.
- Validar intervalos básicos.
- 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
datetimepermite tentar criar um objetodate(year, month, day)e ele vai falhar se a data não existir (por exemplo,31/2/2021). - Fluxo dessa versão:
- Ler e dividir.
- Converter para inteiros com
int()dentro detry. - Tentar
datetime.date(ano, mes, dia)dentro detrypara validar. - 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
- Saída:
- Entrada:
03/08/2003(com espaços e zeros à esquerda)- Com
strip()eint()vai resultar:- dia: 3
- mês: 8
- ano: 2003
- Com
- Entrada inválida:
31/2/2021- Versão simples pode aceitar ou rejeitar dependendo das checagens; versão com
datetimeretornará “Data inválida.”
- Versão simples pode aceitar ou rejeitar dependendo das checagens; versão com
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).")