Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Meu desafio opcional

datas

class Data:
    def __init__(self, dia, mes, ano):
        self.dia = dia
        self.mes = mes
        self.ano = ano
        print("Bém vindo! Para começar, digite uma data válida no formato (dd/mm/aaaa):")

Método que vai validar o dia com dois dígitos e considerar somente números e retornar o valor em uma str

def valida_dia(self, digita):
    condicao = False
    while (not condicao):
        digite = input("Dia?")
        if (len(digite) == 2) and (digite.isdigit() == True):
            digite = int(digite)
        else:
            print("Você digitou um valor inválido, digite apenas números")


        if (digite in range(1, 32)):
            digite = str(digite)
            self.dia = []
            self.dia.extend(digite)
            condicao = True
        else:
            print("O dia digitado não pode ser maior que dois digitos e precisa ser um número")

    if (digite == '1') or (digite == '2') or (digite == '3') or (digite == '4') or (digite == '5') or (digite == '6') or (digite == '7') or (digite == '8') or (digite == '9'):
        self.dia.insert(0, '0')
        self.dia = "".join(self.dia)
    else:
        self.dia = "".join(self.dia)

Método que vai validar o mês em dois digitos e somente aceita números e retorna uma str


    def valida_mes(self, digita):
        condicao = False
        while (not condicao):
            digite = input("Mês?")
            if (len(digite) == 2) and (digite.isdigit() == True):
                digite = int(digite)
            else:
                print("Você digitou um valor inválido, digite apenas números")


            if (digite in range(1, 13)):
                digite = str(digite)
                self.mes = []
                self.mes.extend(digite)
                condicao = True
            else:
                print("O mês digitado não pode ser maior que dois digitos e precisa ser um número")

        if (digite == '1') or (digite == '2') or (digite == '3') or (digite == '4') or (digite == '5') or (digite == '6') or (digite == '7') or (digite == '8') or (digite == '9'):
            self.mes.insert(0, '0')
            self.mes = "".join(self.mes)
        else:
            self.mes = "".join(self.mes)

Método que vai validar o ano em quatro digitos e precisa ser um número e retorna uma str


    def valida_ano(self, digita):
        condicao = False
        while (not condicao):
            digite = input("Ano?")
            if (len(digite) == 4) and (digite.isdigit() == True):
                digite = int(digite)
            else:
                print("Você digitou um valor inválido, digite apenas números")


            if (digite in range(1, 9999)):
                digite = str(digite)
                self.ano = []
                self.ano.extend(digite)
                self.ano = "".join(self.ano)
                condicao = True
            else:
                print("O ano digitado não pode ser maior que quatro digitos e precisa ser um número")


    def imprime_data(self):
        print("A data é: {}/{}/{}".format(self.dia, self.mes, self.ano))

Testando datas


from datas import Data
data1 = Data("12","09","2022")
print(data1)
data1.imprime_data()
data1.valida_dia(None)
data1.valida_mes(None)
data1.valida_ano(None)
data1.imprime_data()

#


Bém vindo! Para começar, digite uma data válida no formato (dd/mm/aaaa):
<datas.Data object at 0x00000153FBAC7D60>
A data é: 12/09/2022
Dia?15
Mês?07
Ano?2002
A data é: 15/07/2002
1 resposta
solução!

Olá Douglas,

Meus parabéns pela implementação do código.

Além do uso do .join() na formatação de strings temos outras opções que podem ser úteis no dia a dia, deixo abaixo como recomendação um artigo que apresenta um pouco mais sobre formatação de string.

Uma dica de biblioteca que podemos utilizar para validar e formatar uma data e horas com uma maior facilidade é a biblioteca datetime. Por ser um recurso no formato estrangeiro, devemos informar os valores na seguinte ordem: ano, mês, dia, hora, minutos:

Modelo

import datetime

data = datetime.datetime(2022, 12, 1, 13, 11)

print(data.strftime('%d/%m/%Y %H:%M'))

Resultado

01/12/2022 13:11

No código acima é utilizado códigos de formatação para transformar a saída no padrão Brasileiro, onde:

  • %d significa dia entre 01 e 31
  • %m significa número do mês
  • %Y significa ano, com a versão completa, Ex.: 2022
  • %H significa hora entre 00 e 23
  • %M significa minutos

Para saber um pouco mais sobre a biblioteca datetime, recomendo a leitura dos seguintes artigos:

O segundo artigo está em inglês, caso tenha dificuldade com o idioma, recomendo o uso do tradutor do navegador.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.