1809 votes

Comment imprimer en Python sans nouvelle ligne ni espace ?

La question est dans le titre.

J'aimerais faire en Python ce que je fais en C dans cet exemple :

#include <stdio.h>

int main() {
    int i;
    for (i=0; i<10; i++) printf(".");
    return 0;
}

Sortie :

..........

En Python :

>>> for i in xrange(0,10): print '.'
.
.
.
.
.
.
.
.
.
.
>>> for i in xrange(0,10): print '.',
. . . . . . . . . .

En Python print ajoutera un ' \n ou un espace, comment puis-je éviter cela ? Ce n'est qu'un exemple. Ne me dites pas que je peux d'abord faire une chaîne puis l'imprimer. Je voudrais savoir comment "ajouter" des chaînes de caractères à la sortie standard (je ne sais pas si c'est bien formulé).

2454voto

codelogic Points 22722
import sys
sys.stdout.write('.')

ou

print('.'), # this will still print a space, but not a newline

Veuillez noter qu'en Python 3, la fonction print a été transformée en fonction, de sorte que le deuxième exemple ne fonctionnera plus. En Python 3, vous pouvez à la place faire :

print('.', end="")

Ou si vous avez des problèmes avec le tampon, vous pouvez faire ceci .

print('.',end="",flush=True)

295voto

KDP Points 281

Cela devrait être aussi simple que ce qui est décrit sur ce lien par Guido Van Rossum :

Re : Comment imprimer sans c/r ?

http://www.python.org/search/hypermail/python-1992/0115.html

Est-il possible d'imprimer quelque chose sans qu'un retour chariot soit automatiquement ajouté ? automatiquement un retour chariot ?

Oui, ajoutez une virgule après le dernier argument à imprimer. Par exemple, cette boucle imprime les nombres 0..9 sur une ligne séparés par des espaces. Notez le "print" sans paramètre qui ajoute la dernière virgule :

>>> for i in range(10):
...     print i,
... else:
...     print
...
0 1 2 3 4 5 6 7 8 9
>>>

165voto

Beau Points 3353

Note : Le titre de cette question était auparavant quelque chose comme "Comment faire un printf en python ?".

Puisque les gens peuvent venir ici pour le chercher en se basant sur le titre, Python supporte également la substitution de style printf :

>>> strings = [ "one", "two", "three" ]
>>>
>>> for i in xrange(3):
...     print "Item %d: %s" % (i, strings[i])
...
Item 0: one
Item 1: two
Item 2: three

Et vous pouvez facilement multiplier les valeurs des chaînes de caractères :

>>> print "." * 10
..........

90voto

kristi Points 3078

Utilisez la fonction print de style python3 pour python2.6+. (cela brisera également toute instruction d'impression avec mot-clé existante dans le même fichier).

# for python2 to use the print() function, removing the print keyword
from __future__ import print_function
for x in xrange(10):
    print('.', end='')

Pour ne pas gâcher tous vos mots-clés d'impression de python2, créez un fichier séparé printf.py fichier

# printf.py

from __future__ import print_function

def printf(str, *args):
    print(str % args, end='')

Ensuite, utilisez-le dans votre fichier

from printf import printf
for x in xrange(10):
    printf('.')
print 'done'
#..........done

Autres exemples montrant le style printf

printf('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000

38voto

lenooh Points 507

Ce n'est pas la réponse à la question posée dans le titre, mais c'est la réponse à la question de savoir comment imprimer sur la même ligne :

import sys
for i in xrange(0,10):
   sys.stdout.write(".")
   sys.stdout.flush()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X