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

Dúvida no desafio opcional

Gente, meu código do desafio opcional ficou assim

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))

Ele no geral funciona, exceto em um caso, por exemplo, se eu digitar algum dado começando com 0, por exemplo:

>>>d2 = Data(27, 04 , 1995)
  File "<input>", line 1
    d2 = Data(27, 04 , 1995)
                   ^
SyntaxError: invalid token

Caso eu tirasse o 0, funcionaria:

>>>d1 = Data(27,4,1995)
>>>d1.formatada()
27/4/1995

Então, apenas como curiosidade, queria saber o que posso fazer para incluir os casos em que algum número comece com o zero?

Obrigado!

4 respostas

Olá, Flávio.

Isso tem a ver com números octais.

Números decimais tem 10 dígitos: de 0 a 9.

Número octais tem 8 dígitos: de 0 a 7.

Até o Python 2, um número começando com 0 definia número octais. Então: - 04 é o número 4 (decimal) em octal. - 07 é o 7 (decimal) em octal. - 08, daria pau, pois não existe o dígito 8 em octal. - 010 seria o número 8 (decimal) em octal!

Com o Python 3, não é possível mais colocar mais 04 ou 07 ou 010. Você precisa colocar uma letra O ou o depois do número 0. Então:

  • 0o4 é 4 (decimal) em octal
  • 0O4 também é 4 (decimal) em octal
  • 0o8 ainda é inválido, porque não existe dígito 8 em octal.
  • 0o10 é 8 (decimal) em octal.

Interessante! No caso então não existe forma de colocar um valor numérico em python 3 começando com zero certo? Nesse caso a única solução seria colocar o 04 entre parênteses? Obrigado!

solução!

Na verdade, o jeito é usar só o 0 na frente no caso de você colocar os números no código.

Na hora de imprimir, você pode formatar o texto, preenchendo com 0 à esquerda:

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

Um detalhe é que, em geral, o usuário vai digitar (ou escolher de outra forma) as datas. Então, o que acaba acontecendo é que você vai ter que transformar um texto (com 0, mas um é um texto ) em um número.

Também daria pra usar um date. Mas é um assunto mais pra frente! :D

Entendi, obrigado!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software