往期文章
挑战14天学完Python—-初识Python语法
挑战14天学完Python—-初识python基本图形绘制
目录
- 往期文章
- 前言
- 1. “天天向上的力量”实例
- 2. 数值运算操作
- 2.1 数值运算操作符
- 2.2 数值运算函数
- 3. 字符串类型的操作
- 3.1 字符串的特殊字符
- 3.2 字符串操作符
- 3.3字符串处理函数
- 3.4 Unicode编码
- 3.5 字符串处理方法
- 3.5 字符串类型的格式化
- 4. time库的使用
- 4.1 time库的三类函数
- 5.”文本进度条”实例分析
前言
本章将从两个实例:”天天向上的力量”和”文本进度条”两个实例出发,学习数字类型的操作、字符串类型及操作、Python中非常重要的time库的使用.
1. “天天向上的力量”实例
1951 年,毛泽东主席题词“好好学习、天天向上”,成为激励一代代中国人奋发图强的经典短语。那么“天天向上”的力量有多强大呢? 下面我们将用Python 程序来演算天天向上的力量。
问题一:天天向上的力量
1%一年 365 天,以第 1天的能力值为基数,记为 1.0,当好好学习时能力值相比前一天提高 0.1%,当没有学习时能力值相比前一天下降 0.1%。。每天努力和每天放任一年下来的能力值相差多少呢?
需求分析
- 数学公式可以求解,似乎没必要用程序?
- 如果是”三天打鱼两天晒网”呢?
- 如果是”双休日又不退步”呢?
根据题目,代码如下:
0.1%。的力量,接近2倍,不可小觑哦
问题二:5%。和1%的力量
一年365天,每天进步0.5%。或1%,累计进步多少呢?
一年365天,每天退步0.5%。或1%,累计剩下多少呢?
在问题二中,我们增加一个变量dayFactor,使用变量的好处:一处修改,处处可用
0.5%的力量:
1%的力量:
0.5%。的力量,惊讶!
1%的力量,惊人!
问题三: 工作日的力量
一年365天,一周5个工作日,每天进步1%
一年365天,一周2个休息日,每天退步1%
这种工作日的力量,如何呢?
我们采用循环模拟365天的过程抽象 + 自动化
问题四:工作日的努力
工作日模式要努力到什么水平,才能与每天努力1%一样?
A君: 一年365天,每天进步1%,不停歇
B君: 一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
# DayDayUp4.py
def dayUp(df):
dayup = 1
for i in range(365):
if i % 7 in [6, 0]:
dayup = dayup * (1 - 0.01)
else:
dayup = dayup * (1 + df)
return dayup
dayFactor = 0.01
while dayUp(dayFactor) < 37.78:
dayFactor += 0.001
print("工作日的努力参数是:{:.3f}".format(dayFactor))
实例虽然仅包含8-12行代码,但包含很多语法元素条件循环、计数循环、分支、函数、计算思维清楚理解这些代码能够快速入门Python语言
2. 数值运算操作
2.1 数值运算操作符
操作符是完成运算的一种符号体系
二元操作符有对应的增强赋值操作符
数字类型的关系:类型间可进行混合运算,生成结果为”最宽”类型
三种类型存在一种逐渐”扩展”或”变宽”的关系
整数 ->浮点数 -> 复数
例如: 123 + 4.0 = 127.0(整数+浮点数 = 浮点数)
2.2 数值运算函数
一些以函数形式提供的数值运算功能
注意:pow(x,y[,z])中z能保证结果范围始终在保持在计算机计算的范围内
在敲”文本进度条”之前我们先来了解一些字符串与time库相关知识,以便更好理解代码.
3. 字符串类型的操作
3.1 字符串的特殊字符
转义符\
- 转义符表达特定字符的本意
“这里有个双引号(”)” 结果为这里有个双引号(”) - 转义符形成一些组合,表达一些不可打印的含义
”\b”回退 n”换行(光标移动到下行首) r”车(光标移动到本行首)
3.2 字符串操作符
由0个或多个字符组成的有序字符序列
一个例子:获取星期字符串
输入: 1-7的整数,表示星期几
输出:输入整数对应的星期字符串例如: 输入3,输出 星期三
3.3字符串处理函数
以函数形式提供的字符串处理功能
3.4 Unicode编码
Unicode编码Python字符串的编码方式
Unicode编码是Python的统一字符编码,即覆盖几乎所有字符的编码方式从0到1114111(0x10FFFF)空间,每个编码对应一个字符
Python字符串中每个字符都是Unicode编码字符
在Python中,数字、标点符号、汉字、字母都是一个字符
Unicode编码的一些有趣的例子
3.5 字符串处理方法
一些以方法形式提供的字符串处理功能
3.5 字符串类型的格式化
格式化是对字符串进行格式表达的方式
字符串格式化使用.format0方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
图示:
format()方法的格式控制—-槽内部对格式化的配置方式
{<参数序号> : <格式控制标记>}
举一些例子说明他们的使用:
槽格式控制 填充 对其 宽度
:b 二进制形式输出
:c 以字符形式(Unicode的编码形式)输出
:d 以十进制形式输出
: o 以八进制形式输出
:x 以十六进制形式输出
:X 以大写十六进制形式输出
编写模板字符串判断浮点类型的输出方式
:e 采用科学计数法e形式表现浮点数
:E 采用科学计数法E形式表现浮点数
:f 指的是以通常的非科学计数法形式表示浮点数
:% 百分号形式表示浮点数
4. time库的使用
time库是Python中处理时间的标准库
它可以:
计算机时间的表达
提供获取系统时间并格式化输出功能
提供系统级精确计时功能,用于程序性能分析
time的引用使用方式:
import time
time.()
4.1 time库的三类函数
- 时间获取: time() ctime() gmtime()
- 时间格式化: strftime() strptime()
将时间以合理的方式展示出来
格式化:类似字符串格式化,需要有展示模板
展示模板由特定的格式化控制符组成
strftime()方法
ts变量是指在gmtime函数中输出的格式
tpl定义了输出效果
格式化控制符
举个例子 - 程序计时: sleep(),perf_counter()
程序计时指测量起止动作所经历时间的过程
测量时间: perf_counter0)
产生时间 : sleep0)
5.”文本进度条”实例分析
进度条是计算机处理任务或执行软件中常用的增强用户体验的重要手段,它能够实时显示任务或软件的执行进度。接下来我们将利用 Python字符串处理方法实现文本进度条功能。
需求分析:
采用字符串方式打印可以动态变化的文本进度条
进度条需要能在一行中逐渐变化
刷新的原理是后面更新的内容覆盖前面的内容
问题分析:
如何获得文本进度条的变化时间?
采用sleep0模拟一个持续的进度
- 方法一:
最简单的方法,但不能实现单行刷新
# TextProBarQ1.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("------执行结束------")
- 方法二:
实现单行刷新
刷新的关键是\r
刷新的本质是: 用之后打印的字符覆盖之前的字符
不能换行: print()需要被控制
要能回退: 打印后光标退回到之前的位置 \r
代码如下:
# TextProBarQ2.py
import time
for i in range(101):
print("\r{:3}%".format(i), end="")
time.sleep(0.1)
如图我们可以看到动态效果;
是不是还挺好玩的呢23333……
- 方法三:
较复杂的一个方法,具有格式框架,有进度’*’输出,又有时间记录的完整进度条.
# TextProBarQ3.py
import time
scale = 50
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("\r{:^3.0f}[{}->{}]{:.2f}s".format(c, a, b, dur), end='')
time.sleep(0.1)
print("\n"+"执行结束".center(scale//2, '-'))
代码解析:
.center方法将”-“字符填充在”执行开始”和”执行结束”字符串的两侧,perf_counter函数计时,dur记录每一次打印文本进度条需要的时间,\r实现光标向行首移动,end参数赋值为空字符使得每次输出后不换行.
\r和end详解:
因为
- input获得的输入会被保存为字符串类型
- print输出函数后会默认换行到下一行
所以我们要使用\r和end参数
- \r 在打印字符串信息之前,使光标退回到当前行的行首
- end print()函数的一个参数,默认情况下不增加,指的是输出信息后,默认在最后增加一个换行换到下一行.但如果在**输出信息之后,增加”,end=”这样一个参数,它就能改变print输出最后增加的信息.**比如,我们将end赋值为空字符串,那么print每一次输出字符串后它都不会增加换行,它自会把光标停留在当初输出字符串的后面.
文章出处登录后可见!