2017-01-23 99 views
0

我正在寻找使用python做文本动画的类型。 如果你已经使用Metasploit的,在加载过程中的文本的浪潮出现 例子: 首先 第一 第一 第一 第一 (这一切将在同一条线路) 我用sys.stdout的思维的东西.write(“”),但我不能替换 我放下的最后一个符号,它是大写后的小写字母。Python大写和非大写动画

# 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) 
+0

这似乎是你身边正在寻找什么http://stackoverflow.com/questions/2122385/dynamic-terminal-printing-with- python – nerdlyist

+0

我改变了下面的脚本,并添加了“\ r”来乞求并修复它,以便它可以做我想要的,谢谢你们的帮助! s ='\ r'+ lowerstr [0:x] + upperstr [x] + lowerstr [x + 1:] +'\ r' – RoNAPC

+0

更新的更改问题!在最后添加修改。现在没有人会知道代码中的oryginal代码和oryginal问题是什么。 – furas

回答

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) 
0

这个版本结合了字符串,而不是仅仅遍历每个字符。您可以通过在相应的字符上使用.upper()完全消除upperstr。请注意,不应将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) 
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())