Afdrukken zonder een nieuwe regel of spatie

Ik zou het graag in Python willen doen. Wat ik in dit voorbeeld in C zou willen doen:

#include <stdio.h>
int main() {
    int i;
    for (i=0; i<10; i++) printf(".");
    return 0;
}

Uitvoer:

..........

In Python:

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

In Python voegt printeen \nof spatie toe. Hoe kan ik dat vermijden? Nu, het is maar een voorbeeld. Zeg me niet dat ik eerst een string kan bouwen en dan kan printen. Ik zou graag willen weten hoe ik strings kan ‘toevoegen’ aan stdout.


Antwoord 1, autoriteit 100%

In Python 3 kun je de parameters sep=en end=gebruiken van de printfunctie:

Om geen nieuwe regel aan het einde van de tekenreeks toe te voegen:

print('.', end='')

Als u geen spatie wilt toevoegen tussen alle functieargumenten die u wilt afdrukken:

print('a', 'b', 'c', sep='')

Je kunt elke string aan beide parameters doorgeven en je kunt beide parameters tegelijkertijd gebruiken.

Als je problemen hebt met bufferen, kun je de uitvoer leegmaken door flush=Truetrefwoordargument toe te voegen:

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

Python 2.6 en 2.7

Vanaf Python 2.6 kunt u de functie printimporteren vanuit Python 3 met behulp van de __future__module:

from __future__ import print_function

waarmee je de Python 3-oplossing hierboven kunt gebruiken.

Houd er echter rekening mee dat het sleutelwoord flushniet beschikbaar is in de versie van de functie printdie is geïmporteerd uit __future__in Python 2; het werkt alleen in Python 3, meer specifiek 3.3 en hoger. In eerdere versies moet je nog steeds handmatig flushen met een aanroep van sys.stdout.flush(). U moet ook alle andere afdrukinstructies herschrijven in het bestand waarin u deze import uitvoert.

Of je kunt sys.stdout.write()

import sys
sys.stdout.write('.')

Misschien moet je ook bellen

sys.stdout.flush()

om ervoor te zorgen dat stdoutonmiddellijk wordt leeggemaakt.


Antwoord 2, autoriteit 10%

Voor Python 2 en eerder zou het zo eenvoudig moeten zijn als beschreven in Re: Hoe print je zonder een CR?door Guido van Rossum(geparafraseerd):

Is het mogelijk om iets af te drukken, maar niet automatisch een
wagenretour toegevoegd?

Ja, voeg een komma toe na het laatste argument om af te drukken. Deze lus drukt bijvoorbeeld de getallen 0..9 af op een regel gescheiden door spaties. Let op de parameterloze “print” die de laatste nieuwe regel toevoegt:

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

Antwoord 3, autoriteit 6%

Opmerking: de titel van deze vraag was vroeger zoiets als “Hoe printf in Python”

Aangezien mensen hier mogelijk naar op zoek zijn op basis van de titel, ondersteunt Python ook vervanging in printf-stijl:

>>> 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

En je kunt stringwaarden handig vermenigvuldigen:

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

Antwoord 4, autoriteit 3%

Gebruik de afdrukfunctie in Python 3-stijl voor Python 2.6+ (het verbreekt ook alle bestaande afdrukopdrachten met trefwoorden in hetzelfde bestand).

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

Om niet al uw Python 2-printsleutelwoorden te verpesten, maakt u een apart printf.py-bestand:

# printf.py
from __future__ import print_function
def printf(str, *args):
    print(str % args, end='')

Gebruik het dan in je bestand:

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

Meer voorbeelden van de printf-stijl:

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

Antwoord 5, autoriteit 2%

Hoe op dezelfde regel af te drukken:

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

Antwoord 6

De nieuwe (vanaf Python 3.x) printfunctie heeft een optionele endparameter waarmee je het eindteken kunt wijzigen:

print("HELLO", end="")
print("HELLO")

Uitvoer:

HELLOHELLO

Er is ook sepvoor het scheidingsteken:

print("HELLO", "HELLO", "HELLO", sep="")

Uitvoer:

HELLOHELLOHELLO

Als je dit in Python 2.x wilt gebruiken, voeg je dit toe aan het beginvan je bestand:

from __future__ import print_function

Antwoord 7

Gebruik functools.partialom een nieuwe functie te maken met de naam printf:

>>> import functools
>>> printf = functools.partial(print, end="")
>>> printf("Hello world\n")
Hello world

Het is een gemakkelijke manier om een functie met standaardparameters in te pakken.


Antwoord 8

U kunt gewoon ,toevoegen aan het einde van de print-functie, zodat deze niet op een nieuwe regel afdrukt.


9

in Python 3+, printis een functie. Wanneer u

belt

print('Hello, World!')

Python vertaalt het naar

print('Hello, World!', end='\n')

U kunt endwijzigen op wat u maar wilt.

print('Hello, World!', end='')
print('Hello, World!', end=' ')

10

Python 2.6 + :

from __future__ import print_function # needs to be first statement in file
print('.', end='')

Python 3 :

print('.', end='')

Python & lt; = 2.5 :

import sys
sys.stdout.write('.')

Als extra ruimte in orde is na elke afdruk, in Python 2:

print '.',

misleidend in Python 2 – vermijden :

