0

我正在寻找使用 python 做一种文本动画。如果您使用过 Metasploit,在加载过程中会出现一波文本示例:First first first first First First firsT(所有这些都将在同一行)我正在考虑使用 sys.stdout.write("") 但我不能在大写后用小写替换我放置的最后一个符号。

# This version is fixed and works
import sys, time
lowerstr = "buffering"
upperstr = lowerstr.upper()
for x in range(len(lowerstr)):
     s = '\r' + lowerstr[0:x] + upperstr[x] + lowerstr[x+1:] + '\r'
     sys.stdout.write(s)
     sys.stdout.flush()
     time.sleep(0.1)
4

4 回答 4

1
import sys
import time

data = ["b","u","f","f","e","r","i","n","g"]

# display with one upper char

for x in range(len(data)):
    # remeber lower char
    old = data[x]

    # replace with upper char
    data[x] = old.upper()

    # create full text
    text = "".join(data)

    # display full text
    sys.stdout.write("\r")
    sys.stdout.write(text)
    sys.stdout.flush()

    # put back lower char
    data[x] = old

    time.sleep(1)

# display without upper chars at the end 

text = "".join(data)

sys.stdout.write("\r")
sys.stdout.write(text)
sys.stdout.flush()

data如果你把额外的字符放在没有更高版本的末尾- 即。空字符串""- 那么你不需要for循环后的代码。

您也可以在开始时放置空字符串以显示不带大写字符的第一个文本。

import sys
import time

# text with extra chars at the start and at the end
data = ["", "b","u","f","f","e","r","i","n","g", ""]

# display with one upper char

for x in range(len(data)):
    # remeber lower char
    old = data[x]

    # replace with upper char
    data[x] = old.upper()

    # create full text
    text = "".join(data)

    # display full text
    sys.stdout.write("\r")
    sys.stdout.write(text)
    sys.stdout.flush()

    # put back lower char
    data[x] = old

    time.sleep(1)
于 2017-01-23T21:12:17.063 回答
0

使用 ios pythonista 场景实现这个动画

import scene

label_text = 'abcdefghijklmnopqrstuvwxyz'

def custom_action(node, progress):
    ntext = node.text
    i = int(len(ntext)*progress)
    iminus1txt = ntext[i-1].lower() if i > 0 else ''
    ithtxt = ntext[i].capitalize() if i < len(ntext) else ''
    if i > 0:
        before_i = ntext[:(i-1)]
    else:
        before_i = ''
    if i < len(ntext):
        node.text = before_i+iminus1txt+ithtxt+ntext[(i+1):]
    else:
        node.text = label_text

class TextCapitalAnimate(scene.Scene):
    def setup(self):
        center = self.bounds.center()
        labelnode = scene.LabelNode(label_text, font=('Courier', 20),
                                position=center, parent=self)
        A = scene.Action
        animate_action = A.repeat(A.call(custom_action, 2), 0)
        labelnode.run_action(animate_action)

scene.run(TextCapitalAnimate())
于 2017-01-25T04:21:14.393 回答
0

这个版本结合了字符串,而不是仅仅迭代每个字符。您可以upperstr通过.upper()在适当的字符上使用来完全取消。请注意,您不应将list其用作变量名,因为它是 Python 内置的。

import sys
import time

lowerstr = "buffering"
upperstr = lowerstr.upper()
for x in range (len(lowerstr)):
    s = lowerstr[0:x] + upperstr[x] + lowerstr[x+1:] + '\r'
    sys.stdout.write(s)
    sys.stdout.flush()
    time.sleep(1)
于 2017-01-23T21:16:27.700 回答
0
import time
import sys

string = input(str('Enter text : '))
list = []
for x in string:
 list.append(x)

while True:
 for x in range(len(list)):
  old = list[x]
  list[x] = old.upper()
  final = "".join(list)
  sys.stdout.write('\r')
  sys.stdout.write(final)
  sys.stdout.flush()
  list[x] = old
  time.sleep(0.1)
于 2020-06-17T18:13:16.623 回答