l'affichage de variable dans un print

comme les %s - %.2f - {}. - , - +

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

J’ai fini le cours de python3 et fait le TP, et je commence maintenant le cours sur la programmation orienté objet. :D

J’ai remarqué qu’il y avait différentes façons d’inclure une variable dans un print() : il y a %s et %f.

a = 1.23
b = "salut"
print("%s personnes ont dit %f." %(b,a)

Mais il y a aussi les virgules :

a = 1.23
b = "salut"
print(a,"personnes ont dit",b) 

Il y a aussi les + :-°

a = 1.23
b = "salut"
print(a,"personnes ont dit" +b) 

Et maintenant il y a {}.

a = 1.23
b = "salut"
print(a,"personnes ont dit {}." .format(b)) 

Donc voici mes questions : :zorro:

  • Dans quel cas faut il préférer les uns ou les autres ?

  • Comment les utiliser ?

  • Y en existe-t-il d’autres ? (par exemple je connais %s et %f, mais il y en aurait d’autres ?)

Merci d’avance pour vos réponses :)

Édité par 5IM0N

+0 -0

Y en existe-t-il d’autres ? (par exemple je connais %s et %f, mais il y en aurait d’autres ?)

Avec un python récent (3.5 ?) seulement,

a = 1.23
b = "salut"
print(f"{a} personnes ont dit {b}.")

Le + est une mauvaise idée, car les concaténations de chaines en python sont lentes. De plus, ça ne marche qu’entre deux chaines.

Il est important de distinguer deux choses : le print et la formation d’une chaine.

a = "Ils sont"
b = 3
c = "personnes."

a+b+c # Échec : TypeError
print(a,b,c) #OK

"%s %d %s" % (a,b,c) # Renvoie la chaine "Ils sont 3 personnes."

"{} {} {}".format(a,b,c)  # Renvoie la chaine "Ils sont 3 personnes."

"{a} {b} {c}".format(a=a,b=b,c=c)  # Renvoie la chaine "Ils sont 3 personnes."

f"{a} {b} {c}"  # Renvoie la chaine "Ils sont 3 personnes."

Les deux dernières lignes sont équivalentes, la dernière étant la version courte.

J’aime personnellement beaucoup format, car il permet de formater l’affichage très facilement et de manière très précise. Confère la doc.

Hier, dans le parc, j’ai vu une petite vieille entourée de dinosaures aviens. Je donne pas cher de sa peau.

+2 -0

Salut,

Il peut en effet arriver qu’il y ait plusieurs manières de faire la même chose, bien que la PEP20 dise le contraire (même s’il y en a une préférable aux autres : les f-strings).

Déjà print se démarque des autres solutions parce qu’elle ne fait pas la même chose : la fonction est dédiée à l’affichage. Elle prend des valeurs en paramètres qu’elle écrit sur un fichier cible. Il est possible de choisir un séparateur entre ces valeurs mais elle ne fournit pas de réglages plus fins.

Les autres solutions que tu as vues (auxquelles on pourrait ajouter les f-strings f'{a} personnes ont dit {b}.') créent une chaîne de caractères que tu pourras ensuite afficher à l’aide de print. Mais ce ne sont pas des opérations spécialement dédiées à l’affichage, tu pourrais décider de faire tout ce que tu veux de la chaîne renvoyée.

La syntaxe à base de % est historique, elle provient de la notation printf du C mais a l’inconvénient d’être assez peu claire. Elle reste tout de même la solution privilégiée lorsqu’on manipule des bytes (car la seule possible).

La méthode format est arrivée plus tard pour donner quelque chose de plus user-friendly. Elle est à privilégier pour les versions de Python inférieures à 3.5. Pour les plus récentes, utilise plutôt des f-strings.

Aussi, format et f-strings permettent des choses un peu plus complexes que de simples {} : https://docs.python.org/fr/3/library/string.html#formatspec

Il y a même une façon supplémentaire depuis python 3.6.

age = 18
print(f'j'ai {âge} ans')

La chaîne qu’on passe à print s’appelle une f-string, c’est une façon de construire une chaîne de caractère comme l’interpolation en C# par exemple.

+0 -0
Auteur du sujet

Merci pour vos réponses. J’ai python3.6 donc je dois avoir les f-string; si j’ai bien compris il est préférable de les utiliser pour les nouvelles versions de python.

J’utilisais principalement les % du coup, je vais moins les utiliser pour être conforme aux nouvelles spécifications python.

mais concernant les float affichés dans une chaîne, il arrive qu’ils affichent 0.30000 au lieu de 0.3 comme indiqué dans la variable…

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte