Pular para o conteúdo
Editor

Formatação de strings em Python: f-strings, format() e operador %

Iniciante20 min5 exercícios75 XP

Este tutorial foi traduzido do original em inglês.Read in EnglishLeer en españolЧитать на русскомอ่านภาษาไทยAvisar sobre um erro de tradução

0/5 exercícios

Imagine que você está montando o recibo de uma cafeteria. Você precisa juntar o nome de um produto, um preço e uma quantidade em uma única linha bem organizada. Você poderia colar as strings com +, mas isso vira bagunça rapidinho.

Formatar strings é como preencher um modelo com lacunas. Você escreve a estrutura da frase uma vez e depois encaixa os valores onde eles devem ficar. É mais limpo, mais rápido e muito mais fácil de ler.

O Python oferece três formas de formatar strings: as f-strings, o método .format() e o operador %. Neste tutorial, você vai aprender as três e descobrir quando usar cada uma.

Por que formatar strings é melhor do que concatenar

Quando os iniciantes começam a combinar variáveis com texto, eles recorrem ao operador +. Funciona, mas obriga você a converter números em strings manualmente e a espalhar sinais de + por toda parte.

Concatenação (bagunçado)
name = "Latte"
price = 4.5
qty = 2
print("Item: " + name + " | Price: $" + str(price) + " | Qty: " + str(qty))
f-string (limpo)
name = "Latte"
price = 4.5
qty = 2
print(f"Item: {name} | Price: ${price} | Qty: {qty}")

As duas linhas produzem a mesma saída. Mas a versão com f-string é mais curta, mais fácil de ler e você nunca precisa chamar str() por conta própria. O Python cuida da conversão automaticamente.

Como usar f-strings em Python

Uma f-string (literal de string formatada) começa com a letra f antes das aspas de abertura. Dentro da string, você coloca variáveis ou expressões entre chaves {}.

O Python avalia o que estiver dentro das chaves e insere o resultado na string. As f-strings surgiram no Python 3.6 e hoje são a forma recomendada de formatar strings.

Uso básico de f-strings
name = "Alice"
age = 30
city = "Seattle"
print(f"My name is {name}.")
print(f"I am {age} years old.")
print(f"I live in {city}.")
Saída
My name is Alice.
I am 30 years old.
I live in Seattle.

O f antes das aspas é o que torna isso especial. Sem ele, o Python exibiria o texto literal {name} em vez do valor da variável.

O que acontece sem o prefixo f
# Without the f prefix - curly braces are printed literally
name = "Alice"
print("Hello, {name}!") # No f prefix
print(f"Hello, {name}!") # With f prefix
Saída
Hello, {name}!
Hello, Alice!

Que expressões você pode colocar dentro de f-strings?

As f-strings não se limitam a variáveis. Você pode colocar qualquer expressão Python válida dentro das chaves: contas, chamadas de função, chamadas de método e até condicionais.

Expressões dentro de f-strings
# Math expressions
width = 10
height = 5
print(f"Area: {width * height} square units")
# Function and method calls
name = "python"
print(f"Length: {len(name)}")
print(f"Uppercase: {name.upper()}")
# Conditional expressions
score = 85
print(f"Result: {'Pass' if score >= 60 else 'Fail'}")
Saída
Area: 50 square units
Length: 6
Uppercase: PYTHON
Result: Pass

Pense em cada {} como uma pequena calculadora. O Python avalia a expressão, converte o resultado em string e o encaixa no lugar.


Como formatar números em f-strings no Python

É aqui que as f-strings realmente brilham. Depois do nome da variável, você coloca dois-pontos : seguidos de um especificador de formato, que controla a aparência do número.

Casas decimais com .Nf

Use :.Nf para mostrar exatamente N casas decimais. O f significa notação de "ponto fixo" (fixed-point). Isso é essencial para exibir preços, medidas e notas.

