Ich möchte Code schreiben, mit dem ich ein Wort ausdrucken kann. Dann verschwindet es und das nächste Wort wird gedruckt. Wenn ich zum Beispiel "Hallo Welt!" Habe, sollte das Programm "Hallo" drucken, dann verschwindet das Wort und dann "Welt!" druckt und verschwindet dann. Ich sollte auch die Geschwindigkeit der Druckwörter ändern können. Derzeit konnte ich herausfinden, wie Zeichen mit einer bestimmten Geschwindigkeit gedruckt werden, aber wie drucke ich Wörter nacheinander?

import time
import sys

def print_char(s):
    for c in s:
        sys.stdout.write( '%s' % c )
        sys.stdout.flush()
        time.sleep(0.1)

print_char("hello world")
1
edboysega321 3 Dez. 2013 im 00:37

4 Antworten

Beste Antwort

Versuche dies:

#!/usr/bin/env python3

import sys
import time

data = "this is a sentence with some words".split()

max_len=max([len(w) for w in data])
pad = " "*max_len
for w in data:
    sys.stdout.write('%s\r' % pad)
    sys.stdout.write("%s\r" % w)
    sys.stdout.flush()
    time.sleep(0.4)

print

Beispiel, nur zum Spaß

enter image description here

3
Fredrik Pihl 2 Dez. 2013 im 22:36

Dies ist möglicherweise nicht das, wonach Sie suchen, und es ist möglicherweise nicht so schnell wie einige der anderen Antworten. Sie können jedoch Folgendes tun:

import time, os

text = "This is a long sentence that has a lot of words in it.".split()

for i in range(len(text)):
    os.system("clear")
    print(text[i])
    time.sleep(0.5)
    os.system("clear")

Dabei ist Text der Text, den Sie eingeben möchten, und time.sleep (XXX) ist die Zeit zwischen den angezeigten Wörtern.

0
C. Shea 11 Sept. 2017 im 20:10

Wenn words eine Liste von Zeichenfolgen ist:

def print_char(words):
    for s in words:
        for c in s:
            sys.stdout.write('%s' %c)
            sys.stdout.flush()
            time.sleep(0.1)
        # erase the word
        sys.stdout.write('\b'*len(s))  # backspace the cursor
        sys.stdout.write(' '*len(s))  # overwrite with spaces
        sys.stdout.write('\b'*len(s))  # backspace again, to write the next word
0
inspectorG4dget 2 Dez. 2013 im 20:51

Basierend auf der Antwort auf diese Frage:

Entfernen Sie die letzte STDOUT-Zeile in Python

Sie können so etwas tun:

import time
import sys

CURSER_UP_ONE = '\x1b[1A'
ERASE_LINE = '\x1b[2K'

def delay_print(sentence, pause_between_words):
    for s in sentence.split(" "):
        sys.stdout.write( '%s' % s)
        sys.stdout.flush()
        time.sleep(pause_between_words)
        print(ERASE_LINE + CURSER_UP_ONE)

delay_print("Hello World!", 0.5)

Dieser Code druckt jeweils ein Wort in meinem Terminal, entfernt das letzte Wort und druckt das nächste. Das letzte Wort wird kurz vor der Kündigung gelöscht. Soll das so funktionieren? Sonst lass es mich wissen.

BEARBEITEN: Es wurde festgestellt, dass Sie auch eine Verzögerung zwischen den einzelnen Zeichendrucken wünschen. Habe meinen Code entsprechend aktualisiert.

BEARBEITEN: Aufgrund Ihres Kommentars habe ich char durch char print entfernt.

0
Community 23 Mai 2017 im 10:31