J'aimerais le faire en python. Ce que je voudrais faire dans cet exemple dansc:
En C:
#include <stdio.h>
int main() {
int i;
for (i=0; i<10; i++) printf(".");
return 0;
}
Production:
..........
En Python:
>>> for i in range(10): print('.')
.
.
.
.
.
.
.
.
.
.
>>> print('.', '.', '.', '.', '.', '.', '.', '.', '.', '.')
. . . . . . . . . .
En Python print
va ajouter un \n
ou un espace, comment puis-je éviter cela? Maintenant, c'est juste un exemple, ne me dites pas que je peux d'abord construire une chaîne puis l'imprimer. Je voudrais savoir comment "ajouter" des chaînes à stdout
.
Réponses:
En Python 3, vous pouvez utiliser les paramètres
sep=
etend=
de laprint
fonction:Pour ne pas ajouter de nouvelle ligne à la fin de la chaîne:
Pour ne pas ajouter d'espace entre tous les arguments de fonction que vous souhaitez imprimer:
Vous pouvez transmettre n'importe quelle chaîne à l'un des paramètres et utiliser les deux paramètres en même temps.
Si vous rencontrez des problèmes avec la mise en mémoire tampon, vous pouvez vider la sortie en ajoutant un
flush=True
argument de mot clé:Python 2.6 et 2.7
Depuis Python 2.6, vous pouvez soit importer la
print
fonction depuis Python 3 en utilisant le__future__
module :ce qui vous permet d'utiliser la solution Python 3 ci-dessus.
Cependant, notez que le
flush
mot-clé n'est pas disponible dans la version de laprint
fonction importée de__future__
Python 2; cela ne fonctionne que dans Python 3, plus spécifiquement 3.3 et versions ultérieures. Dans les versions antérieures, vous devrez toujours vider manuellement avec un appel àsys.stdout.flush()
. Vous devrez également réécrire toutes les autres instructions d'impression dans le fichier où vous effectuez cette importation.Ou vous pouvez utiliser
sys.stdout.write()
Vous devrez peut-être également appeler
pour s'assurer
stdout
est rincé immédiatement.la source
flush
et que fait-il réellement?Cela devrait être aussi simple que décrit sur ce lien par Guido Van Rossum:
Re: Comment imprimer sans ac / r?
http://legacy.python.org/search/hypermail/python-1992/0115.html
Oui, ajoutez une virgule après le dernier argument à imprimer. Par exemple, cette boucle imprime les nombres 0..9 sur une ligne séparée par des espaces. Notez le "print" sans paramètre qui ajoute la nouvelle ligne finale:
la source
Remarque: Le titre de cette question était quelque chose comme "Comment imprimer en python?"
Étant donné que les gens peuvent venir ici à la recherche en fonction du titre, Python prend également en charge la substitution de style printf:
Et, vous pouvez facilement multiplier les valeurs de chaîne:
la source
Utilisez la fonction d'impression de style python3 pour python2.6 + (cassera également toutes les instructions d'impression existantes par mot-clé dans le même fichier.)
Pour ne pas ruiner tous vos mots clés d'impression python2, créez un
printf.py
fichier séparéEnsuite, utilisez-le dans votre fichier
Plus d'exemples montrant le style printf
la source
Comment imprimer sur la même ligne:
la source
La nouvelle fonction (à partir de Python 3.x)
print
a unend
paramètre facultatif qui vous permet de modifier le caractère de fin:Production:
Il y a aussi
sep
pour le séparateur:Production:
Si vous vouliez l'utiliser dans Python 2.x, ajoutez-le simplement au début de votre fichier:
from __future__ import print_function
la source
Utilisation de functools.partial pour créer une nouvelle fonction appelée printf
Un moyen facile d'envelopper une fonction avec des paramètres par défaut.
la source
Vous pouvez simplement ajouter
,
à la fin de laprint
fonction pour qu'elle ne s'imprime pas sur la nouvelle ligne.la source
En Python 3+,
print
est une fonction. Quand vous appelezPython le traduit en
Vous pouvez changer
end
ce que vous voulez.la source
python 2.6+ :
python 3 :
python <= 2,5 :
si l'espace supplémentaire est OK après chaque impression, en python 2
trompeur en python 2 - éviter :
la source
Tu peux essayer:
la source
Vous pouvez faire la même chose en python3 comme suit:
et l'exécuter avec
python filename.py
oupython3 filename.py
la source
j'ai récemment eu le même problème ..
je l'ai résolu en faisant:
cela fonctionne à la fois sur unix et sur windows ... je ne l'ai pas testé sur macosx ...
hth
la source
sys.__stdout__
@lenooh a satisfait ma requête. J'ai découvert cet article en recherchant «python suppress newline». J'utilise IDLE3 sur Raspberry Pi pour développer Python 3.2 pour PuTTY. Je voulais créer une barre de progression sur la ligne de commande PuTTY. Je ne voulais pas que la page défile. Je voulais une ligne horizontale pour rassurer l'utilisateur de ne pas paniquer que le programme ne s'est pas interrompu ni envoyé pour déjeuner sur une joyeuse boucle infinie - comme un appel à `` me laisser être, je vais bien, mais cela peut prendre un certain temps. message interactif - comme une barre de progression dans le texte.
L'
print('Skimming for', search_string, '\b! .001', end='')
initialise le message en préparant la prochaine sérigraphie, qui imprimera trois espaces arrière comme ⌫⌫⌫ effacement puis une période, en effaçant '001' et en étendant la ligne des périodes. Aprèssearch_string
la saisie par l'utilisateur des perroquets, le\b!
coupe le point d'exclamation de monsearch_string
texte pour reculer sur l'espace quiprint()
autrement force, en plaçant correctement la ponctuation. Cela est suivi d'un espace et du premier «point» de la «barre de progression» que je simule. Inutilement, le message est également amorcé avec le numéro de page (formaté à une longueur de trois avec des zéros en tête) pour prendre note de l'utilisateur que la progression est en cours de traitement et qui reflétera également le nombre de périodes que nous développerons plus tard dans le droite.La viande de la barre de progression est en
sys.stdout.write('\b\b\b.'+format(page, '03'))
ligne. Tout d'abord, pour effacer vers la gauche, il sauvegarde le curseur sur les trois caractères numériques avec le "\ b \ b \ b" comme ⌫⌫⌫ rubout et supprime une nouvelle période à ajouter à la longueur de la barre de progression. Il écrit ensuite trois chiffres de la page vers laquelle il a progressé jusqu'à présent. Parcesys.stdout.write()
qu'attend la fermeture d'un tampon complet ou du canal de sortie,sys.stdout.flush()
force l'écriture immédiate.sys.stdout.flush()
est construit à la fin deprint()
laquelle est contourné avecprint(txt, end='' )
. Ensuite, le code parcourt ses opérations quotidiennes intensives tout en n'imprimant rien de plus jusqu'à ce qu'il revienne ici pour effacer trois chiffres, ajouter un point et écrire à nouveau trois chiffres, incrémentés.Les trois chiffres effacés et réécrits ne sont en aucun cas nécessaires - c'est juste un épanouissement qui illustre
sys.stdout.write()
contreprint()
. Vous pouvez tout aussi facilement amorcer avec un point et oublier les trois espaces arrière de barre oblique inversée fantaisie (bien sûr, n'écrivant pas également le nombre de pages formatées) en imprimant simplement la barre de période plus longtemps une par une - sans espaces ni nouvelles lignes en utilisant uniquement lesys.stdout.write('.'); sys.stdout.flush()
paire.Veuillez noter que le shell Raspberry Pi IDLE3 Python n'honore pas le retour arrière comme ⌫ rubout mais imprime à la place un espace, créant à la place une liste apparente de fractions.
- (o = 8> wiz
la source
Vous remarquerez que toutes les réponses ci-dessus sont correctes. Mais je voulais créer un raccourci pour toujours écrire le paramètre "end = ''" à la fin.
Vous pouvez définir une fonction comme
Il accepterait tout le nombre de paramètres. Même il acceptera tous les autres paramètres comme file, flush, etc. et avec le même nom.
la source
*arg
est au début (python 2.7), et le mettre à la fin s'est exécuté, mais n'a pas fonctionné correctement. J'ai défini une fonction qui ne prenait quePrint(*args)
, puis que j'appelais print avecsep='', end=''
. Et maintenant ça marche comme je veux. Donc, un vote positif pour l'idée.Beaucoup de ces réponses semblent un peu compliquées. Dans Python 3.x, vous faites simplement ceci:
La valeur par défaut de end est
"\n"
. Nous le changeons simplement en espace ou vous pouvez également utiliserend=""
(pas d'espace) pour faire ce quiprintf
se fait normalement.la source
vous voulez imprimer quelque chose dans la boucle droite, mais vous ne voulez pas l'imprimer dans une nouvelle ligne à chaque fois .. par exemple:
mais vous voulez qu'il s'imprime comme ceci: hi hi hi hi hi hi right ???? il suffit d'ajouter une virgule après l'impression "salut"
Exemple:
for i in range (0,5): print "hi", OUTPUT: hi hi hi hi hi
la source
Ou avoir une fonction comme:
Alors maintenant:
Les sorties:
la source
Cela a fonctionné dans les deux 2.7.8 et 2.5.2 (Canopy et terminal OSX, respectivement) - aucune importation de module ou voyage dans le temps requis.
la source
sys.stdout.isatty()
sinon redirigé vers un fichier.Il existe deux manières générales de procéder:
Imprimer sans nouvelle ligne dans Python 3.x
N'ajoutez rien après l'instruction print et supprimez '\ n' en utilisant
end=''
comme:Un autre exemple en boucle :
Imprimer sans nouvelle ligne dans Python 2.x
L'ajout d'une virgule de fin indique qu'après l'impression, ignorez
\n
.Un autre exemple en boucle :
J'espère que cela vous aidera. Vous pouvez visiter ce lien .
la source
end=" "
par exemple: print ('hello', end = '' "); print ('world')print 'hello' ;print'there'
dans paiza.io/projects/e/35So9iUPfMdIORGzJTb2NQ... vous n'avez pas besoin d'importer de bibliothèque. Utilisez simplement le caractère de suppression:
cela supprime la nouvelle ligne et l'espace (^ _ ^) *
la source