Controlando as casas decimais
price = 4.5
pi = 3.14159265
print(f"Price: ${price:.2f}") # 2 decimal places
print(f"Pi: {pi:.4f}") # 4 decimal places
print(f"Rounded: {pi:.1f}") # 1 decimal place
Saída
Price: $4.50
Pi: 3.1416
Rounded: 3.1

Separadores de milhar para números grandes

Use :, para separar os milhares de números grandes com vírgulas (o padrão americano). Isso deixa números como 1000000 muito mais fáceis de ler de relance.

Adicionando separadores de milhar
population = 8900000
salary = 75000.50
print(f"Population: {population:,}")
print(f"Salary: ${salary:,.2f}")
Saída
Population: 8,900,000
Salary: $75,000.50

Porcentagens com %

Use :.N% para exibir um número decimal como porcentagem. O Python multiplica o valor por 100 e adiciona o sinal % automaticamente.

Formatando porcentagens
completion = 0.756
tax_rate = 0.0825
print(f"Progress: {completion:.1%}") # 75.6%
print(f"Tax rate: {tax_rate:.2%}") # 8.25%
Saída
Progress: 75.6%
Tax rate: 8.25%

Preenchimento e alinhamento

Você pode definir uma largura mínima para um valor e controlar se ele fica alinhado à esquerda, à direita ou ao centro. Isso é perfeito para montar saídas limpas e alinhadas, como tabelas.

Preenchimento e alinhamento
# Width and alignment
print(f"|{'Left':<15}|") # Left-aligned, 15 chars wide
print(f"|{'Center':^15}|") # Center-aligned
print(f"|{'Right':>15}|") # Right-aligned
# Numbers default to right-aligned
print(f"|{42:>10}|") # Right-aligned number
print(f"|{42:010}|") # Zero-padded to 10 digits
Saída
|Left           |
|    Center     |
|          Right|
|        42|
|0000000042|

Como usar o método .format()

Antes de as f-strings existirem, quem programava em Python usava o método .format(). Ele funciona assim: você coloca marcadores {} vazios na string e depois chama .format() com os valores que vão preenchê-los.

Usando .format()
name = "Bob"
age = 25
# Positional arguments
print("Hello, {}! You are {} years old.".format(name, age))
# Numbered positions
print("Hello, {0}! You are {1} years old. Nice to meet you, {0}!".format(name, age))
# Named arguments
print("Hello, {n}! You are {a} years old.".format(n=name, a=age))
Saída
Hello, Bob! You are 25 years old.
Hello, Bob! You are 25 years old. Nice to meet you, Bob!
Hello, Bob! You are 25 years old.

O método .format() aceita os mesmos especificadores de formato das f-strings. Tudo o que vem depois dos dois-pontos funciona da mesma forma.

Formatação de números com .format()
price = 19.99
print("Price: ${:.2f}".format(price))
print("Big number: {:,}".format(1000000))
Saída
Price: $19.99
Big number: 1,000,000

As posições numeradas são úteis quando você precisa repetir um valor várias vezes na mesma string. Você pode usar o mesmo índice quantas vezes quiser.


O operador % para formatar strings (estilo antigo)

O operador % é a forma mais antiga de formatar strings em Python. Ele vem da função printf da linguagem C. Você vai encontrá-lo em códigos mais antigos e deve saber reconhecê-lo, mas não precisa usá-lo em código novo.

Formatação com % no estilo antigo
name = "Charlie"
age = 35
price = 9.99
print("Hello, %s! You are %d years old." % (name, age))
print("Price: $%.2f" % price)
Saída
Hello, Charlie! You are 35 years old.
Price: $9.99

O %s significa "insira uma string aqui", %d significa "insira um inteiro" e %f significa "insira um float". Os valores vêm depois do operador %, no final.


f-strings, format() ou operador %: qual usar?

As três abordagens produzem o mesmo resultado. A diferença está na legibilidade e na praticidade. Veja a mesma saída escrita de três jeitos:

