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

Resuelto user1985351 asked hace 11 años • 0 respuestas

Tengo un código como:

score = 100
name = 'Alice'
print('Total score for %s is %s', name, score)

Quiero que se imprima Total score for Alice is 100, pero en lugar de eso aparece Total score for %s is %s Alice 100. ¿Cómo puedo hacer que todo se imprima en el orden correcto y con el formato correcto?


Ver también: ¿Cómo puedo imprimir varias cosas en la misma línea, una a la vez? ; ¿Cómo pongo el valor de una variable dentro de una cadena (lo interpola en la cadena)?

user1985351 avatar Mar 08 '13 10:03 user1985351
Aceptado

Hay muchas maneras de hacer esto. Para corregir su código actual usando %el formato, debe 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 nuevo estilo, que podría ser un poco más fácil de leer:

  1. Utilice formato de cadena de nuevo estilo:

    print("Total score for {} is {}".format(name, score))
    
  2. Utilice un 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. Utilice formato de cadena de nuevo estilo 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 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 -string en Python 3.6:

    print(f'Total score for {name} is {score}')
    
Blender avatar Mar 08 '2013 03:03 Blender

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}')
Vikas Gupta avatar Aug 11 '2016 13:08 Vikas Gupta

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-stringformateando desde Python 3.6 :

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

Se puede usar repry automáticamente se '' agrega:

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

# or for advanced: 
print(f'Total score for {name!r} is {score!r}') 
Gavriel Cohen avatar Jan 18 '2018 11:01 Gavriel Cohen