print('.'), # Avoid this if you want to remain sane
# This makes it look like print is a function, but it is not.
# This is the `,` creating a tuple and the parentheses enclose an expression.
# To see the problem, try:
print('.', 'x'), # This will print `('.', 'x') `

11

U kunt het proberen:

import sys
import time
# Keeps the initial message in buffer.
sys.stdout.write("\rfoobar bar black sheep")
sys.stdout.flush()
# Wait 2 seconds
time.sleep(2)
# Replace the message with a new one.
sys.stdout.write("\r"+'hahahahaaa             ')
sys.stdout.flush()
# Finalize the new message by printing a return carriage.
sys.stdout.write('\n')

12

Ik heb onlangs hetzelfde probleem gehad …

Ik heb het opgelost door te doen:

import sys, os
# Reopen standard output with "newline=None".
# in this mode,
# Input:  accepts any newline character, outputs as '\n'
# Output: '\n' converts to os.linesep
sys.stdout = os.fdopen(sys.stdout.fileno(), "w", newline=None)
for i in range(1,10):
    print(i)

Dit werkt op zowel UNIX als Windows, maar ik heb het niet getest op Mac & NBSP; OS & NBSP; X.


13

U kunt hetzelfde doen in Python & NBSP; 3 als volgt:

#!usr/bin/python
i = 0
while i<10 :
    print('.', end='')
    i = i+1

en voer het uit met python filename.pyof python3 filename.py.


14

Veel van deze antwoorden lijken een beetje ingewikkeld. In Python 3.x doe je dit gewoon:

print(<expr>, <expr>, ..., <expr>, end=" ")

De standaardwaarde van het einde is "\n". We veranderen het gewoon in een ruimte of u kunt ook end=""(geen spatie) gebruiken om te doen wat printfnormaal doet.


15

Je wilt iets in de forlus rechts afdrukken; maar je wilt niet dat het elke keer in een nieuwe regel wordt afgedrukt…

Bijvoorbeeld:

for i in range (0,5):
   print "hi"
 OUTPUT:
    hi
    hi
    hi
    hi
    hi

Maar u wilt dat het als volgt wordt afgedrukt:
hoi hoi hoi hoi hoi goed????

Voeg gewoon een komma toe na het afdrukken van “hi”.

Voorbeeld:

for i in range (0,5):
    print "hi",

UITGANG:

hi hi hi hi hi

Antwoord 16

U zult merken dat alle bovenstaande antwoorden correct zijn. Maar ik wilde een snelkoppeling maken om aan het einde altijd de parameter ” end=” ” te schrijven.

Je zou een functie kunnen definiëren zoals

def Print(*args, sep='', end='', file=None, flush=False):
    print(*args, sep=sep, end=end, file=file, flush=flush)

Het zou alle parameters accepteren. Zelfs het accepteert alle andere parameters, zoals file, flush, etc. en met dezelfde naam.


Antwoord 17

for i in range(0, 5): #setting the value of (i) in the range 0 to 5 
     print(i)

De bovenstaande code geeft de volgende uitvoer:

0    
 1
 2
 3
 4

Maar als u al deze uitvoer in een rechte lijn wilt afdrukken, hoeft u alleen maar een attribuut genaamd end() toe te voegen om af te drukken.

for i in range(0, 5): #setting the value of (i) in the range 0 to 5 
     print(i, end=" ")

Uitvoer:

0 1 2 3 4

En niet alleen een spatie, je kunt ook andere uitgangen voor je uitvoer toevoegen. Bijvoorbeeld,

for i in range(0, 5): #setting the value of (i) in the range 0 to 5 
     print(i, end=", ")

Uitvoer:

0, 1, 2, 3, 4, 

Onthoud:

Note: The [for variable in range(int_1, int_2):] always prints till the variable is 1
 less than it's limit. (1 less than int_2)

Antwoord 18

Of een functie hebben zoals:

def Print(s):
    return sys.stdout.write(str(s))

Dan nu:

for i in range(10): # Or `xrange` for the Python 2 version
    Print(i)

Uitgangen:

0123456789

Antwoord 19

Over het algemeen zijn er twee manieren om dit te doen:

Afdrukken zonder een nieuwe regel in Python 3.x

Voeg niets toe na het printstatement en verwijder ‘\n’ met behulp van end='', als:

>>> print('hello')
hello  # Appending '\n' automatically
>>> print('world')
world # With previous '\n' world comes down
# The solution is:
>>> print('hello', end='');print(' world'); # End with anything like end='-' or end=" ", but not '\n'
hello world # It seems to be the correct output

Nog een voorbeeld in Loop:

for i in range(1,10):
    print(i, end='.')

Afdrukken zonder een nieuwe regel in Python 2.x

Toevoegen van een komma na het afdrukken zegt: negeer na het afdrukken \n.

>>> print "hello",; print" world"
hello world

Nog een voorbeeld in Loop:

for i in range(1,10):
    print "{} .".format(i),

Je kunt deze linkbezoeken.


Antwoord 20

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

Dit werkte in zowel 2.7.8 als in 2.5.2 (respectievelijk Enthought Canopyen OS X-terminal) — geen module-import of tijdreizen vereist.


Antwoord 21

U hoeft geen bibliotheek te importeren. Gebruik gewoon het verwijderteken:

BS = u'\0008' # The Unicode point for the "delete" character
for i in range(10):print(BS + "."),

Hiermee worden de nieuwe regel en de spatie (^_^)* verwijderd.

Other episodes