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) = x)
    Early Pause Speeds up (f(x) = x+(1-sin(x*π*2+π/2)/-8)
    Late Pause Slows down (f(x) = x+(1-sin(x*π*2+π/2)/8)
    Slow Wavy Constant (f(x) = x+(1-sin(x*π*2+π/2)/8)
    Fast Wavy Constant (f(x) = x+(1-sin(x*π*2+π/2)/8)
    Power Speeds up (f(x) = {(x+(1-x)*0.03)}^2)
    Inverse Power Slows down (f(x) =1+{(1-x)}^{1.5}*-1)
    Fast Power Speeds up (f(x) = {(x+(1-x)/2)}^8)
    Inverse Fast Power Slows down (f(x) = 1+{(1-x)}^3*-1)
  • 相关阅读:
    HYSBZ 3813 奇数国
    HYSBZ 4419 发微博
    HYSBZ 1079 着色方案
    HYSBZ 3506 排序机械臂
    HYSBZ 3224 Tyvj 1728 普通平衡树
    Unity 3D,地形属性
    nginx 的naginx 种包含include关键字
    Redis 出现NOAUTH Authentication required解决方案
    mysql 8.0出现 Public Key Retrieval is not allowed
    修改jar包里的源码时候需要注意的问题
  • 原文地址:https://www.cnblogs.com/nickchen121/p/11183608.html
Copyright © 2011-2022 走看看