⬅ Voltar ao Dashboard Capítulo 7 — Strings

📏 Formatação de Strings e Jogo da Forca

Seção 7.9–7.10 — Método format e projeto prático

🧮 7.9 Formatação de Strings

O método format() permite criar strings com valores inseridos dinamicamente. Os campos entre chaves {} são substituídos pelos argumentos fornecidos, identificados por índice:

Listagem 7.27 — Uso básico do format>>> "{0} {1}".format("Alô", "Mundo") 'Alô Mundo' >>> "{0} x {1} R${2}".format(5, "maçã", "1.20") '5 x maçã R$1.20'

O mesmo índice pode ser reutilizado várias vezes na mesma string:

Listagem 7.28 — Reutilização de índices>>> "{0} {1} {0}".format("-", "x") '- x -'

Os índices também podem ser usados fora de ordem:

Listagem 7.29 — Índices fora de ordem>>> "{1} {0}".format("primeiro", "segundo") 'segundo primeiro'

Largura e Alinhamento

Após o índice, um dois pontos (:) indica especificações de formato. Um número define a largura mínima do campo:

Listagem 7.30 — Largura mínima>>> "{0:10} {1}".format("123", "456") '123 456' >>> "{0:10}X".format("123") '123 X' >>> "{0:10}X".format("12345678901345") '12345678901345X' # não é truncado

O alinhamento é controlado por < (esquerda), > (direita) ou ^ (centro):

Listagem 7.31 — Alinhamento esquerda e direita>>> "{0:<10}X".format("123") '123 X' >>> "{0:>10}X".format("123") ' 123X'
Listagem 7.32 — Centralização>>> "{0:^10}X".format("123") ' 123 X'

Antes do alinhamento, um caractere de preenchimento (fill) substitui os espaços em branco:

Listagem 7.33 — Caractere de preenchimento>>> "{0:.<10}X".format("123") '123.......X' >>> "{0:!>10}X".format("123") '!!!!!!!123X' >>> "{0:*^10}X".format("123") '***123****X'

Acesso a Listas e Dicionários

Listagem 7.34 — Acesso a elementos de lista>>> "{0[1]} {0[2]}".format(["zero", "456", "789"]) '456 789'
Listagem 7.35 — Acesso a campos de dicionário>>> "{0[nome]} {0[telefone]}".format({"telefone": 572, "nome": "Maria"}) 'Maria 572'

7.9.1 Formatação de Números

Para números, podemos usar zeros à esquerda, separador de milhar, casas decimais e sinal:

Listagem 7.36 — Zeros à esquerda>>> "{0:05}".format(5) '00005'
Listagem 7.37 — Preenchimento com asterisco (direita)>>> "{0:*>7}".format(32) '*****32'
Listagem 7.38 — Alinhamento com preenchimento para inteiros>>> "{0:*^10}".format(123) '***123****' >>> "{0:*<10}".format(123) '123*******' >>> "{0:*>10}".format(123) '*******123'
Listagem 7.39 — Separador de milhar e casas decimais>>> "{0:10,}".format(7532) ' 7,532' >>> "{0:10.5f}".format(1500.31) '1500.31000' >>> "{0:10,.5f}".format(1500.31) '1,500.31000'
Listagem 7.40 — Sinal de positivo e negativo>>> "{0:+10} {1:+10}".format(5, -6) ' +5 -6' >>> "{0:-10} {1:-10}".format(5, -6) ' 5 -6' >>> "{0: 10} {1: 10}".format(5, -6) ' 5 -6'

Formatos de Números Inteiros

FormatoDescriçãoExemplo
bBinário{:b} de 5678 → 1011000101110
cCaractere Unicode{:c} de 65 → A
dDecimal (padrão){:d} de 5678 → 5678
nDecimal com locale{:n} de 5678 → 5.678 (pt_BR)
oOctal{:o} de 5678 → 13056
xHexadecimal minúsculo{:x} de 5678 → 162e
XHexadecimal maiúsculo{:X} de 5678 → 162E
Listagem 7.41 — Formatos de inteiros>>> "{:b}".format(5678) '1011000101110' >>> "{:c}".format(65) 'A' >>> "{:o}".format(5678) '13056' >>> "{:x}".format(5678) '162e' >>> "{:X}".format(5678) '162E'
Listagem 7.42 — Formato n com locale pt_BRimport locale locale.setlocale(locale.LC_ALL, "pt_BR") >>> "{:n}".format(5678) '5.678'

