367 Stimmen

Dynamischer Druck in einer Zeile

Ich möchte mehrere Anweisungen erstellen, die eine Standardausgabe erzeugen, ohne dass zwischen den Anweisungen Zeilenumbrüche auftreten.

Konkret: Nehmen wir an, ich habe:

for item in range(1,100):
    print item

Das Ergebnis ist:

1
2
3
4
.
.
.

Wie kann dies stattdessen aussehen?

1 2 3 4 5 ...

Noch besser: Ist es möglich, die einzelne Nummer zu drucken über die letzte Zahl, so dass immer nur eine Zahl auf dem Bildschirm zu sehen ist?

2voto

Adnan Ghaffar Punkte 1315

Für Python 2.7

for x in range(0, 3):
    print x,

für Python 3

for x in range(0, 3):
    print(x, end=" ")

1voto

eruciform Punkte 7508

Ein Komma am Ende der Druckanweisung lässt die neue Zeile weg.

for i in xrange(1,100):
  print i,

aber das überschreibt nicht.

1voto

gtrak Punkte 5485
In [9]: print?
Type:           builtin_function_or_method
Base Class:     <type 'builtin_function_or_method'>
String Form:    <built-in function print>
Namespace:      Python builtin
Docstring:
    print(value, ..., sep=' ', end='\n', file=sys.stdout)

Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep:  string inserted between values, default a space.
end:  string appended after the last value, default a newline.

0voto

vitiral Punkte 7119

Der beste Weg, dies zu erreichen, ist die Verwendung der \r Zeichen

Probieren Sie einfach den folgenden Code aus:

import time
for n in range(500):
  print(n, end='\r')
  time.sleep(0.01)
print()  # start new line so most recently printed number stays

0voto

Mahmoud Kassem Punkte 53

Wenn Sie nur die Zahlen ausdrucken wollen, können Sie die Schleife vermeiden:

# python 3
import time

startnumber = 1
endnumber = 100

# solution A without a for loop
start_time = time.clock()
m = map(str, range(startnumber, endnumber + 1))
print(' '.join(m))
end_time = time.clock()
timetaken = (end_time - start_time) * 1000
print('took {0}ms\n'.format(timetaken))

# solution B: with a for loop
start_time = time.clock()
for i in range(startnumber, endnumber + 1):
    print(i, end=' ')
end_time = time.clock()
timetaken = (end_time - start_time) * 1000
print('\ntook {0}ms\n'.format(timetaken))

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
took 21.1986929975ms

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 
took 491.466823551ms

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X