Hay muchas maneras de hacer esto. Para arreglar su código actual usando %-formatting, necesita pasar una tupla:
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:
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:
Use un formato de cadena de estilo nuevo:
print("Total score for {} is {}".format(name, score))
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))
Utilice un formato de cadena de estilo nuevo con nombres explícitos:
print("Total score for {n} is {s}".format(n=name, s=score))
Concatenar cadenas:
print("Total score for "+ str(name)+" is "+ str(score))
Los dos más claros, en mi opinión:
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
Utilice el nuevo fformato de cadena en Python 3.6:
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 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)) 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 codeprint("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()
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. Elprint('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 mayorstring_template % dictionary
. Sin embargo, las plantillas no se ven tan limpio:'ssss %(key1)s xxx %(key2)s'
.print(f"Total score for {name} is {score}")
sin llamadas a funciones explícitas (siemprename
y cuandoscore
estén dentro del alcance, obviamente).Hay muchas formas de imprimir eso.
Echemos un vistazo con otro ejemplo.
fuente
print("sum of {0} and {1} is {2}".format(a,b,c))
es excesivo, puede omitirlo aprint("sum of {} and {} is {}".format(a,b,c))
menos que desee cambiar el orden.Uso
.format()
:O:
O:
O:
fuente
En Python 3.6,
f-string
es mucho más limpio.En versión anterior:
En Python 3.6:
lo haré
Es más eficiente y elegante.
fuente
Manteniéndolo simple, personalmente me gusta la concatenación de cadenas:
Funciona con Python 2.7 y 3.X.
NOTA: Si el puntaje es un int , entonces, debe convertirlo en str :
fuente
Sólo inténtalo:
fuente
Solo sigue esto
O
Y olvídate de todos los demás, de lo contrario el cerebro no podrá mapear todos los formatos.
fuente
%s
puede ser reemplazado por%d
o%f
fuente
Uso
f-string
:O
Uso
.format
:fuente
Si
score
es un número, entoncesSi la puntuación es una cadena, entonces
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
fuente
Esto es lo que hago:
Recuerde poner un espacio después
for
y antes y despuésis
.fuente