¿Cómo puedo imprimir varias cosas (texto fijo y/o valores variables) en la misma línea?

5 minutos de lectura

avatar de usuario de user1985351
usuario1985351

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 de (nombre) es (puntuación)”

dónde name es una variable en una lista y score es un número entero. Esto es Python 3.3 si eso ayuda en algo.

Avatar de usuario de Blender
Licuadora

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

  1. Pásalo como una tupla:

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

Una tupla con un solo elemento parece ('this',).

Aquí hay algunas otras formas comunes de hacerlo:

  1. Pásalo como 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 el formato de cadena de estilo nuevo:

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

    print("Total score for {0} is {1}".format(name, score))
    
  3. Use 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 los espacios se inserten automáticamente por print En el ejemplo anterior, cambie el sep parámetro:

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

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

    from __future__ import print_function
    
  2. Usa el nuevo f-formato de cadena en Python 3.6:

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

  • por supuesto, siempre existe el antiguo método desaprobado: print("Total score for "+str(name)"+ is "+str(score))

    – Serpientes y Café

    8 de marzo de 2013 a las 4:46


  • @SnakesandCoffee: Simplemente haría print("Total score for", name, "is", score)

    – Licuadora

    8 de marzo de 2013 a las 4:47

  • Mi +1. En estos días prefiero el .format() como más legible que el anterior % (tuple) — a pesar de que he visto pruebas que muestran la % la interpolación es más rápida. Él print('xxx', a, 'yyy', b) también está bien para casos simples. Recomiendo también para aprender .format_map() con 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. Pero las plantillas no se ven tan limpias: 'ssss %(key1)s xxx %(key2)s'.

    – pimienta

    8 de marzo de 2013 a las 13:15

  • FYI, a partir de Python 3.6, obtenemos cuerdas fpor lo que ahora también puedes hacer print(f"Total score for {name} is {score}") sin llamadas a funciones explícitas (siempre y cuando name y score están en el alcance obviamente).

    – ShadowRanger

    7 de diciembre de 2016 a las 1:41


  • @SnakesandCoffee ¿Por qué es print("Total score for "+str(name)"+ is "+str(score)) desaprobado?

    – el hombre de las preguntas

    4 de noviembre de 2020 a las 0:42

Avatar de usuario de Vikas Gupta
Vikas Gupta

Hay muchas maneras 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}')

  • El primer comentario (#Normal string concatenation) es al menos engañoso.

    – Lobo

    19 de mayo de 2021 a las 14:26

Avatar de usuario de Gavriel Cohen
Gabriel Cohen

Usar: .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))

O: f-string formateo desde Pitón 3.6:

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

Puedo usar repr y automáticamente el '' está agregado:

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

# or for advanced: 
print(f'Total score for {name!r} is {score!r}') 

Avatar de usuario de Abhishek
Abhishek

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

En la versión anterior:

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

En Pitón 3.6:

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

servirá.

Es más eficiente y elegante.

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 la puntuación es un En tentonces, deberías convertirlo a calle:

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

Avatar de usuario de Wolf
Lobo

solo sigue esto

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

O

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

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

Avatar de usuario de Peter Mortensen
Pedro Mortensen

Sólo inténtalo:

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

¿Ha sido útil esta solución?