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

Como alinhar f strings (python 3.6+) no print?

Faça um programa que carregue uma lista com os modelos de cinco carros (exemplo de modelos: FUSCA, GOL, VECTRA etc). Carregue uma outra lista com o consumo desses carros, isto é, quantos quilômetros cada um desses carros faz com um litro de combustível. Calcule e mostre:

a. O modelo do carro mais econômico; b. Quantos litros de combustível cada um dos carros cadastrados consome para percorrer uma distância de 1000 quilômetros e quanto isto custará, considerando um que a gasolina custe R$ 2,25 o litro.

O meu código funciona mas não consigo deixar tudo alinhado com as f strings. Como posso alterar o print() para deixar tudo alinhado?

print("Comparativo de Consumo de Combustível\n")

#LEITURA dados
carros = ["fusca","gol","uno","vectra","peugeout"]
consumos = [7.0,10.0,12.5,9.0,14.5]
print("Relatório Final")

index = list(range(1,len(carros)+1))
for index, carro, consumo in zip(index,carros,consumos):
    print(f"{index} - {carro} - \t\t\t {consumo} - \t\t\t{1000/consumos[index -1]:.1f} litros - \tR${2.25*(1000/consumos[index -1]):.2f}")
consumo_1000km = []
for consumo in consumos:
    consumo_1000km.append((1000/consumo))
menor = min(consumo_1000km )
#print(menor)
carro_menor = carros[consumo_1000km.index(menor )]
print(f"O menor consumo é do {carro_menor}")

A minha saída desalinhada:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como eu gostaria de deixar a saída:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

5 respostas
solução!

Algo como isso?

consumo_temp = "{0:.2f}"
valor_temp = "{0:.2f}"
for index, carro, consumo in zip(index,carros,consumos):
    consumo_temp = consumo_temp.format(1000/consumos[index -1])
    valor_temp = valor_temp.format(2.25*(1000/consumos[index -1]))
    print(f"{index:0} - {carro:10} - {consumo:8} - {consumo_temp:6} litros - R${valor_temp:8}")

Opa!

Thiago Matos, aqui não rodou. Erro:

TypeError: 'int' object is not iterable

Pode mostrar como ficou?

![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

Thiago Matos, foi erro meu aqui. funcionou. De qualquer forma, não entendi a sua modificação. Poderia, por favor explicar?

A formatação tem a mesma lógica da formatação que você fez nos números, nos números você definiu que eles devem ter no máximo duas casas após o ponto :.2d . Aqui fazemos a mesma coisa, porém definindo que cada variável devem ser impressas em X "casas".

Exemplo: print(f"{index} - {carro:10} - {consumo:5} - {consumo_temp:6} litros - R${valor_temp}")

  • Carro = Após o " - " impressão deve conter 10 casas (incluso o nome do carro)
  • Consumo = Após " - " impressão deve conter 5 casas (incluso o valor do consumo)
  • Litragem = Após " - " impressão deve conter 6 casas (incluso valor da litragem)
  • Valor = Após " - " impressão sem limite

**Caso a variável impressa não chegue ao valor estipulado de caracteres definidos na formatação, ele completa com espaços

Coloque o cursor no terminal de saída e conte as casas manualmente para conferir :)