Imprimir vários argumentos em Python

309

Este é apenas um trecho do meu código:

print("Total score for %s is %s  ", name, score)

Mas quero que imprima:

"A pontuação total para (nome) é (pontuação)"

onde nameé uma variável em uma lista e scoreé um número inteiro. Este é o Python 3.3, se isso ajuda em tudo.

user1985351
fonte

Respostas:

559

Há muitas maneiras de fazer isso. Para corrigir seu código atual usando %-formatting, você precisa passar uma tupla:

  1. 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:

  1. 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:

  1. Use formatação de sequência de novo estilo:

    print("Total score for {} is {}".format(name, score))
  2. 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))
  3. 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))
  4. Concatenar cadeias de caracteres:

    print("Total score for " + str(name) + " is " + str(score))

Os dois mais claros, na minha opinião:

  1. 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__:

    from __future__ import print_function
  2. Use a nova fformatação-string no Python 3.6:

    print(f'Total score for {name} is {score}')
Liquidificador
fonte
7
é 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 concatenation
print("sum of", a , "and" , b , "is" , c) 

#convert variable into str
print("sum of " + str(a) + " and " + str(b) + " is " + str(c)) 

# if you want to print in tuple way
print("Sum of %s and %s is %s: " %(a,b,c))  

#New style string formatting
print("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}')
Vikas Gupta
fonte
3
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))

Ou:

print("Total score for" + name + " is " + score)

Ou:

`print("Total score for %s is %d" % (name, score))`
Gavriel Cohen
fonte
21

No Python 3.6, f-stringé muito mais limpo.

Na versão anterior:

print("Total score for %s is %s. " % (name, score))

No Python 3.6:

print(f'Total score for {name} is {score}.')

vai fazer.

É mais eficiente e elegante.

Abhishek
fonte
15

Para simplificar, eu pessoalmente gosto da concatenação de strings:

print("Total score for " + name + " is " + score)

Funciona com o Python 2.7 e 3.X.

NOTA: Se a pontuação é um int , você deve convertê-lo em str :

print("Total score for " + name + " is " + str(score))
Paolo Rovelli
fonte
12

Apenas tente:

print("Total score for", name, "is", score)
sarora
fonte
11

Basta seguir isso

idiot_type = "the biggest idiot"
year = 22
print("I have been {} for {} years ".format(idiot_type, years))

OU

idiot_type = "the biggest idiot"
year = 22
print("I have been %s for %s years."% (idiot_type, year))

E esqueça todos os outros, caso contrário, o cérebro não será capaz de mapear todos os formatos.

O Exorcista
fonte
6
print("Total score for %s is %s  " % (name, score))

%spode ser substituído por %dou%f

user6014455
fonte
6

Use f-string:

print(f'Total score for {name} is {score}')

Ou

Use .format:

print("Total score for {} is {}".format(name, score))
iNet
fonte
5

Se scoreé um número, então

print("Total score for %s is %d" % (name, score))

Se score for uma string, então

print("Total score for %s is %s" % (name, score))

Se score é um número, então é %d, se é uma string, então é %s, se score é um float, então é%f

Supercolbat
fonte
3

Isto é o que eu faço:

print("Total score for " + name + " is " + score)

Lembre-se de colocar um espaço depois, forantes e depois is.

Peter Mortensen
fonte