Texte in Konsole langsam schreiben.

Code-Stücke können hier veröffentlicht werden.
Antworten
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

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
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ja, sehr nett <-- Vorsicht Sarkasmus.

- Warum hast du da ein "global" drin?
- Wieso schon wieder "os.system" ?
- "cls" - geht bei mir nicht :cry:, 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. :?:
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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>>>
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@derdon
Ich glaube deine bessere Darstellung des Scripts, war schneller geschrieben, als die Punkte die ich oben bemängelt habe. :wink:

@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.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

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 :cry:, 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.)
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Hab einfach mal so aus Spaß noch eine rekursive Lösung geschrieben :P

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.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

DEMÜTIGEND!!!
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@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 :mrgreen:, 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.

Code: Alles auswählen

,[>+++++++[>+++++++[>+++++++<-]<-]<.,]
^-- Die Sprache macht echt Spaß.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Python ist aber nicht ganz Plattform unabhängig: Was machst du wenn ein Programm ein
except WindowsError:
enthält?
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Was soll dann sein?
Wenn ich kein Windows nutze wird die Exception auch nie geworfen.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Warum mutierst du auch eine modulglobale Variable? Das scheitert doch spätestens wenn man es in zwei Threads gleichzeitig aufruft.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten