Questão 3 (35pts). Observação: Para essa questão não é preciso desenvolver a função principal (main). Apenas as funções solicitadas nos itens a) e b).
Escreva uma função qué leia 2 valores inteiros representando, respectivamente, um dia e um mês do ano corrente (2023). Para simplificar, considere que todos os 12 meses do ano possuem 30 dias. A função deve verificar se a data informada é uma data válida. A função deve imprimir a data no formato dia/mês/2023, onde dia e mês correspondem aos valores lidos pela função. Além disso, caso seja uma data inválida, a função também deve imprimir que a data é inválida, informando o motivo (vide exemplos).
Exemplos:
Entrada Saída
5 |l|l| hline Entrada & Saída hline 5 & $5 / 8 / 2023$ 8 & hline 0 & $0 / 12 / 2023$ 12 & Data inválida para dia hline 25 & $25 / 20 / 2023$ 20 & Data inválida para mês hline 50 & $50 / 50 / 2023$ 50 & Data inválida para dia e mês hline
8
0
12 Data inválida para dia
25
20 Data inválida para mês
50
50 Data inválida para dia e mês

Passo 1

Beleza! Vamos resolver essa questão juntos. O que a gente precisa fazer aqui é criar uma função que recebe dois números inteiros: um representando o dia e outro o mês de 2023. A gente vai verificar se essa data é válida, considerando que todos os meses têm 30 dias. Para resolver isso, vamos precisar entender como validar dias e meses e como estruturar uma função para fazer essas verificações.

Passo 2

Primeiro, vamos pensar em como a gente vai receber os valores. A função vai ler dois números inteiros: um para o dia e outro para o mês. Vamos chamar esses valores de dia e mes.

Passo 3

Agora, precisamos verificar se o dia e o mês são válidos. Como todo mês tem 30 dias, o dia deve estar entre 1 e 30, e o mês deve estar entre 1 e 12. Se qualquer um desses valores estiver fora desse intervalo, a data é inválida.

Passo 4

Para implementar isso, vamos usar estruturas condicionais (if, elif e else) para verificar cada caso:
  • Se o dia for menor que 1 ou maior que 30, a data é inválida por causa do dia.
  • Se o mês for menor que 1 ou maior que 12, a data é inválida por causa do mês.
  • Se ambos, dia e mês, estiverem fora dos intervalos, a data é inválida por ambos os motivos.
  • Se tudo estiver dentro dos limites, a data é válida.

Passo 5

Vamos estruturar a função para imprimir a data no formato dia/mês/2023. Se a data for inválida, além de imprimir a data, também vamos informar o motivo da invalidação.

Passo 6

Aqui está a função completa:
def verificar_data(dia, mes):
    data_valida = True
    motivo = ""

    # Verificar o dia
    if dia < 1 or dia > 30:
        data_valida = False
        motivo += "Data inválida para dia"

    # Verificar o mês
    if mes < 1 or mes > 12:
        data_valida = False
        if motivo:
            motivo += " e mês"
        else:
            motivo += "Data inválida para mês"

    # Imprimir a data
    print(f"{dia} / {mes} / 2023")

    # Se inválida, imprimir o motivo
    if not data_valida:
        print(motivo)

Resposta

Prontinho! Com essa função, você consegue verificar se uma data é válida considerando que todos os meses têm 30 dias. Ela imprime a data no formato dia/mês/2023 e informa se a data é inválida, explicando o motivo. Por exemplo:
verificar_data(5, 8)
# Saída:
# 5 / 8 / 2023

verificar_data(0, 12)
# Saída:
# 0 / 12 / 2023
# Data inválida para dia

verificar_data(25, 20)
# Saída:
# 25 / 20 / 2023
# Data inválida para mês

verificar_data(50, 50)
# Saída:
# 50 / 50 / 2023
# Data inválida para dia e mês

Exercícios relacionados