Seite 1 von 1
Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 15:32
von Py-Prog
Die Konsole gibt den Text immer sofort aus, aber wenn man den Quellcode mit einem Bösen * import importiert kann die Konsole wie eine Schreibmaschine schreiben.
Code: Alles auswählen
import os
import time
echo=print
outputtext=''
speed=0.01
def print(text, end='\n'):
global outputtext
for char in text:
os.system('cls')
echo(outputtext)
outputtext+=char
time.sleep(speed)
outputtext+=end
Re: Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 15:59
von Xynon1
Ja, sehr nett <-- Vorsicht Sarkasmus.
- Warum hast du da ein "global" drin?
- Wieso schon wieder "os.system" ?
- "cls" - geht bei mir nicht

, warum ?
- Wozu musste man print zu echo machen und sich damit die Kompatiblität zu Python 2.x nehmen?
- Und wieso konnte man sich bei so einen kleinen Script nicht an die PEP8 halten ?
- Und warum flimmert dann so eine Konsole durch die gegend, wenn "cls" dann doch mal geht und ich "print" in einer Python-Shell aufrufe.
Ich bin echt überfragt.

Re: Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 16:01
von derdon
So würde ich es machen:
Code: Alles auswählen
>>> from sys import stdout
>>> from time import sleep
>>> text = 'Das ist ein wenig Text, der wie bei einer Schreibmaschine ausgegeben wird'
>>> for char in text:
... stdout.write(char)
... stdout.flush()
... sleep(0.1)
...
Das ist ein wenig Text, der wie bei einer Schreibmaschine ausgegeben wird>>>
Re: Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 16:10
von Xynon1
@derdon
Ich glaube deine bessere Darstellung des Scripts, war schneller geschrieben, als die Punkte die ich oben bemängelt habe.
@Py-Prog
Wieso musste das sein, du solltest es doch mittlerweile besser wissen. Schau dir bitte nochmal genau an was du da eigentlich gemacht hast.
Re: Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 16:14
von Py-Prog
Xynon1 hat geschrieben:Ja, sehr nett <-- Vorsicht Sarkasmus.
- Warum hast du da ein "global" drin?
- Wieso schon wieder "os.system" ?
- "cls" - geht bei mir nicht

, warum ?
- Wozu musste man print zu echo machen und sich damit die Kompatiblität zu Python 2.x nehmen?
- Und wieso konnte man sich bei so einen kleinen Script nicht an die PEP8 halten ?
- Und warum flimmert dann so eine Konsole durch die gegend, wenn "cls" dann doch mal geht und ich "print" in einer Python-Shell aufrufe.
Ich bin echt überfragt.

Wieso hab ich wohl ein global drin? DESWEGEN:
Traceback (most recent call last):
...
UnboundLocalError: local variable 'outputtext' referenced before assignment
@Xynon1 ich finde nirgends vernünftige Tuturials. Und nur weil man etwas anders/besser machen kann heißt das noch lange nicht dass das vorherige falsch war.
(Und es ist ja auch nicht so das man alles was es an befehlen gibt schon mal gebraucht haben muss, und sich deshalb damit nicht auseinander gesetzt hat.)
Re: Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 16:20
von derdon
Hab einfach mal so aus Spaß noch eine rekursive Lösung geschrieben
Code: Alles auswählen
>>> def typewriter(text, speed):
... if text:
... stdout.write(text[0])
... stdout.flush()
... sleep(speed)
... typewriter(text[1:], speed)
...
>>> typewriter(text, 0.2)
Das ist ein wenig Text, der wie bei einer Schreibmaschine ausgegeben wird>>>
Hinweis: nicht ernst nehmen oder ernsthaft einsetzen.
Re: Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 16:27
von Py-Prog
DEMÜTIGEND!!!
Re: Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 16:39
von Xynon1
@Py-Prog
Mir ging es darum, das man auch bei solchen kleinen Scripten aufpassen muss, was man dort eigentlich tut. zB. Nutzt du os.system("cls"), das sperrt den Script schon mal fast für jedes OS. Das "echo=print" sperrt weiterhin die Python Versionen < 3.x.
Du nimmst der Sprache die Plattform unabhängigkeit, was für mich sehr wohl "falsch" und nicht einfach nur anders gelöst ist.
Und ich hab gleich mal wieder ein Brainfuk Programm dafür geschrieben

, allerdings hängt es extrem vom Speed des Debuggers

und des Rechners ab, mit meinem Brainfuck-Debugger geht es einigermaßen. Um es langsamer zu machen einfach ein paar "+" hinzufügen.
^-- Die Sprache macht echt Spaß.
Re: Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 17:02
von Py-Prog
Python ist aber nicht ganz Plattform unabhängig: Was machst du wenn ein Programm ein
except WindowsError:
enthält?
Re: Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 17:13
von Xynon1
Was soll dann sein?
Wenn ich kein Windows nutze wird die Exception auch nie geworfen.
Re: Texte in Konsole langsam schreiben.
Verfasst: Donnerstag 10. Februar 2011, 18:35
von Leonidas
Warum mutierst du auch eine modulglobale Variable? Das scheitert doch spätestens wenn man es in zwei Threads gleichzeitig aufruft.