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

Resposta desafio

Minha primeira resposta foi:

class Data:

    def __init__(self, dia, mes, ano):
        self.dia = dia
        self.mes = mes
        self.ano = ano

    def formatada(self):
        print("{}/{}/{}".format(self.dia, self.mes, self.ano))

Uma outra resposta seria:

class Data:
    def __init__(self, dia: int, mes: int, ano: int) -> None:

        self.dia = dia
        self.mes = mes
        self.ano = ano
        self.bissexto: bool = False
        self.data_correta_dia: bool = False
        self.data_correta_ano: bool = False
    @property
    def verifica_bissexto(self):
        if self.ano % 4 == 0 :
            self.bissexto = True
        return self.bissexto

    @property
    def verifica_dias_mes(self) -> int:
        if self.mes in [1, 3, 5, 7, 8, 10, 12] and 1 <= self.dia <= 31:
            self.data_correta_dia = True
        elif self.mes in [4, 6, 9, 11] and 1 <= self.dia <= 30:
            self.data_correta_dia = True
        elif self.mes == 2 and ((self.verifica_bissexto and 1 <= self.dia <= 29) or (not self.verifica_bissexto and 1 <= self.dia <= 28)):
            self.data_correta_dia = True
        else:
            self.data_correta_dia = False
        return self.data_correta_dia

    @property
    def verifica_mes_ano(self) -> int:
        if 1 <= self.ano <= 12:
            self.data_correta_ano = True
        else:
            self.data_correta_ano = False
        return self.data_correta_ano

    def formatada(self) -> None:
        if self.verifica_dias_mes and self.verifica_mes_ano:
            saida = f"{self.dia:02d}/{self.mes:02d}/{self.ano:02d}"
        else:
            saida = "Data Incorreta!"
        return print(saida)
2 respostas
solução!

Olá, José!

Obrigado por compartilhar suas respostas para o desafio de criar a classe "Data" no curso de Python sobre Orientação a Objetos. É ótimo ver diferentes abordagens para resolver o mesmo problema!

A primeira resposta que você compartilhou parece estar correta. A classe "Data" possui um método "init" que recebe os parâmetros "dia", "mes" e "ano" e os atribui aos respectivos atributos da classe. Além disso, a classe possui o método "formatada" que imprime a data formatada.

Já a segunda resposta que você compartilhou é mais complexa e possui algumas propriedades adicionais, como a verificação se o ano é bissexto e a validação dos dias do mês. Essas propriedades são úteis para garantir que a data informada seja válida.

É importante lembrar que a classe deve retornar a data formatada e não imprimi-la diretamente. Portanto, o método "formatada" deve retornar a string formatada em vez de imprimi-la.

Aqui está um exemplo de como você poderia modificar a segunda resposta para retornar a data formatada:

class Data:
    def __init__(self, dia: int, mes: int, ano: int) -> None:
        self.dia = dia
        self.mes = mes
        self.ano = ano

    @property
    def verifica_bissexto(self):
        if self.ano % 4 == 0:
            return True
        return False

    @property
    def verifica_dias_mes(self) -> bool:
        if self.mes in [1, 3, 5, 7, 8, 10, 12] and 1 <= self.dia <= 31:
            return True
        elif self.mes in [4, 6, 9, 11] and 1 <= self.dia <= 30:
            return True
        elif self.mes == 2 and ((self.verifica_bissexto and 1 <= self.dia <= 29) or (not self.verifica_bissexto and 1 <= self.dia <= 28)):
            return True
        return False

    @property
    def verifica_mes_ano(self) -> bool:
        if 1 <= self.mes <= 12:
            return True
        return False

    def formatada(self) -> str:
        if self.verifica_dias_mes and self.verifica_mes_ano:
            return f"{self.dia:02d}/{self.mes:02d}/{self.ano:02d}"
        else:
            return "Data Incorreta!"

Nesta versão modificada, o método "formatada" retorna a data formatada como uma string. Caso a data seja incorreta, a string "Data Incorreta!" é retornada.

Espero ter ajudado e bons estudos!

Boa! É ótimo receber um feedback. Obrigado.