web-dev-qa-db-fra.com

Imprimer sans nouvelle ligne (print 'a',) imprime un espace, comment supprimer?

J'ai ce code:

>>> for i in xrange(20):
...     print 'a',
... 
a a a a a a a a a a a a a a a a a a a a

Je veux sortir 'a', sans ' ' comme ceci:

aaaaaaaaaaaaaaaaaaaa

C'est possible?

123
pythonFoo

Il y a plusieurs façons d'atteindre votre résultat. Si vous souhaitez simplement une solution à votre cas, utilisez multiplication de chaîne comme @ Ant mentionne. Cela ne fonctionnera que si chacune de vos instructions print imprime la même chaîne. Notez que cela fonctionne pour la multiplication de n'importe quelle chaîne de longueur (par exemple, 'foo' * 20 fonctionne).

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

Si vous souhaitez généralement procéder ainsi, créez une chaîne, puis imprimez-la une fois. Cela consomme un peu de mémoire pour la chaîne, mais n'appelle qu'un seul appel à print. Notez que la concaténation de chaînes à l'aide de += est maintenant linéaire dans la taille de la chaîne que vous concaténez, ce qui accélère le processus.

>>> for i in xrange(20):
...     s += 'a'
... 
>>> print s
aaaaaaaaaaaaaaaaaaaa

Ou vous pouvez le faire plus directement en utilisant sys.stdout . write () , qui print est une enveloppe. Cela n'écrira que la chaîne brute que vous lui aurez donnée, sans aucune mise en forme. Notez qu'aucune nouvelle ligne n'est imprimée, même à la fin des 20 as.

>>> import sys
>>> for i in xrange(20):
...     sys.stdout.write('a')
... 
aaaaaaaaaaaaaaaaaaaa>>> 

Python 3 modifie l'instruction print en une fonction print () , qui vous permet de définir un paramètre end. Vous pouvez l'utiliser dans> = 2.6 en important de __future__. J'éviterais cependant cela dans tout code 2.x sérieux, car ce serait un peu déroutant pour ceux qui n'ont jamais utilisé 3.x. Cependant, cela devrait vous donner un avant-goût des bienfaits apportés par 3.x.

>>> from __future__ import print_function
>>> for i in xrange(20):
...     print('a', end='')
... 
aaaaaaaaaaaaaaaaaaaa>>> 
129
marcog

A partir de PEP 3105: imprimer en tant que fonction dans le Nouveautés de Python 2.6 document:

>>> from __future__ import print_function
>>> print('a', end='')

Évidemment, cela ne fonctionne qu'avec python 3.0 ou supérieur (ou 2.6+ avec un from __future__ import print_function au début). L'instruction print a été supprimée et est devenue la fonction print() par défaut dans Python 3.0.

119
Antoine Pelisse

Vous pouvez supprimer cet espace en imprimant une chaîne vide sur la sortie standard entre les instructions print.

>>> import sys
>>> for i in range(20):
...   print 'a',
...   sys.stdout.write('')
... 
aaaaaaaaaaaaaaaaaaaa

Cependant, une solution plus propre consiste à créer d’abord la chaîne entière que vous souhaitez imprimer, puis à la générer avec une seule instruction print.

41
Pär Wieslander

Vous pouvez imprimer un caractère de retour arrière ('\b'):

for i in xrange(20):
    print '\ba',

résultat:

aaaaaaaaaaaaaaaaaaaa
34
Lucas Moeskops

Python 3.x:

for i in range(20):
    print('a', end='')

Python 2.6 ou 2.7:

from __future__ import print_function
for i in xrange(20):
    print('a', end='')
30
codeape

Si vous voulez qu’ils se présentent un à la fois, vous pouvez le faire:

import time
import sys
for i in range(20):
    sys.stdout.write('a')
    sys.stdout.flush()
    time.sleep(0.5)

sys.stdout.flush() est nécessaire pour forcer l'écriture du caractère à chaque exécution de la boucle.

10
daviewales

Juste comme note de côté:

L'impression est O(1) mais la construction d'une chaîne puis l'impression sont O (n), où n représente le nombre total de caractères de la chaîne. Alors oui, bien que la construction de la chaîne soit "plus propre", ce n'est pas la méthode la plus efficace.

La façon dont je le ferais est la suivante:

from sys import stdout
printf = stdout.write

Vous avez maintenant une "fonction d'impression" qui imprime toute chaîne que vous lui attribuez sans renvoyer le nouveau caractère de ligne à chaque fois.

printf("Hello,")
printf("World!")

La sortie sera: Hello, World!

Toutefois, si vous souhaitez imprimer des entiers, des flottants ou d'autres valeurs autres que des chaînes, vous devez les convertir en chaîne à l'aide de la fonction str ().

printf(str(2) + " " + str(4))

La sortie sera: 2 4

7
Kyle Siopiolosz

sans quoi? tu veux dire

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

?

6
Ant

Soit quoi Antdit , ou s'accumulent dans une chaîne, puis imprimez une fois:

s = '';
for i in xrange(20):
    s += 'a'
print s
6
jensgram

c'est vraiment simple

pour python _ 3 versions ou plus, il vous suffit d'écrire les codes suivants

for i in range(20):
      print('a',end='')

convertissez simplement la boucle en codes suivants, vous n'avez pas à vous soucier d'autres choses

3
Shad Munir

WOW !!!

C'est joli long time il y a

Maintenant, dans python 3.x ce sera assez facile

code:

for i in range(20):
      print('a',end='') # here end variable will clarify what you want in 
                        # end of the code

sortie:

aaaaaaaaaaaaaaaaaaaa 

Plus d'informations sur la fonction print ()

print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)

ici:

value1,value2,value3

vous pouvez imprimer valeurs multiples en utilisant virgules

sep = '-'

3 valeurs seront séparées par le caractère '-'

vous pouvez utiliser n'importe quel caractère au lieu de cette chaîne, comme sep = '@' ou sep = 'bon'

end='\n'

par défaut, la fonction d'impression met '\ n' charater à la fin de la sortie

mais vous pouvez utiliser n'importe quel caractère ou chaîne en modifiant la valeur de fin de variale

comme fin = '$' ou fin = '.' ou fin = 'Bonjour'

file=sys.stdout

c'est une valeur par défaut, sortie standard du système

en utilisant cet argument, vous pouvez créer un flux de fichier de sortie comme

print("I am a Programmer", file=open("output.txt", "w"))

par ce code, vous créerez un fichier nommé output.txt où votre sortie je suis un programmeur sera stockée

flush = False

C'est une valeur par défaut en utilisant flush = True vous pouvez forcer vider le flux

2

aussi simple que cela

def printSleeping():
     sleep = "I'm sleeping"
     v = ""
     for i in sleep:
         v += i
         system('cls')
         print v
         time.sleep(0.02)
2
TLEJMI