经过自己一段时间的学习,已经略有收获了!在整个过程的进行中,在我逐渐通过看书,看案例,做题积累了一些编程python的经验以后,我发现我渐渐爱上了python,爱上了编程!

接下来,当然是又一些有趣的实验案例:文本进度条的制作和π的计算!

**文本进度条

相信大家都玩过游戏吧,面对加载的游戏数据,我们可能会遇到这样一种情况:网络卡顿的时候,进度条缓缓移动却迟迟不能加载完全,实在是消磨人们的耐心(狗头)

在我们的印象中,进度条应该是一个条状方块,随着时间的推移慢慢向前移动,直至数据加载完成!

那么,要怎么用python来实现呢??

我们有一些不同的形式呢~

一·、最简单的一种

基本思想:

这是一种简单的,按照任务执行的百分比将整个任务划分为100个单位,每执行N%输出一次进度条;每行输出包括进度百分比,代表已完成的部分(**)和未完成的部分(..)的两种字符,以及一个跟随完成度前进的小箭头:

类似于这样:%10{******->..................................................}

代码:

接下来,就来展示一下实现上面这个指令的python代码要怎么写吧~

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

显然我们从这几行代码中可以看出,代码调用了python中的time库,这是标准时间库;

由于程序的执行速度远超人类的视觉停留时间,直接进行字符输出几乎是瞬间完成,所以我们采用了time库中的time.sleep(t)函数来将当前的程序暂时挂起 t 秒,以便人眼能够捕捉到程序进行的细节;

我们可以再IDLE环境下看到它的运行效果:

(将代码打入IDLE环境中)

(一行行根据0.1秒的间隔输出出来)

是不是很酷呢?

二、单行动态刷新

基本思想:

我们一般见到的进度条都是在一行上刷新操作的,所以,我们运用动态刷新的思想,将每一次进度输出都固定在同一行,并不断地用生成的字符串覆盖之前的输出,形成进度条不断刷新的动态效果!

代码:

import time
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(0.03)

看上去十分简洁,它最后呈现的效果是这样的:

由于IDLE环境下本身屏蔽了单行刷新的功能,想要有刷新效果就得移步到控制台使用命令行执行程序

方法:

1.首先是按住键盘的“windows+R”调用出cmd窗口

紧接着,我们就可以将文件的地址输入来调用了:

这是我存放的地址

选择python打开

(最后效果啦~)

是不是很酷??

三、带刷新的文本进度条

基本思想:

将前两小节的程序合并,再添加开始和结束提示语,可以很好地实现带刷新的文本进度条,我们调用time.clock()函数来对运行时间进行监控;

代码:

import time

