Imprimir múltiples argumentos en Python

309

Esto es solo un fragmento de mi código:

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

Pero quiero que se imprima:

"La puntuación total para (nombre) es (puntuación)"

donde namees una variable en una lista y scorees un número entero. Esto es Python 3.3 si eso ayuda en absoluto.

usuario1985351
fuente

Respuestas:

559

Hay muchas maneras de hacer esto. Para arreglar su código actual usando %-formatting, necesita pasar una tupla:

  1. Pásalo como una tupla:

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

Parece una tupla con un solo elemento ('this',).

Aquí hay otras formas comunes de hacerlo:

  1. Pásalo como un diccionario:

    print("Total score for %(n)s is %(s)s" % {'n': name, 's': score})

También hay un formato de cadena de estilo nuevo, que podría ser un poco más fácil de leer:

  1. Use un formato de cadena de estilo nuevo:

    print("Total score for {} is {}".format(name, score))
  2. Utilice un formato de cadena de estilo nuevo con números (útil para reordenar o imprimir el mismo varias veces):

    print("Total score for {0} is {1}".format(name, score))
  3. Utilice un formato de cadena de estilo nuevo con nombres explícitos:

    print("Total score for {n} is {s}".format(n=name, s=score))
  4. Concatenar cadenas:

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

Los dos más claros, en mi opinión:

  1. Simplemente pase los valores como parámetros:

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

    Si no desea que se inserten espacios automáticamente printen el ejemplo anterior, cambie el sepparámetro:

    print("Total score for ", name, " is ", score, sep='')

    Si está usando Python 2, no podrá usar los dos últimos porque printno es una función en Python 2. Sin embargo, puede importar este comportamiento desde __future__:

    from __future__ import print_function
  2. Utilice el nuevo fformato de cadena en Python 3.6:

    print(f'Total score for {name} is {score}')
Licuadora
fuente
77
por supuesto, siempre existe el antiguo método desaprobado:print("Total score for "+str(name)"+ is "+str(score))
Snakes and Coffee
55
@SnakesandCoffee: lo haríaprint("Total score for", name, "is", score)
Blender
44
Mi +1. En estos días prefiero .format()que sea más legible que el anterior % (tuple), a pesar de que he visto pruebas que muestran que la %interpolación es más rápida. El print('xxx', a, 'yyy', b)también está bien para casos simples. Recomiendo también aprender .format_map()con el diccionario como argumento, y con 'ssss {key1} xxx {key2}'- agradable para generar textos a partir de plantillas. También está el mayor string_template % dictionary. Sin embargo, las plantillas no se ven tan limpio: 'ssss %(key1)s xxx %(key2)s'.
pepr
66
Para su información, a partir de Python 3.6, obtenemos cadenas f , por lo que ahora también puede hacerlo print(f"Total score for {name} is {score}")sin llamadas a funciones explícitas (siempre namey cuando scoreestén dentro del alcance, obviamente).
ShadowRanger
57

Hay muchas formas de imprimir eso.

Echemos un vistazo con otro ejemplo.

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
fuente
3
print("sum of {0} and {1} is {2}".format(a,b,c)) es excesivo, puede omitirlo a print("sum of {} and {} is {}".format(a,b,c)) menos que desee cambiar el orden.
Jean-François Fabre
39

Uso .format():

print("Total score for {0} is {1}".format(name, score))

O:

// Recommended, more readable code

print("Total score for {n} is {s}".format(n=name, s=score))

O:

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

O:

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

En Python 3.6, f-stringes mucho más limpio.

En versión anterior:

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

En Python 3.6:

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

lo haré

Es más eficiente y elegante.

Abhishek
fuente
15

Manteniéndolo simple, personalmente me gusta la concatenación de cadenas:

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

Funciona con Python 2.7 y 3.X.

NOTA: Si el puntaje es un int , entonces, debe convertirlo en str :

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

Sólo inténtalo:

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

Solo sigue esto

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

O

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

Y olvídate de todos los demás, de lo contrario el cerebro no podrá mapear todos los formatos.

El exorcista
fuente
6
print("Total score for %s is %s  " % (name, score))

%spuede ser reemplazado por %do%f

usuario6014455
fuente
6

Uso f-string:

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

O

Uso .format:

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

Si scorees un número, entonces

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

Si la puntuación es una cadena, entonces

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

Si el puntaje es un número, entonces es %d, si es una cadena, entonces es %s, si el puntaje es flotante, entonces es%f

Supercolbat
fuente
3

Esto es lo que hago:

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

Recuerde poner un espacio después fory antes y después is.

Peter Mortensen
fuente