2022(秋)实验二:动态进度条

计212黄勇捷 2022-11-20 20:45:57

1、实验目的

  • 了解动态进度条的原理;
  • 掌握如何编写完整的模块。

2、实验内容

本实验将使用Python3 实现命令行中的动态进度条,并且能被其它程序调用,为程序执行任务的进度提供直观的展示。

3、实验知识点

  • 进度条原理;
  • 输出缓冲区;
  • 类。

4、实验环境

    pycharm

5、实验过程

1、新建一个文件progressbar.py。为了让代码具有通用性,编写一个类ShowProcess。

# -*- coding: UTF-8 -*-
 
import sys
 
import time
 
'''
显示处理进度的类
调用该类相关函数即可实现处理进度的显示
'''
 
class ShowProcess():
 
….

2、定义一个全局变量,即进度条的长度。此时定义50个字符的长度,用max_arrow表示。还要记录进度条当前是第几个,用i表示。

   # 进度条长度
 
    max_arrow = 50
 
    i = 0
 
# 定义构造函数。这些参数根据场景的不同参数值也不同。
 
    # 初始化函数
 
    def __init__(self, max_steps=100, bar_char = '#', info_done = 'Done'):
 
        self.max_steps = max_steps
 
        self.bar_char = bar_char
 
        self.info_done = info_done

 3.max_steps表示一共有多少个任务。比如要下载2000幅图片,max_steps为2000。bar_char表示进度条用什么符号表示。#相对好看一些。info_done表示进度条到了100%后,输出什么信息。比如说出OK或者Done或者下载完成。

    # 显示函数,根据当前的处理进度i显示进度
 
    # 效果为[##################################################] 100.00%
 
    def show_process(self, message = ''):
 
        self.i += 1
 
        num_arrow = int(self.i * self.max_arrow / self.max_steps) #计算显示多少个符号
 
        num_line = self.max_arrow - num_arrow #计算显示多少个'-'
 
        percent = self.i * 100.0 / self.max_steps #计算完成进度,格式为xx.xx%
 
        process_bar = '[' + self.bar_char * num_arrow + '-' * num_line + ']'\
 
                      + ' %.2f' % percent + '% ' + message + '\r' #带输出的字符串,'\r'表示不换行回到最左边
 
        sys.stdout.write(process_bar) #这两句打印字符到终端
 
        sys.stdout.flush()
 
        if self.i >= self.max_steps:
 
            self.close()
 
 
 
    def close(self):
 
        print('')
 
        print(self.info_done)
 
        self.i = 0

4、show_process方法中的message意思是进度条执行的过程中在右边显示什么信息,最后调用。

if __name__=='__main__':
 
    max_steps = 150
 
    process_bar = ShowProcess(max_steps, '#', 'OK')
 
    for i in range(max_steps):
 
        message = 'downloading image_%d.jpg...' %(i+1)
 
        process_bar.show_process(message)
 
        time.sleep(0.5)

5.完整代码:

# -*- coding: UTF-8 -*-
import sys
import time
class ShowProcess():
    max_arrow = 50
    i = 0
    def __init__(self, max_steps=100, bar_char='#', info_done='Done'):
        self.max_steps = max_steps
        self.bar_char = bar_char
        self.info_done = info_done
    # 显示函数,根据当前的处理进度i显示进度
    # 效果为[##################################################] 100.00%
    def show_process(self, message=''):
        self.i += 1
        num_arrow = int(self.i * self.max_arrow / self.max_steps)  # 计算显示多少个符号
        num_line = self.max_arrow - num_arrow  # 计算显示多少个'-'
        percent = self.i * 100.0 / self.max_steps  # 计算完成进度,格式为xx.xx%
        process_bar = '[' + self.bar_char * num_arrow + '-' * num_line + ']' \
                      + ' %.2f' % percent + '% ' + message + '\r'  # 带输出的字符串,'\r'表示不换行回到最左边
        sys.stdout.write(process_bar)  # 这两句打印字符到终端
        sys.stdout.flush()
        if self.i >= self.max_steps:
           self.close()
    def close(self):
        print('')
        print(self.info_done)
        self.i = 0
if __name__ == '__main__':
    max_steps = 150
    process_bar = ShowProcess(max_steps, '#', 'OK')
    for i in range(max_steps):
        message = 'downloading image_%d.jpg...' % (i + 1)
        process_bar.show_process(message)
        time.sleep(0.5)

6、实验总结

       通过本实验了解了命令行动态进度条的原理,并自己编写了一个完整的模块,加深了对输出缓冲区、可变参数列表、面向对象编程的理解。了解了一些关于python类的定义描述以及类的调用,类能让代卖具有通用性,了解了动态进度条的原理,python 中的标准输入输出默认是使用行缓冲的。

 

...全文
159 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_42150329 2022-11-21
  • 打赏
  • 举报
回复

这边有专业团队给您提供申请专利的方案开发,专家给您布局,薇newcharacters】积极思考造成积极人生,消极思考造消极人生

163

社区成员

发帖
与我相关
我的任务
社区描述
软件工程老师
python 高校 江苏省·南通市
社区管理员
  • juking@ntu
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