设计一个可以选择滚动方向,滚动速度的实现字幕滚动功能的程序。本程序是基于一些类似的程序的扩展和修改。
滚动的实现(核心):
- 将字幕作为列表做切片操作,切头补尾即可实现左滚,切尾补头实现右滚
- 使用回车操作 \r 符实现清除屏幕的效果
关于回车和换行符的理解推荐两篇文章:
https://www.cnblogs.com/zzliu/p/10156658.html
https://www.cnblogs.com/yc3110/p/10809564.html
程序代码:
def roll_titles():
import time
adv = input("请输入一段广告语:")
# 获取滚动方向
while 1:
fx = input("请输入滚动的方向(L/R)").upper() # .upper()转换为大写
if fx in ['L', 'R']:
break
print("您的输入有误,请重新输入!")
# 获取滚动速度
while 1:
sd = input("请输入滚动的速度(请输入一个整数,值越大,滚动速度越快):")
if sd.isnumeric():
break
print("您的输入有误,请重新输入!")
# 产生滚动效果
if fx == 'R': # 右滚
adv = adv[1:] + adv[0] # 这样先反向左移一位,使得第一个显示的句子是正常的,否则第一个字已经被移到最后了
while 1:
adv = adv[-1] + adv[:-1] # 切尾补头 实现右滚
print('\r' + adv, end=' ') # 回车操作实现刷新显示
# 原计划使用os.system('cls'),但是不起作用,最后在网上找到了上述方法
time.sleep(1 / (int(sd))) # 这种写法使得sd值越大,滚动速度越快
if fx == 'L': # 左滚
adv = adv[-1] + adv[:-1] # 先反向右右移一位
while 1:
adv = adv[1:] + adv[0] # 切头补尾 实现左滚
print('\r' + adv, end=' ')
time.sleep(1 / (int(sd)))
if __name__ == '__main__':
roll_titles()
左滚演示:速度为1(换算后就是暂停显示1秒)
右滚演示:速度为3(暂停显示0.333秒),控制台窗口这个刷新率有点低,看起来跟掉帧一样