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

Estou tentando resolver um exercício que pede para validar uma data no formato dd/mm/aaaa. Eu consegui validar a data para meses com 30 dias e para ano bissexto, mas eu estou apanhando para validar os meses com 31 dias. Alguém ter alguma sugestão?

condicao = "True"

while (condicao):
    data = input('Digite uma data no formato dd/mm/aaaa: ')
    dia = int(data[:2])
    mes = int(data[3:5])
    ano = int(data[6:])

    if(ano%4 == 0 and ano%100 != 0 or ano%400 == 0):
        ano_bissexto = "sim"
    else:
        ano_bissexto = "nao"

    if(mes >= 1 and mes <= 12): #dia == 31 mes == 06 ano == 2020
        if((mes == 4 or mes == 6 or mes == 9 or mes == 11) and dia <= 30):
            condicao = False
            print("regra 1")
        elif((ano_bissexto == "sim" and dia <= 29) or (ano_bissexto == "nao" and dia <= 28) and mes == 2):
                condicao = False
                print("regra 2")
        else:
            print("Data inválida!")
            continue
print(data)
4 respostas
solução!

Oi, vi que os "resultados" são regra 1, regra 2... Seria bom se você dissesse o que tem que fazer. Para validar os meses que possuem 31 dias, você pode criar uma lista com os meses e fazer um if verificando se o mês está na lista. Ex:

meses_31_dias = [1, 3, 5, 7, 8, 10, 12]
if mes in meses_31_dias:  # pode adicionar mais validações aqui no if também
    # faça o que o exercício pede aqui...

Outra dica.. Tente usar mais os valores booleanos True e False. Por exemplo, ai invés de atribuir "sim" ao ano_bissexto, atribua True, assim no if depois não precisa comparar ele com "sim", basta colocar a variável. E no início também, você está definindo a variável condição como uma string "True".

Oi, os resultados regra1 e regra2 era somente para eu verificar se pegou o If correto.

Muito obrigado pelas dicas. Sempre são bem vindas.

De nada Alexandre, tem algo mais? Conseguiu resolver?

Sim deu certo, obrigado.