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

IF sendo executado sem sentido

Olá,

quanto ao desafio proposto não tive problemas, consegui resolver tranquilamente, porém eu quis incrementar mais algumas coisas para trabalhar com números de apenas um digito (no caso da data e do mês). Segue o código:

class Data:

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

        print("teste")
        self.dia = dia
        self.mes = mes
        self.ano = ano

    def formatada(self):

        if self.dia and self.mes < 10:
            print("0{}/0{}/{}".format(self.dia, self.mes, self.ano))
        elif self.mes < 10:
            print("{}/0{}/{}".format(self.dia, self.mes, self.ano))
        elif self.dia < 10:
            print("0{}/{}/{}".format(self.dia, self.mes, self.ano))
        else:
            print("{}/{}/{}".format(self.dia,self.mes,self.ano))

Tudo funciona normal, exceto pela parte em que o primeiro IF é executado sem motivo. Quando escrevo na linha de comando

d2 = Data(10,9,2007)

e depois chamo a função format em d2 o primeiro if é executado, mas ele deveria fazer isso apenas quando os dois valores forem menor que 10. Porque isso acontece?

obs: isso só acontece quando o mes é menor que 10, quando o dia é menor que 10 tudo funciona normalmente

3 respostas
solução!

Faalaaa Vagner, tudo bem ?

Isto acontece porque mesmo que sejam comparações iguais no sentido de valores(no caso valores menores que 10 de dia e mês), você tem que deixar isto explícito. Ou seja:

 if self.dia < 10 and self.mes < 10:

O Python irá tratar cada operação por vez. Primeiro ele analisa o dia e depois analisa o mês. Se ambas forem verdadeiras, ele entrará no if.

Sei que pode ficar confuso, porque é natural a gente falar: "se o dia e o mês for menor que 10". Mas no campo da programação, temos que esmiuçar e dizer: "se o dia for menor que 10 e o mês for menor que 10".

Da forma como você colocou, ele só compara se o mês é menor do que 10 e se self.dia possui algum valor. Tudo bem ?

Qualquer dúvida estou a disposição. Espero ter ajudado. Abraços e bons estudos!

Puts, verdade, tinha esquecido disso. Vlw Nádia.

Que tal usar assim:

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

Link aqui: https://mkaz.blog/code/python-string-format-cookbook/