Imprimer plusieurs arguments en Python


309

Ceci est juste un extrait de mon code:

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

Mais je veux qu'il imprime:

"Le score total pour (nom) est (score)"

nameest une variable dans une liste et scoreest un entier. C'est Python 3.3 si cela aide du tout.

Réponses:


559

Il existe plusieurs façons de procéder. Pour corriger votre code actuel en utilisant le %formatage, vous devez passer un tuple:

  1. 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:

  1. 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:

  1. Utilisez un formatage de chaîne de style nouveau:

    print("Total score for {} is {}".format(name, score))
  2. 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))
  3. 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))
  4. Concaténer des chaînes:

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

Les deux plus clairs, à mon avis:

  1. 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
  2. Utilisez le nouveau fformatage de chaînes dans Python 3.6:

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

7
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 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}')

3
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 code

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

Ou:

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

Ou:

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

21

En Python 3.6, f-stringest beaucoup plus propre.

Dans la version précédente:

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

En Python 3.6:

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

ça ira.

Il est plus efficace et élégant.


15

Pour rester simple, j'aime personnellement la concaténation de chaînes:

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

Il fonctionne avec Python 2.7 et 3.X.

REMARQUE: si le score est un entier , vous devez le convertir en str :

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

12

Essayez simplement:

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

11

Suivez juste ceci

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

OU

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

Et oubliez tous les autres, sinon le cerveau ne pourra pas cartographier tous les formats.


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

%speut être remplacé par %dou%f


6

Utilisation f-string:

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

Ou

Utilisation .format:

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

5

Si scoreest un nombre, alors

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

Si le score est une chaîne, alors

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

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


3

C'est ce que je fais:

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

N'oubliez pas de mettre un espace après foret avant et après is.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.