time.sleep() verhindert die Ausgabe von print()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
edloaa

Hallo,

Ich will mit dem folgendem Code ein "Hallo Welt!" so ausgeben, dass es aussieht als würde der Text getippt werden. Hierzu erstelle ich aus dem "Hallo Welt!"-String eine Liste. Jedes Zeichen lasse ich anschließend einzelnd und ohne Zeilenumbruch ausgeben. Im ersten Beispiel scheint time.sleep(.2) jedoch die Ausgabe der einzelnen Buchstaben zu verhindern. Erst nachdem die for-Schleife vollständig durchgelaufen ist, wird das "Hallo Welt!" ausgegeben. :?

Anscheinend hat dieses Problem mit dem Parameter end='' zu tun. Ohne diesem funktioniert die Ausgabe, so wie gewünscht. Allerdings wird hier natürlich jedes mal ein Zeilenumbruch mit ausgegeben, was aber verhindert werden soll.

Code: Alles auswählen

#!/usr/bin/env python

import time

for char in list('Hallo Welt!'):
    print(char, end='') # mit end='' wird das "Hallo Welt!" erst nach dem Durchlauf der for-Schleife ausgegeben!
    time.sleep(.2)

print()

Code: Alles auswählen

#!/usr/bin/env python

import time

for char in list('Hallo Welt!'):
    print(char) # ohne end='' als Parameter werden die einzelnen Buchstaben ausgegeben!
    time.sleep(.2)

print()
Ich verwende übrigens Python 3.2.3. Für jede Hilfe oder Idee bin ich dankbar! :)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Wahrscheinlich bleibt das Zeichen irgendwo im Buffer hängen, packe hinter das print in der Schleife einfach mal ein

Code: Alles auswählen

sys.stdout.flush()
Du solltest natürlich nicht vergessen auch das sys-Modul zu importieren.

Außerdem ist der Aufruf von list bei dir überflüssig.

Sebastian
Das Leben ist wie ein Tennisball.
edloaa

Wow, eine so schnelle Antwort hatte ich nicht erwartet! :D

Ja, mit sys.stdout.flush() und ohne list() funktioniert es! Danke!
Antworten