Três jeitos de formatar a mesma string
item = "Coffee"
price = 4.50
# f-string (Python 3.6+) - recommended
print(f"{item}: ${price:.2f}")
# .format() method (Python 2.6+)
print("{}: ${:.2f}".format(item, price))
# % operator (oldest style)
print("%s: $%.2f" % (item, price))
Saída
Coffee: $4.50
Coffee: $4.50
Coffee: $4.50

f-strings de várias linhas e padrões do dia a dia

Para strings formatadas mais longas, você pode usar aspas triplas com o prefixo f. Isso é útil para mensagens de várias linhas, relatórios e modelos de e-mail.

f-string de várias linhas
name = "Alice"
order_id = 4821
total = 37.50
message = f"""Hi {name},
Your order #{order_id} has been confirmed.
Total: ${total:.2f}
Thank you for shopping with us!"""
print(message)
Saída
Hi Alice,

Your order #4821 has been confirmed.
Total: $37.50

Thank you for shopping with us!

Aqui vai um exemplo prático: montar uma tabela formatada. Os especificadores de alinhamento deixam cada coluna bem alinhada.

Montando uma tabela formatada
# Simple formatted table
products = [
("Laptop", 999.99, 1),
("Mouse", 29.50, 3),
("Keyboard", 74.00, 2),
]
print(f"{'Product':<12} {'Price':>8} {'Qty':>5} {'Total':>10}")
print("-" * 37)
for name, price, qty in products:
total = price * qty
print(f"{name:<12} {price:>8.2f} {qty:>5} {total:>10.2f}")
Saída
Product         Price   Qty      Total
-------------------------------------
Laptop         999.99     1     999.99
Mouse           29.50     3      88.50
Keyboard        74.00     2     148.00
O atalho = para depuração
# Debug trick (Python 3.8+)
x = 42
y = 17
print(f"{x=}")
print(f"{y=}")
print(f"{x + y=}")
Saída
x=42
y=17
x + y=59

Exercícios práticos

Formate uma linha de recibo
Escreva o código

Crie a variável item com o valor "Cappuccino" e a variável price com o valor 4.5. Depois, use uma f-string para exibir uma linha de recibo exatamente neste formato:

Cappuccino .......... $4.50

O preço deve aparecer com exatamente 2 casas decimais. Use a string " .......... $" entre o nome e o preço.

# Create the variables and print the formatted receipt line
Formate um número grande com vírgulas
Escreva o código

Crie a variável population com o valor 7900000000. Exiba-a usando uma f-string com separadores de milhar, para que a saída seja:

World population: 7,900,000,000
# Format the population with commas
Crie uma linha de tabela formatada
Escreva o código

Crie três variáveis: name = "Alice", score = 95.8 e grade = "A+". Exiba uma linha de tabela formatada em que:

  • O nome fica alinhado à esquerda em um campo de 10 caracteres de largura
  • A nota fica alinhada à direita em um campo de 8 caracteres de largura, com 1 casa decimal
  • O conceito fica centralizado em um campo de 6 caracteres de largura
  • Saída esperada (os caracteres | fazem parte da saída):

    | Alice      |     95.8 |   A+  |
    # Create the variables and print the formatted table row
    Corrija a f-string quebrada
    Corrija o erro

    O código abaixo deveria exibir "Hello, Sam! You scored 92.5%.", mas exibe as chaves em vez dos valores. Encontre e corrija o bug.

    name = "Sam"
    score = 0.925
    print("Hello, {name}! You scored {score:.1%}.")
    Gere uma saudação de e-mail personalizada
    Escreva o código

    Crie estas variáveis:

  • first_name = "Jordan"
  • items = 3
  • total = 89.95
  • Depois, use uma f-string de várias linhas (aspas triplas) para exibir exatamente esta mensagem:

    Hi Jordan,
    
    Thank you for your purchase of 3 items.
    Your total is $89.95.
    
    Have a great day!

    Garanta que o total apareça com exatamente 2 casas decimais.

    # Create the variables and print the email greeting

    Tutoriais relacionados

    Este tutorial foi útil?