En python, si je dis
print 'h'
Je reçois la lettre h et une nouvelle ligne. Si je dis
print 'h',
Je reçois la lettre h et pas de nouvelle ligne. Si je dis
print 'h',
print 'm',
Je reçois la lettre h, un espace et la lettre m. Comment puis-je empêcher Python d'imprimer l'espace?
Les instructions d'impression sont différentes itérations de la même boucle, je ne peux donc pas simplement utiliser l'opérateur +.
Vous pouvez utiliser:
sys.stdout.write('h')
sys.stdout.write('m')
Juste un commentaire. Dans Python , vous utiliserez
print('h', end='')
pour supprimer le terminateur de ligne de fond, et
print('a', 'b', 'c', sep='')
pour supprimer le séparateur d'espaces entre les éléments.
Greg a raison-- vous pouvez utiliser sys.stdout.write
Peut-être, cependant, devriez-vous envisager de refactoriser votre algorithme pour accumuler une liste de <whatevers>, puis
lst = ['h', 'm']
print "".join(lst)
Ou utilisez un +
, à savoir:
>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls
Assurez-vous simplement que tous sont des objets concaténables.
Python 2.5.2 (r252:60911, Sep 27 2008, 07:03:14)
[GCC 4.3.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print "hello",; print "there"
hello there
>>> print "hello",; sys.stdout.softspace=False; print "there"
hellothere
Mais en réalité, vous devriez utiliser sys.stdout.write
directement.
Pour être complet, un autre moyen consiste à effacer la valeur de l'espace logiciel après avoir effectué l'écriture.
import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
impressions helloworld !
Utiliser stdout.write () est probablement plus pratique dans la plupart des cas.
Cela peut paraître stupide, mais semble être le plus simple:
print 'h',
print '\bm'
Reprenez le contrôle de votre console! Simplement:
from __past__ import printf
où __past__.py
contient:
import sys
def printf(fmt, *varargs):
sys.stdout.write(fmt % varargs)
ensuite:
>>> printf("Hello, world!\n")
Hello, world!
>>> printf("%d %d %d\n", 0, 1, 42)
0 1 42
>>> printf('a'); printf('b'); printf('c'); printf('\n')
abc
>>>
Bonus supplémentaire: Si vous n'aimez pas print >> f, ...
, vous pouvez étendre cette câperie à fprintf (f, ...).
Je ne suis pas en train d'ajouter une nouvelle réponse. Je mets simplement la réponse la mieux marquée dans un meilleur format. Je peux voir que la meilleure réponse par notation est d'utiliser sys.stdout.write(someString)
. Vous pouvez essayer ceci:
import sys
Print = sys.stdout.write
Print("Hello")
Print("World")
donnera:
HelloWorld
C'est tout.
Dans python 2.6:
>>> print 'h','m','h'
h m h
>>> from __future__ import print_function
>>> print('h',end='')
h>>> print('h',end='');print('m',end='');print('h',end='')
hmh>>>
>>> print('h','m','h',sep='');
hmh
>>>
Donc, en utilisant print_function from __future__, vous pouvez définir explicitement les paramètres sep et fin de la fonction print.
Vous pouvez utiliser print comme la fonction printf en C.
par exemple.
affiche "% s% s"% (x, y)
sys.stdout.write
est (en Python 2) la seule solution robuste. Python 2 l'impression est insensée. Considérons ce code:
print "a",
print "b",
Ceci imprimera a b
, vous laissant supposer qu'il s'agit d'un espace de fin. Mais ce n'est pas correct. Essayez ceci à la place:
print "a",
sys.stdout.write("0")
print "b",
Ceci imprimera a0b
. Comment expliquez-vous celà? Où sont passés les espaces?
Je n'arrive toujours pas à comprendre ce qui se passe vraiment ici. Quelqu'un pourrait-il regarder par-dessus mon meilleur conjecture:
Ma tentative de déduire les règles lorsque vous avez un ,
final sur votre print
:
Tout d'abord, supposons que print ,
(in Python 2) n'imprime aucun espace (espaces ni nouvelles lignes).
Python 2 fait toutefois attention à la façon dont vous imprimez - utilisez-vous print
ou sys.stdout.write
ou autre chose? Si vous passez deux appels consécutifs à print
, alors Python insistera pour insérer un espace entre les deux.
print("{0}{1}{2}".format(a, b, c))
print('''first line \
second line''')
il va produire
première ligne deuxième ligne
import sys
a=raw_input()
for i in range(0,len(a)):
sys.stdout.write(a[i])