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

Desavio Opcional - SyntaxError

Olá, Segue abaixo o meu código:

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

    def formatada(self):
        print('{0:02d}/{1:02d}/{2:04d}'.format(self.dia, self.mes, self.ano))

O meu problema é que se o usuario digitar zero no começo do número como nesse exemplo d = Data(10, 01, 1980), da o seguinte erro: SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers. Vi em alguns artigos para digitar como string colocando aspas simples ou duplas com nesse exemplo d = Data(10, '01', 1980), mas quando vai ser executado a função d.formatada() da esse erro: ValueError: Unknown format code 'd' for object of type 'str', e mesmo de eu modificar o código dirando o 'd' print('{0:02}/{1:02}/{2:04}'.format(self.dia, self.mes, self.ano)) da esse outro erro: ValueError: '=' alignment not allowed in string format specifier.

Gostaria que o usuario digitasse d = Data(10, 01, 1980) e o python aceitasse.

3 respostas
solução!

No próprio erro ja diz, coloca um o depois do 0 pra funcionar, ficando nova = Data(0o1,0o2,2021) que vai rodar direitinho. Agora, você não precisa que o usuário digite o 0 se você vai tratar depois, mas se mesmo assim você quer que o usuario digite usa string e depois converte pra inteiro.

Se fizer isso eu sugiro que faça uma verificação se o usuario colocou algo alem de números na string, você pode usar um regex ou um str().isnumeric(). Depois você pega e converte pra inteiro int(str()).

Lembrando que esse str() é a sua string então vai ser tipo dia.isnumeric() e na hora de passar a data vc vai ter q passar como nova = Data("01","02","2021").

Qualquer duvida me chama aqui, não fiz pra você pra te fazer pensar um pouco em como você quer implementar e fazer você treinar e aprender!

Luigi, valeu pela ajuda, vou tentar aplicar o que você me passou.

Pessoal, boa tarde.

Eu fiz o código assim, mas lógico que dá pra melhorar bem (limitando os números do dia e do mês/ somente números possitivos e assim vai). Mas acho que atende bem o desafio proposto pelo exercicio.

Obrigado ao colega que colocou essa observação, a qual não havia observado.

Grande abraço.

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

dia = input('dia:') mes = input('mes:') ano = input('ano:')

while not dia.isnumeric() or not mes.isnumeric() or not ano.isnumeric(): print('Por fazor digite somente números!') dia = input('dia:') mes = input('mes:') ano = input('ano:')

d = Data(dia, mes, ano) d.formatada()