Formatos de Números Decimais

FormatoDescrição
eNotação científica (minúsculo)
ENotação científica (maiúsculo)
fPonto flutuante fixo
gGeral: usa f ou e conforme magnitude
GGeral: usa f ou E conforme magnitude
nPonto flutuante com locale
%Percentagem (multiplica por 100)
Listagem 7.43 — Formato f e n para decimais>>> "{:f}".format(1579.543) '1579.543000' >>> "{:n}".format(1579.543) # sem locale '1579.54' # com locale pt_BR: >>> "{:n}".format(1579.543) '1.579,54'
Listagem 7.44 — Notação científica e percentagem>>> "{:8e}".format(1579.543) '1.579543e+03' >>> "{:8E}".format(1579.543) '1.579543E+03' >>> "{:8g}".format(1579.543) '1579.54' >>> "{:5.2%}".format(0.75) '75.00%'

🫣 7.10 Projeto: Jogo da Forca

Vamos aplicar os conceitos de strings em um jogo da forca completo. O jogo pede uma palavra secreta, mostra o progresso do jogador (pontos no lugar das letras ainda não descobertas) e desenha o boneco conforme os erros aumentam.

Conceitos-chave utilizados:

Listagem 7.45 — Jogo da Forcapalavra = input("Digite a palavra secreta:").lower().strip() for x in range(100): print() digitadas = [] acertos = [] erros = 0 while True: senha = "" for letra in palavra: senha += letra if letra in acertos else "." print(senha) if senha == palavra: print("Você acertou!") break tentativa = input("\nDigite uma letra:").lower().strip() if tentativa in digitadas: print("Você já tentou esta letra!") continue else: digitadas += tentativa if tentativa in palavra: acertos += tentativa else: erros += 1 print("Você errou!") print("X==:==") print("X :") print("X O " if erros >= 1 else "X") linha2 = "" if erros == 2: linha2 = " | " elif erros == 3: linha2 = " \| " elif erros >= 4: linha2 = " \|/ " print("X%s" % linha2) print("X\============") if erros == 6: print("Enforcado!") break

Notas sobre o código: ① Converte a palavra para minúsculas e remove espaços nas bordas. ② Imprime 100 linhas em branco para “limpar” a tela (a palavra não deve ser vista pelo jogador). ③ Expressão condicional: mostra a letra se ela está nos acertos, caso contrário mostra ponto. ④ continue pula diretamente para o começo do próximo laço, sem executar o restante do bloco.

A instrução continue

A instrução continue interrompe a iteração atual de um laço e vai imediatamente para a próxima. No jogo da forca, quando o jogador tenta uma letra que já foi digitada, continue evita que o programa registre novamente essa tentativa e redesenhe o boneco desnecessariamente.

Exercício 7.7

Modifique o programa da Listagem 7.45 de forma a escrever a palavra secreta caso o jogador perca (quando erros == 6).

Exercício 7.8

Modifique o jogo da forca para utilizar uma lista de palavras. No início, pergunte um número ao usuário e calcule o índice da palavra pela fórmula:

índice = (número * 776) % len(lista_de_palavras)

Exercício 7.9

Modifique o programa para utilizar listas de strings para desenhar o boneco da forca, em vez de imprimir cada linha individualmente com if/elif. Dica: crie uma lista onde cada elemento é a linha correspondente ao número de erros.

Exercício 7.10

Escreva um jogo da velha para dois jogadores. O tabuleiro deve ser representado como uma lista (ou lista de listas) e exibido após cada jogada. O programa deve detectar quando um jogador vence ou quando há empate.