scale=50
print("执行开始".center(scale//2,'-'))
t=time.clock()
for i in range(scale+1):
  a='*'*i
  b='.'*(scale-i)
  c=(i/scale)*100
  t-=time.clock()
  print("\t{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,-t),end='')
  time.sleep(0.05)
print("\n"+"执行结束".center(scale//2,'-'))

最终效果:

大概的形式就是这样啦!

当然还可以有更高级的做法:

四、利用第三方库tqdm实施

先运用pip在python中下载大三方库tqdm;

接下来我们使用上面第三个代码进行库的使用,代码当然要进行相应的修改:

import time
from tqdm import tqdm
scale=50
print("执行开始".center(scale//2,'-'))
t=time.clock()
for i in tqdm(range(scale+1)):
  a='*'*i
  b='.'*(scale-i)
  c=(i/scale)*100
  t-=time.clock()
  print("\t{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,-t),end='')
  time.sleep(0.05)
print("\n"+"执行结束".center(scale//2,'-'))

为了让它有刷新效果,我们在cmd的命令行中执行:

Python打开:

效果:

帅!

 **π的计算

基本思想:

应用蒙特卡罗方法求解,随机向单位正方形区域中抛洒大量“飞镖”点,计算每个点到圆心 的距离从而判断该点在圆内或圆外,用圆内的点数除以总点数就是π/4

课本里的代码只是简单地计算,我已经学会了如何实现文本进度条,以及刷新表示,并利用第三方库tqdm来进行直观表现,所以,我决定将这两个知识点结合起来,也就是:

制作一个计算π的程序,同时得知计算的用时以及计算过程中的进度如何,通过进度条直观反映;

于是,我写出了下面的代码:

from math import sqrt
from tqdm import tqdm
from random import random
import time
DARTS=10000
hits=0.0
t=time.clock()
for i in tqdm(range(1,DARTS+1)):
  x,y=random(),random()
  dist=sqrt(x**2+y**2)
  if dist<=1.0:
    hits+=1
  a='*'*i
  b='.'*(DARTS+1-i)
  c=(i/DARTS+1)*100
  t-=time.clock()
  time.sleep(0.00001)
pi=4*(hits/DARTS)
print("Pi值是{}.".format(pi))
print("\t{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,-t),end='')
print("运行时间是:{:.5f}s".format(time.clock()))

先用IDLE环境试试效果:

由于需要击打的点很多,以及消耗资源的问题,运行很慢,不过效果还是我们所期望的(当然存在warnings)

再用单行刷新形式,即cmd命令行打开:

成功!

那,带着做成的成就感以及学习的喜悦,我今天的分享就到这啦~

自主学习python文本进度条及π的计算的更多相关文章

  1. Python之进度条及π的计算

    Python之进度条及π的计算 文本进度条 1.  简单的开始 这是利用print()函数来实现简单的非刷新文本进度条.它的基本思想是按照任务执行百分比将整个任务划分为100个单位,每执行N%输出一次 ...

  2. python预课02 time模块,文本进度条示例,数字类型操作,字符串操作

    time模块 概述:time库是Python中处理时间的标准库,包含以下三类函数 时间获取: time(), ctime(), gmtime() 时间格式化: strftime(), strptime ...

  3. #Python绘制 文本进度条,带刷新、时间暂缓的

    #Python绘制 文本进度条,带刷新.时间暂缓的 #文本进度条 import time as T st=T.perf_counter() print('-'*6,'执行开始','-'*6) maxx ...

  4. Python入门习题4.文本进度条

    例4.1.设置一组文本进度条,使之运行效果如下: --------执行开始--------% 0 [->**********]%10 [*->*********]%20 [**->* ...

  5. 【Python】文本进度条

    1.0代码: import time#引入time库 scale=10#文本进度条宽度 print("------执行开始------") for i in range(scale ...

  6. python实例文本进度条

    简单的文本进度条代码 解析 引入time库 打印一行作为开始 最后也打印一个结束的标签 定义变量等于10,文本进度条大概的宽度是10 使用for循环来模拟进度,for i in range()能够不断 ...

  7. 数字,字符串,time模块,文本进度条

    数字和字符串 数字类型 整形 整数, 1/2/3/12/2019 整形用来描述什么, 身高/年龄/体重 age = 18 height = 180 浮点型 浮点数,小数 salary = 10 pri ...

  8. Python字符进度条

    Python字符进度条 看看这个神奇的module from tqdm import trange from time import sleep for r in trange(10, 1, -1): ...

  9. Python实现进度条功能

    Python实现进度条功能 import sys, time def progress(percent, width=50): # 设置进度条的宽度 if percent >= 100: # 当 ...

随机推荐

  1. ubuntu16.04 安装vscode

    1.通过官方PPA安装Ubuntu make sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make sudo apt-get update su ...

  2. python 类的魔法函数 内置函数 类方法 静态方法 抽象类

    魔法函数 __init__函数 init函数会在实例化A这个类的时候被调用 class A(): def __init__(self): print('__init__函数') a = A() 显示结 ...

  3. 分组PARTITION BY及游标CURSOR的用法

    基础数据表: select * from dbo.RecommendationChanelVersionRelation: 数据如下: 要求按照ChannelVersionID分组,对每组中的Orde ...

  4. 泛型约束new()的使用

    下面泛型约束代码,where字句后面有new()约束,T类型必须有公有的无参的构造函数. private T InternalCreate<T>() where T : IObjectWi ...

  5. notepad++安装nppFTP

    官网下载的最新版notepad++,结果pluginadmin里面installnppftp总是安不上,点击install之后然后点是就退出,再进去也没有安装好. 网上找了半天也没找到什么有用信息,最 ...

  6. MemCache详细解读(转)

    参考:https://www.cnblogs.com/xrq730/p/4948707.html MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统, ...

  7. shell echo/read/printf/流程控制章节笔记

    // echo read printf 流程控制 命令 1.read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 read hello 输入xxx echo $hell ...

  8. python3 迭代器(Iterator)和生成器(generator)

    一.迭代器定义: 迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象: 集合数据类型如list.dict.str等是Iterable但不是Iterator,不过可以通过iter()函数获 ...

  9. MySQL 远程连接问题

    使用Workbench 无法远程连接Mysql服务器提示如下错误: 查找原因: 显示只能localhost 访问. 解决方法:修改授权远程访问 create user 'root'@'%' ident ...

  10. OpenCV-Python:霍夫变换

    霍夫变换常用来在图像中提取直线和圆等几何形状.如下图: 我们下面来看看如何使用霍夫变换来检测直线.一条直线可以用数学表达式 y = mx + 或者 ρ = xcosθ + y sinθ表示(极坐标) ...