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

Programação OO

Bom dia. Ainda tratando da classe Conta tenho uma dúvida:

  1. Ao tentar formatar a impressão do Saldo do titular da conta ocorreu o seguinte problema:
código 1:
    def extrato(self):
        print("Saldo de R$ {0:12.2f} do sr. {}".format(self.saldo, self.titular))

Resposta da execução:

from Conta import Conta
conta = Conta(1234, "Fulano de Tal", 155.6, 2500)
Construindo objeto ... <Conta.Conta object at 0x057D9FF0>
conta.extrato()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Users\c134550\Documents\UnCaixa\Python - Alura\oo\Conta.py", line 10, in extrato
    print("Saldo de R$ {0:12.2f} do sr. {}".format(self.saldo, self.titular))
ValueError: cannot switch from manual field specification to automatic field numbering

Não consegui entender o motivo do erro.

código 2:

    def extrato(self):
        print("O Saldo do sr. {} é de R$".format(self.titular), "{0:12.2f}.".format(self.saldo))

Resultado da execução:
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 07:18:10) [MSC v.1900 32 bit (Intel)] on win32
from Conta import Conta
conta = Conta(1234, "Fulano de Tal", 155.6, 2500)
Construindo objeto ... <Conta.Conta object at 0x0585BE70>
conta.extrato()
O Saldo do sr. Fulano de Tal é de R$       155.60.

Neste caso não houve erro e o valor foi mostrado com formatação normal. Não consegui entender o motivo...

Observação: Vejam que utilizei as properties self.saldo e self.titular, ao invés de utilizar a definição dos atributos da classe self.saldo e self.saldo.

Há algum impedimento para utilizar desta forma?

1 resposta
solução!

Otavio,

O problema esta ocorrendo pois esta sendo passado parâmetro informando que deve ser utilizado a posição 0 (zero) no primeiro conjunto de chaves, e no segundo conjunto de chaves nao esta sendo utilizado, veja exemplo abaixo:

Não utiliza parâmetro indicando qual posição do format utilizar.

def extrato(titular, saldo):
        print("Saldo de R {:11.2f} do sr. {}".format(saldo, titular))

Indica qual posição do format utilizar.

def extrato(titular, saldo):
        print("Saldo de R {0:11.2f} do sr. {1}".format(saldo, titular))

https://stackoverflow.com/questions/26702917/error-when-printing-string-and-float?rq=1

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