Há muitas maneiras de fazer isso. Para corrigir seu código atual usando %-formatting, você precisa passar uma tupla:
Passe como uma tupla:
print("Total score for %s is %s"%(name, score))
Parece uma tupla com um único elemento ('this',).
Aqui estão algumas outras maneiras comuns de fazer isso:
Passe como um dicionário:
print("Total score for %(n)s is %(s)s"%{'n': name,'s': score})
Há também formatação de novo estilo, que pode ser um pouco mais fácil de ler:
Use formatação de sequência de novo estilo:
print("Total score for {} is {}".format(name, score))
Use formatação de seqüência de caracteres de novo estilo com números (útil para reordenar ou imprimir o mesmo várias vezes):
print("Total score for {0} is {1}".format(name, score))
Use formatação de sequência de novo estilo com nomes explícitos:
print("Total score for {n} is {s}".format(n=name, s=score))
Concatenar cadeias de caracteres:
print("Total score for "+ str(name)+" is "+ str(score))
Os dois mais claros, na minha opinião:
Apenas passe os valores como parâmetros:
print("Total score for", name,"is", score)
Se você não deseja inserir espaços automaticamente printno exemplo acima, altere o sepparâmetro:
print("Total score for ", name," is ", score, sep='')
Se você estiver usando o Python 2, não poderá usar os dois últimos porque printnão é uma função no Python 2. No entanto, você pode importar esse comportamento de __future__:
é claro, há sempre o método reprovado de velhice:print("Total score for "+str(name)"+ is "+str(score))
Snakes and Coffee
5
@SnakesandCoffee: eu tinha acabado de fazerprint("Total score for", name, "is", score)
Blender
4
Meu +1. Hoje em dia, prefiro o .format()mais legível que o mais antigo % (tuple)- apesar de ter visto testes que mostram que a %interpolação é mais rápida. Também print('xxx', a, 'yyy', b)é bom para casos simples. Eu recomendo também aprender .format_map()com o dicionário como argumento e com 'ssss {key1} xxx {key2}'- nice para gerar textos a partir de modelos. Há também os mais velhos string_template % dictionary. Mas os modelos não parecem tão limpo: 'ssss %(key1)s xxx %(key2)s'.
pepr 8/03/13
6
Para sua informação, a partir do Python 3.6, obtemos strings-f , então agora você também pode fazer isso print(f"Total score for {name} is {score}")sem chamadas explícitas de função (desde que namee scoreobviamente esteja no escopo).
ShadowRanger
57
Existem várias maneiras de imprimir isso.
Vamos dar uma olhada com outro exemplo.
a =10
b =20
c = a + b
#Normal string concatenationprint("sum of", a ,"and", b ,"is", c)#convert variable into strprint("sum of "+ str(a)+" and "+ str(b)+" is "+ str(c))# if you want to print in tuple wayprint("Sum of %s and %s is %s: "%(a,b,c))#New style string formattingprint("sum of {} and {} is {}".format(a,b,c))#in case you want to use repr()print("sum of "+ repr(a)+" and "+ repr(b)+" is "+ repr(c))
EDIT :#New f-string formatting from Python 3.6:print(f'Sum of {a} and {b} is {c}')
print("sum of {0} and {1} is {2}".format(a,b,c)) é um exagero, você pode omitir, a print("sum of {} and {} is {}".format(a,b,c)) menos que queira alterar a ordem.
Jean-François Fabre
39
Uso .format():
print("Total score for {0} is {1}".format(name, score))
Ou:
//Recommended, more readable code
print("Total score for {n} is {s}".format(n=name, s=score))
print("Total score for "+str(name)"+ is "+str(score))
print("Total score for", name, "is", score)
.format()
mais legível que o mais antigo% (tuple)
- apesar de ter visto testes que mostram que a%
interpolação é mais rápida. Tambémprint('xxx', a, 'yyy', b)
é bom para casos simples. Eu recomendo também aprender.format_map()
com o dicionário como argumento e com'ssss {key1} xxx {key2}'
- nice para gerar textos a partir de modelos. Há também os mais velhosstring_template % dictionary
. Mas os modelos não parecem tão limpo:'ssss %(key1)s xxx %(key2)s'
.print(f"Total score for {name} is {score}")
sem chamadas explícitas de função (desde quename
escore
obviamente esteja no escopo).Existem várias maneiras de imprimir isso.
Vamos dar uma olhada com outro exemplo.
fonte
print("sum of {0} and {1} is {2}".format(a,b,c))
é um exagero, você pode omitir, aprint("sum of {} and {} is {}".format(a,b,c))
menos que queira alterar a ordem.Uso
.format()
:Ou:
Ou:
Ou:
fonte
No Python 3.6,
f-string
é muito mais limpo.Na versão anterior:
No Python 3.6:
vai fazer.
É mais eficiente e elegante.
fonte
Para simplificar, eu pessoalmente gosto da concatenação de strings:
Funciona com o Python 2.7 e 3.X.
NOTA: Se a pontuação é um int , você deve convertê-lo em str :
fonte
Apenas tente:
fonte
Basta seguir isso
OU
E esqueça todos os outros, caso contrário, o cérebro não será capaz de mapear todos os formatos.
fonte
%s
pode ser substituído por%d
ou%f
fonte
Use
f-string
:Ou
Use
.format
:fonte
Se
score
é um número, entãoSe score for uma string, então
Se score é um número, então é
%d
, se é uma string, então é%s
, se score é um float, então é%f
fonte
Isto é o que eu faço:
Lembre-se de colocar um espaço depois,
for
antes e depoisis
.fonte