挑战14天学完Python----初识Python语法
挑战14天学完Python----初识python基本图形绘制
本章将从两个实例:"天天向上的力量"和"文本进度条"两个实例出发,学习数字类型的操作、字符串类型及操作、Python中非常重要的time库的使用.
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语言
操作符是完成运算的一种符号体系
二元操作符有对应的增强赋值操作符
数字类型的关系:类型间可进行混合运算,生成结果为"最宽"类型
三种类型存在一种逐渐"扩展"或"变宽"的关系
整数 ->浮点数 -> 复数
例如: 123 + 4.0 = 127.0(整数+浮点数 = 浮点数)
一些以函数形式提供的数值运算功能
注意:pow(x,y[,z])中z能保证结果范围始终在保持在计算机计算的范围内
在敲"文本进度条"之前我们先来了解一些字符串与time库相关知识,以便更好理解代码.
转义符\
由0个或多个字符组成的有序字符序列
一个例子:获取星期字符串
输入: 1-7的整数,表示星期几
输出:输入整数对应的星期字符串例如: 输入3,输出 星期三
Unicode编码Python字符串的编码方式
Unicode编码是Python的统一字符编码,即覆盖几乎所有字符的编码方式从0到1114111(0x10FFFF)空间,每个编码对应一个字符
Python字符串中每个字符都是Unicode编码字符
在Python中,数字、标点符号、汉字、字母都是一个字符
格式化是对字符串进行格式表达的方式
字符串格式化使用.format0方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
format()方法的格式控制----槽内部对格式化的配置方式
:b 二进制形式输出
:c 以字符形式(Unicode的编码形式)输出
:d 以十进制形式输出
: o 以八进制形式输出
:x 以十六进制形式输出
:X 以大写十六进制形式输出
编写模板字符串判断浮点类型的输出方式
:e 采用科学计数法e形式表现浮点数
:E 采用科学计数法E形式表现浮点数
:f 指的是以通常的非科学计数法形式表示浮点数
:% 百分号形式表示浮点数
time库是Python中处理时间的标准库
它可以:
计算机时间的表达
提供获取系统时间并格式化输出功能
提供系统级精确计时功能,用于程序性能分析
time的引用使用方式:
import time
time.()
进度条是计算机处理任务或执行软件中常用的增强用户体验的重要手段,它能够实时显示任务或软件的执行进度。接下来我们将利用 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("------执行结束------")
# 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详解:
因为
所以我们要使用\r和end参数