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.

user1985351
la source

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}')
Mixeur
la source
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}')
Vikas Gupta
la source
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))`
Gavriel Cohen
la source
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.

Abhishek
la source
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))
Paolo Rovelli
la source
12

Essayez simplement:

print("Total score for", name, "is", score)
sarora
la source
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.

L'Exorciste
la source
6
print("Total score for %s is %s  " % (name, score))

%speut être remplacé par %dou%f

user6014455
la source
6

Utilisation f-string:

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

Ou

Utilisation .format:

print("Total score for {} is {}".format(name, score))
iNet
la source
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

Supercolbat
la source
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.

Peter Mortensen
la source