366 votes

Impression de plusieurs arguments en Python

C'est juste un extrait de mon code :

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

Mais je veux que ça s'imprime :

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

name est une variable dans une liste et score est un nombre entier. Il s'agit de Python 3.3, si cela peut vous aider.

650voto

Blender Points 114729

Il existe plusieurs façons de procéder. Pour corriger votre code actuel en utilisant % -Pour 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 d'autres façons courantes de procéder :

  1. Passez-le comme un dictionnaire :

    print("Total score for %(n)s is %(s)s" % {'n': name, 's': score})

Il y a également un nouveau style de formatage des chaînes de caractères, qui peut être un peu plus facile à lire :

  1. Utiliser le nouveau style de formatage des chaînes de caractères :

    print("Total score for {} is {}".format(name, score))
  2. Utilisez le nouveau style de formatage des chaînes de caractères avec les nombres (utile pour réordonner ou imprimer le même nombre plusieurs fois) :

    print("Total score for {0} is {1}".format(name, score))
  3. Utiliser le nouveau style de formatage des chaînes de caractères avec des noms explicites :

    print("Total score for {n} is {s}".format(n=name, s=score))
  4. Concaténation de chaînes de caractères :

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

Les deux plus claires, à mon avis :

  1. Il suffit de passer les valeurs en tant que paramètres :

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

    Si vous ne voulez pas que des espaces soient insérés automatiquement par print dans l'exemple ci-dessus, changez le sep paramètre :

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

    Si vous utilisez Python 2, vous ne pourrez pas utiliser les deux dernières car print n'est pas une fonction dans Python 2. Vous pouvez cependant importer ce comportement depuis __future__ :

    from __future__ import print_function
  2. Utilisez le nouveau f -Le formatage des chaînes de caractères dans Python 3.6 :

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

8 votes

Bien sûr, il y a toujours la vieille méthode désapprouvée : print("Total score for "+str(name)"+ is "+str(score))

6 votes

@SnakesandCoffee : Je ferais juste print("Total score for", name, "is", score)

4 votes

Mon +1. Ces jours-ci, je préfère le .format() comme plus lisible que l'ancien % (tuple) -- même si j'ai vu des tests qui montrent que le % l'interpolation est plus rapide. Le site print('xxx', a, 'yyy', b) convient également pour les cas simples. Je recommande également d'apprendre .format_map() avec dictionnaire comme argument, et avec 'ssss {key1} xxx {key2}' -- agréable pour générer des textes à partir de modèles. Il existe également l'ancienne version string_template % dictionary . Mais les modèles n'ont pas l'air si propres : 'ssss %(key1)s xxx %(key2)s' .

63voto

Vikas Gupta Points 24

Il existe de nombreuses façons d'imprimer cela.

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

53voto

Gavriel Cohen Points 1378

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

Ou : f-string formatage de Python 3.6 :

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

Peut utiliser repr et automatiquement le '' est ajouté :

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

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

23voto

Abhishek Points 453

Dans Python 3.6, f-string est beaucoup plus propre.

Dans la version précédente :

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

Dans Python 3.6 :

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

fera l'affaire.

Il est plus efficace et plus élégant.

15voto

Paolo Rovelli Points 892

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

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

Il fonctionne à la fois avec Python 2.7 et 3.X.

NOTE : Si le score est un int alors, vous devez le convertir en str :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X