zoukankan      html  css  js  c++  java
  • 020 实例4-文本进度条

    一、"文本进度条"问题分析

    1.1 文本进度条

    用过计算机的都见过

    • 进度条什么原理呢?

    020-实例4-文本进度条-01.jpg?x-oss-process=style/watermark

    1.2 需求分析

    • 采用字符串方式打印可以动态变化的文本进度条
    • 进度条需要能在一行中逐渐变化

    1.3 问题分析

    如何获得文本进度条的变化时间?

    • 采用sleep()模拟一个持续的进度
    • 似乎不那么难

    二、"文本进度条"简单的开始

    2.1 简单的开始

    # TextProBarV1.py
    
    import time
    
    scale = 10
    print("------执行开始------")
    for i in range(scale + 1):
        a = '*' * i
        b = '.' * (scale - i)
        c = (i / scale) * 100
        print("{:^3.0f}%[{}->{}]".format(c, a, b))
        time.sleep(0.1)
    print("------执行结束------")
    
    ------执行开始------
     0 %[->..........]
    10 %[*->.........]
    20 %[**->........]
    30 %[***->.......]
    40 %[****->......]
    50 %[*****->.....]
    60 %[******->....]
    70 %[*******->...]
    80 %[********->..]
    90 %[*********->.]
    100%[**********->]
    ------执行结束------
    

    三、"文本进度条"单行动态刷新

    3.1 单行动态刷新

    刷新的关键是

    • 刷新的本质是:用后打印的字符覆盖之前的字符
    • 不能换行:print()需要被控制
    • 要能回退:打印后光标退回到之前的位置

    注意:IDLE如Pycharm屏蔽了 功能

    # TextProBarV2.py
    
    import time
    
    for i in range(101):
        print("
    {:3}%".format(i), end="")
        time.sleep(0.1)
    
    100%
    

    四、"文本进度条"实例完整效果

    # TextProBarV3.py
    
    import time
    
    scale = 10
    print("执行开始".center(scale // 2, "-"))
    start = time.perf_counter()
    for i in range(scale + 1):
        a = '*' * i
        b = '.' * (scale - i)
        c = (i / scale) * 100
        dur = time.perf_counter() - start
        print("
    {:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, dur), end='')
        time.sleep(0.1)
    print("
    " + "执行结束".center(scale // 2, '-'))
    
    -执行开始
    100%[**********->]1.03s
    -执行结束
    

    五、"文本进度条"举一反三

    5.1 举一反三

    计算问题扩展

    • 文本进度条程序使用了perf_counter()计时
    • 计时方法适合各类需要统计时间的计算问题
    • 例如:比较不同算法时间、统计部分程序运行时间

    进度条应用

    • 在任何运行时间需要较长的程序中增加进度条
    • 在任何希望提高用户体验的应用中增加进度条
    • 进度条是人机交互的纽带之

    020-实例4-文本进度条-02.jpg?x-oss-process=style/watermark

    文本进度条的不同设计函数

    设计名称趋势设计函数
    Linear Constant f(x)=xf(x)=x
    Early Pause Speeds up f(x)=x+(1sin(xπ2+π/2)/8f(x)=x+(1−sin(x∗π∗2+π/2)/−8
    Late Pause Slows down f(x)=x+(1sin(xπ2+π/2)/8f(x)=x+(1−sin(x∗π∗2+π/2)/8
    Slow Wavy Constant f(x)=x+(1sin(xπ2+π/2)/8f(x)=x+(1−sin(x∗π∗2+π/2)/8
    Fast Wavy Constant f(x)=x+(1sin(xπ2+π/2)/8f(x)=x+(1−sin(x∗π∗2+π/2)/8
    Power Speeds up f(x)=(x+(1x)0.03)2f(x)=(x+(1−x)∗0.03)2
    Inverse Power Slows down f(x)=1+(1x)1.51f(x)=1+(1−x)1.5∗−1
    Fast Power Speeds up f(x)=(x+(1x)/2)8f(x)=(x+(1−x)/2)8
    Inverse Fast Power Slows down f(x)=1+(1x)31f(x)=1+(1−x)3∗−1
  • 相关阅读:
    CSS
    171 Excel Sheet Column Number
    设计模式之组合模式
    设计模式之外观模式
    设计模式之装饰者模式
    设计模式之抽象工厂
    设计模式之工厂方法
    23种设计模式和7大原则-开篇
    设计模式之简单工厂
    每天一个Linux命令:locate(19)
  • 原文地址:https://www.cnblogs.com/abdm-989/p/14129663.html
Copyright © 2011-2022 走看看