Il existe plusieurs façons de procéder. Pour corriger votre code actuel en utilisant le %formatage, vous devez passer un tuple:
Passez-le comme un tuple:
print("Total score for %s is %s"%(name, score))
Un tuple avec un seul élément ressemble ('this',).
Voici quelques autres façons courantes de le faire:
Passez-le comme un dictionnaire:
print("Total score for %(n)s is %(s)s"%{'n': name,'s': score})
Il existe également un formatage de chaînes de style nouveau, qui pourrait être un peu plus facile à lire:
Utilisez un formatage de chaîne de style nouveau:
print("Total score for {} is {}".format(name, score))
Utilisez un nouveau format de chaîne de caractères avec des nombres (utile pour réorganiser ou imprimer plusieurs fois le même):
print("Total score for {0} is {1}".format(name, score))
Utilisez un formatage de chaîne de style nouveau avec des noms explicites:
print("Total score for {n} is {s}".format(n=name, s=score))
Concaténer des chaînes:
print("Total score for "+ str(name)+" is "+ str(score))
Les deux plus clairs, à mon avis:
Passez simplement les valeurs comme paramètres:
print("Total score for", name,"is", score)
Si vous ne voulez pas que les espaces soient insérés automatiquement par printdans l'exemple ci-dessus, modifiez le sepparamètre:
print("Total score for ", name," is ", score, sep='')
Si vous utilisez Python 2, vous ne pourrez pas utiliser les deux derniers car il printn'y a pas de fonction dans Python 2. Vous pouvez cependant importer ce comportement à partir de __future__:
from __future__ import print_function
Utilisez le nouveau fformatage de chaînes dans Python 3.6:
bien sûr, il y a toujours la méthode désapprouvée séculaire:print("Total score for "+str(name)"+ is "+str(score))
Snakes and Coffee
5
@SnakesandCoffee: Je ferais justeprint("Total score for", name, "is", score)
Blender
4
Mon +1. Ces jours-ci, je préfère le .format()plus lisible que l'ancien % (tuple)- même si j'ai vu des tests qui montrent que l' %interpolation est plus rapide. Cela print('xxx', a, 'yyy', b)convient également aux cas simples. Je recommande également d'apprendre .format_map()avec le dictionnaire comme argument, et avec 'ssss {key1} xxx {key2}'- agréable pour générer des textes à partir de modèles. Il y a aussi les plus anciens string_template % dictionary. Mais les modèles ne semblent pas propres: 'ssss %(key1)s xxx %(key2)s'.
pepr
6
Pour info, à partir de Python 3.6, nous obtenons des f-strings , vous pouvez donc maintenant aussi le faire print(f"Total score for {name} is {score}")sans appels de fonctions explicites (tant que nameet scoresont dans la portée évidemment).
ShadowRanger
57
Il existe de nombreuses façons d'imprimer cela.
Jetons un coup d'œil avec un autre exemple.
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)) est exagéré, vous pouvez ignorer à print("sum of {} and {} is {}".format(a,b,c)) moins que vous ne souhaitiez modifier l'ordre.
Jean-François Fabre
39
Utilisation .format()::
print("Total score for {0} is {1}".format(name, score))
Ou:
//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()
plus lisible que l'ancien% (tuple)
- même si j'ai vu des tests qui montrent que l'%
interpolation est plus rapide. Celaprint('xxx', a, 'yyy', b)
convient également aux cas simples. Je recommande également d'apprendre.format_map()
avec le dictionnaire comme argument, et avec'ssss {key1} xxx {key2}'
- agréable pour générer des textes à partir de modèles. Il y a aussi les plus anciensstring_template % dictionary
. Mais les modèles ne semblent pas propres:'ssss %(key1)s xxx %(key2)s'
.print(f"Total score for {name} is {score}")
sans appels de fonctions explicites (tant quename
etscore
sont dans la portée évidemment).Il existe de nombreuses façons d'imprimer cela.
Jetons un coup d'œil avec un autre exemple.
la source
print("sum of {0} and {1} is {2}".format(a,b,c))
est exagéré, vous pouvez ignorer àprint("sum of {} and {} is {}".format(a,b,c))
moins que vous ne souhaitiez modifier l'ordre.Utilisation
.format()
::Ou:
Ou:
Ou:
la source
En Python 3.6,
f-string
est beaucoup plus propre.Dans la version précédente:
En Python 3.6:
ça ira.
Il est plus efficace et élégant.
la source
Pour rester simple, j'aime personnellement la concaténation de chaînes:
Il fonctionne avec Python 2.7 et 3.X.
REMARQUE: si le score est un entier , vous devez le convertir en str :
la source
Essayez simplement:
la source
Suivez juste ceci
OU
Et oubliez tous les autres, sinon le cerveau ne pourra pas cartographier tous les formats.
la source
%s
peut être remplacé par%d
ou%f
la source
Utilisation
f-string
:Ou
Utilisation
.format
:la source
Si
score
est un nombre, alorsSi le score est une chaîne, alors
Si le score est un nombre, alors c'est
%d
, si c'est une chaîne, alors c'est%s
, si le score est un flottant, alors c'est%f
la source
C'est ce que je fais:
N'oubliez pas de mettre un espace après
for
et avant et aprèsis
.la source