Estou fazendo um exercicio do Wiki Python de Estrutura De Decisao, eu consegui resolver da forma mais simples o exercicio, porém sempre procuro da uma robustada no sistema, incluindo mais variáveis e definições e tals
Fui aplicar pra ver se a data estaria correto ou falso conforme a solicitação do exercicio, mas como tem ano bissexto e é em fevereiro, queria validar isso qnd alguem colocar por ex 29/02/2022 (retornar "Dia Errado") e qnd der 29/02/2020 (retornar "Dia Correto").
Abaixo segue o exercicio e meu algoritmo logo em seguida:
# 18. Faça um Programa que peça uma data no formato dd/mm/aaaa e determine
# se a mesma é uma data válida.
class Exer_18:
def __init__(self):
self.coletar_dados()
self.calcular_dados()
def coletar_dados(self):
self.data_input = str(input('Informe a Data: '))
def calcular_dados(self):
# instancinado input da data
data = self.data_input
# separando dia, mes e ano da str
data = data.split('/')
# Conferir se os dados estão
if len(data[0]) == 2 and len(data[1]) == 2 and len(data[2]) == 4 :
# transformar dados str em int
data[0] = int(data[0])
data[1] = int(data[1])
data[2] = int(data[2])
# instanciar datas nas variaveis, para facilitar no algoritmo
dia = data[0]
mes = data[1]
ano = data[2]
mes_31 = [1, 3, 5, 7, 8, 10, 12]
mes_29 = 2
# Confere se o é bissexto ou não
if ano % 100 != 0 and ano % 4 == 0 or ano % 400 == 0:
bissexto = True
else:
bissexto = False
# Confere se a data inserida é correto
if dia > 0 and dia < 29:
print('Dia Correto')
# Conferencia de excessoes
# elif dia == 28 and mes == mes_28:
# print('Dia Correto')
elif dia == 29 and bissexto is True:
print('Dia Correto')
elif dia == 31:
for data in mes_31:
if mes == data:
print('Dia Correto')
elif dia >= 28 and dia < 31:
print('Dia Correto')
else:
print('Dia Errado')
# Confere se o mes inserido é correto
if mes > 0 and mes < 13:
print('Mes Correto')
else:
print('Mes Errado')
# ano atual (dava pra automatizar, mas veremos dps)
ano_atual = 2022
# Confere se o ano inserido é correto
if ano > 0 and ano <= ano_atual:
print('Ano Correto')
else:
print('Ano Errado')
else:
print('Dia, Mês ou Ano Errado')
Exer_18()
[1]:
https://wiki.python.org.br/ListaDeExerciciosO problema e que não to entendendo como devo estruturar algoritmo pra validar sobre o ano bissexto, pq não esta dando certo, tentei refatorar linha por linha e so me deu nó na cabeça, então, passo esse desafio a vocês pra me ajudar com esse ponto.
#Conferencia de excessoes
# elif dia == 28 and mes == mes_28:
# print('Dia Correto')
elif dia == 29 and bissexto is True:
print('Dia Correto')
elif dia == 31:
for data in mes_31:
if mes == data:
print('Dia Correto')
elif dia >= 28 and dia < 31:
print('Dia Correto')
else:
print('Dia Errado')
O algoritmo me retorna assim
Informe a Data: 29/02/2022 <- input
Dia Correto
Mes Correto
Ano Correto
<__main__.Exer_18 at 0x7fe36cf8ae50>
Agradeço a atenção de todos.