4
respostas

Desafio de datas (feito porém com dúvida)

Galera, fiz aqui e deu certo. Porém, tem um problema de input. Caso o usuário digite o "0" para dias ou meses menores que 10, o Python retorna um erro. Estou dando uma pesquisada aqui para encontrar uma forma de tratar este erro. De qualquer forma gostaria de saber se encontraram respostas diferentes para este tratamento de input.

class Data:

    def __init__(self, dia, mes, ano):
        print("Construindo Objeto...")
        self.dia = dia
        self.mes = mes
        self.ano = ano


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

Welbert, isso acontece porque o python não aceita você inserir valores inteiros iniciados em 0 (tipo 01, 09 etc.) A saída seria ou você escrever apenas o número, sem o 0 antes, fazendo d = Data(1,9,2019), ou inseri-los como string fazendo d = Data("01","09","2019").

Boa, obrigado. Até ai tudo bem, esta parte ficou clara. Meu ponto é que não quero depender de o usuário digitar corretamente. Eu sei que existe uma forma de tratar esta entrada para evitar o erro. Seria algo relacionado ao format. Estou dando uma pesquisada aqui. Assim que encontrar posto aqui.

Cara, se você encontrar algo, diz aí, mas acredito que não tenha solução pra esse caso. O problema não está na saída da informação, que é o que acontece no format, mas sim na entrada, em que você insere um número inteiro iniciando com 0. Pro python, com razão, isso não faz sentido, já que é mais uma convenção nossa pra representar datas.

Se você fizer questão de ver o 0 no início das datas, além de escrevê-las como string como eu coloquei no meu comentário anterior, outra solução seria fazer:

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

Isso vai garantir que sempre que o usuário digitar d = Data(1,9,2019), no print você vai ter o 01/09/2019 e não vai afetar números com dois dígitos. Mas creio que fazer d = Data(01,09,2019) seja realmente impossível, isso porque esse 0 é usado pra outra coisa no python. No python 2, numeros inteiros iniciados com 0 eram compreendidos como estando em sistema numérico octal. Assim, escrever algo como 07, que ficaria idêntico ao formato da data, significava que o 7 digitado está em octal. No python 3 a sintaxe mudou pra 0o#, ou seja, algo como 0o10, por exemplo, está em octal e, se você printar, vai ter o valor em sistema decimal, que é 8.

Era exatamente esta formatação do print a que eu me referia mas não estava encontrando rsrs. Obrigado Daniel! Quanto à parte de definição do tipo vlw pela explicação também.Ainda não conheço muito sobre este tipo octal pois estou começando a programar neste curso. Mas é bom já ir me familiarizando desde já.