2010-02-13 3 views
120

Je vois que je ne peux pas faire:Comment les booléens sont-ils formatés dans Strings en Python?

"%b %b" % (True, False) 

en Python. J'ai deviné %b pour b (oolean). Est-ce qu'il y a quelque chose comme ça?

+1

Que voulez-vous que le résultat soit? Vrai et faux? Vous voulez '% s' alors. % b, quand il existe, est pour binaire (comme dans base-2). –

+0

Ho oui! "% s" semble fonctionner correctement. Répondez à cette question et obtenez une réponse. J'avais l'habitude de faire "% s"% str (False). Honte à moi :) –

+3

lien vers la documentation pertinente: http://docs.python.org/library/stdtypes.html#string-formatting-operations – bernie

Répondre

177
>>> print "%r, %r" % (True, False) 
True, False 

Ce n'est pas spécifique aux valeurs booléennes - %r appelle la méthode __repr__ sur l'argument. %s (pour str) devrait également fonctionner.

+2

Quelle est la différence majeure entre '% r' et'% s'? – Stallman

+8

J'ai toujours eu cette distiction à l'esprit, mais corrigez-moi si je me trompe. % s (et donc str()) visent à représenter l'objet aussi clairement que possible pour les humains. % r (et donc repr()) visent à représenter l'objet le plus clairement possible pour python. Par exemple, 'print (str (" foo "))' affiche simplement 'foo' sur une nouvelle ligne. 'print (repr (" foo "))' imprime cependant '' foo'' sur une nouvelle ligne, y compris les guillemets, puisque c'est ce que vous devez taper dans l'interpréteur python pour obtenir l'objet correspondant à l'argument dans python. – bobismijnnaam

50

Si vous voulez True False utilisation:

"%s %s" % (True, False) 

parce str(True) est 'True' et str(False) est 'False'.

ou si vous voulez 1 0 utilisation:

"%i %i" % (True, False) 

parce int(True) est 1 et int(False) est 0.

8

Vous pouvez également utiliser la chaîne de Formatter class

print "{0} {1}".format(True, False); 
print "{0:} {1:}".format(True, False); 
print "{0:d} {1:d}".format(True, False); 
print "{0:f} {1:f}".format(True, False); 
print "{0:e} {1:e}".format(True, False); 

Ce sont les résultats

True False 
True False 
1 0 
1.000000 0.000000 
1.000000e+00 0.000000e+00 

Certains des spécificateurs % -format (%r, %i) ne sont pas disponibles. Pour plus de détails, voir le Format Specification Mini-Language

+3

Notez que l'ajout d'options de mise en forme [peut visser ceci.] (Http://stackoverflow.com/q/36573222/241211) Par exemple. '{: _^5}' vous obtiendra '' __1 __ ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – Michael

+2

Vous pouvez [contourner] (https://stackoverflow.com/a/48326865/241211) les problèmes avec les conversions de type comme '! S':' '{! S: _^5}'. Format (True) ' est "True" – Michael