#!/usr/bin/python3
# -*- coding:utf-8 -*-
"""
python控制台倒计时
"""
__author__ = "river.yang"
__date__ = "2022/11/26 20:20"
__version__ = "1.0.0"
from time import sleep
from datetime import datetime, timedelta
import time
def count_down(weeks=0, days=0, hours=0, minutes=0, seconds=0):
remain_time = timedelta(weeks=weeks, days=days, hours=hours, minutes=minutes, seconds=seconds)
while remain_time.total_seconds() > 0:
time.sleep(1)
remain_time -= timedelta(seconds=1)
print("\r 倒计时:{}".format(remain_time), end="", flush=True)
def print_test():
for i in range(20):
print("#", end="", flush=True)
sleep(0.1)
if __name__ == '__main__':
print("当前版本: ", __version__)
count_down(seconds=11)
代码解析:
这里主要用到了print函数的几个参数,解释如下:
参数1:end,设置字符串末尾的字符,默认是"/n"换行符,这里赋值"",也就是什么也不加,就不会自动换行
参数2:flush,设置是否清除显示,默认是False,赋值True避免出现重影等显示问题
另外,这里在输出倒计时前,加了"/r"字符,意思是将光标定位到行首进行输出显示
输出效果如下:
def circle_print(total_time=0):
list_circle = ["\\", "|", "/", "—"]
for i in range(total_time * 4):
time.sleep(0.25)
print("\r{}".format(list_circle[i % 4]), end="", flush=True)
输出效果如下:
def print_test():
for i in range(20):
print("#", end="", flush=True)
sleep(0.1)
效果如下:
这里需要依赖第三方库,使用指令安装:pip3 install tqdm
# -*- coding=utf-8 -*-
import time
from tqdm import tqdm
for i in tqdm(range(100)):
time.sleep(0.1)
** 输出效果如下:**
上面的进度条要依赖第三方库,不方便移植程序,用着着实不爽,所以干脆自己实现一个方便移植
#!/usr/bin/python3
# -*- coding:utf-8 -*-
"""
python控制台进度打印
"""
__author__ = "river.yang"
__date__ = "2022/11/26 20:20"
__version__ = "1.0.0"
import time
def del_progress():
time.sleep(0.2)
def progress_print(total_cnt=20, index_cha='+', pro_total_cnt=50, fun=None):
"""
:param total_cnt: 总循环次数
:param index_cha: 进度指示符号,可以任意替换喜欢的符号
:param pro_total_cnt: 100%进度显示的总符号个数
:param fun: 每次进度循环处理的回调函数
"""
start_time = time.time()
for i in range(total_cnt):
current_cnt = int((i + 1) / total_cnt * pro_total_cnt)
str_progress = index_cha * current_cnt + ' ' * (pro_total_cnt - current_cnt)
spend_time = time.time() - start_time
print("\033[31m\r{:.1%} [{}] total time: {:.2f}s\033[0m".format((i + 1) / total_cnt, str_progress, spend_time),
end="", flush=True)
if fun is not None:
fun()
if __name__ == '__main__':
print("当前版本: ", __version__)
progress_print(fun=del_progress)
输出效果如下:
代码解析
这里用到了几个知识点
\033[前景色m******\033[0m
# 这里****为打印显示的内容
\033[显示方式; 前景色; 背景色m******\033[0m
其中显示方式和颜色如下表
显示方式 | 显示效果 |
---|---|
0 | 默认值 |
1 | 高亮(加粗) |
4 | 下划线 |
5 | 闪烁 |
7 | 反显 |
8 | 不可见 |
前景色 | 背景色 | 颜色说明 |
---|---|---|
30 | 40 | 黑色 |
31 | 41 | 红色 |
32 | 42 | 绿色 |
33 | 43 | 黄色 |
34 | 44 | 蓝色 |
35 | 45 | 紫红色 |
36 | 46 | 青蓝色 |
37 | 47 | 白色 |
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | +3.14 | 带符号保留小数点后两位 |
-1 | {:-.2f} | -1.00 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零 (填充左边, 宽度为2) |
5 | {:x<4d} | 5xxx | 数字补x (填充右边, 宽度为4) |
10 | {:x<4d} | 10xx | 数字补x (填充右边, 宽度为4) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指数记法 |
13 | {:>10d} | 13 | 右对齐 (默认, 宽度为10) |
13 | {:<10d} | 13 | 左对齐 (宽度为10) |
13 | {:^10d} | 13 | 中间对齐 (宽度为10) |
11 | ‘{:b}’.format(11) ‘{:d}’.format(11) ‘{:\o}’.format(11) ‘{:x}’.format(11) ‘{:#x}’.format(11) ‘{:#X}’.format(11) |
1011 11 13 b 0xb 0XB |
进制 |
^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格
b、d、o、x 分别是二进制、十进制、八进制、十六进制。
此外我们可以使用大括号 {} 来转义大括号
·
·
·
欢迎各位老铁一键三连,本号后续会不断更新树莓派、人工智能、STM32、ROS小车相关文章和知识。
大家对感兴趣的知识点可以在文章下面留言,我可以优先帮大家讲解哦
欢迎大家光临我的淘宝小店【玩转智能机器人】,会定期推出教程中使用的物美价优的硬件,你的光临就是对我的支持
原创不易,转载请说明出处。