一、数字类型及操作
1.整数类型(与数学中整数的概念一致)
(1)可正可负,没有取值范围限制
(2)pow(x,y)函数:计算x的y次,想算多大就算多大
eg:>>>pow(2,100) 2的100次 1267650600228229401496703205376
>>>pow(2,pow(2,15)) 2的2的15次方 1415461031044954789001553
(3)四种进制表示形式
十进制:1010,99,-217
二进制,以0b或0B开头:0b010,-0B101
八进制,以0o或0O开头:0o123,-0O456
十六进制,以0x或0X开头:0x9a,-0X89
2.浮点数类型(与数学中实数的概念一致)
(1)带有小数点及小数的数字
(2)浮点数取值范围和小数精度都存在限制,但常规计算可忽略
(3)取值范围数量级约-10的308次至10的308次,精度数量级10的负16次
浮点数间运算存在不确定尾数,不是bug
eg:>>>0.1+0.3
0.4
>>>0.1+0.2
0.30000000000000004 (加粗部分即不确定尾数)
(4)round函数
>>>0.1+0.2
False
>>>round(0.1+0.2,1) == 0.3
Ture
round(x,d):对x四舍五入,d是小数截取位数
浮点数间运算及比较用round函数辅助
不确定尾数一般发生在10的负16次左右,round()十分有效
(5)浮点数可以采用科学计数法表示
使用字母e或E作为幂的符号,以10为基数,格式如下:
例如:4.3e-3值为0.0043 9.6E5值为960000.0
3.复数类型(只有python语言提供此类型,常用于空间变换,与数学中复数的概念一致)
z=1.23e-4+5.6e+89j
z.real获得实部
z.imag获得虚部
4.数值运算操作符
(1)操作符是完成运算的一种符号体系。
操作符及使用 描述
x+y 加,x与y之和
x-y 减,x与y之差
x*y 乘,x与y之积
x/y 除,x与y之商 10/3结果是3.3333333333333335
x//y 整数除,x与y之整数商 10//3结果是3
+x x本身
-y y的 负值
x%y 余数,模运算 10%3结果是1
x**y 幂运算,x的y次幂(当y是小数时,开方运算10**0.5结果为根号10)
(2)二元操作符有对应的增强赋值操作符
增强操作符及使用 描述
即x=x op y,其中,op为二元操作符
x+=y x-=y x*=y x/=y
x op =y x//=y x%=y x**=y
>>>x=3.1415
>>>x**=3 #与x=x**3等价
31.006276662836743
(3)类型间可进行混合运算,生成结果为“最宽”类型
三种类型存在一种逐渐“扩展”或“变宽”的关系
整数<浮点数<复数(整数是浮点数的特殊形式 浮点数是复数的特殊形式)
eg:123+4.0=127.0(整数+浮点数=浮点数)
5.数值运算函数
一些以函数形式提供的数值运算功能
函数及使用 描述
abs(x) 绝对值,x的绝对值
abs(-10.01)结果为10.01
divmod(x,y) 商余,(x//y,x%y),同时输出商和余数
divmod(10.3)结果为(3,1)
pow(x,y[,z]) 幂余,(x**y)%z,[··]表示参数z可省略
pow(3,pow(3,99),10000)结果为4587
round(x,[,d]) 四舍五入,d是保留小数位数,默认值为0
round(-10.123,2)结果为-10.12
max(x1,x2,···,xn) 最大值,返回x1,x2,···,xn中最大值,n不限
max(1,9,5,4,3)结果为9
min(x1,x2,···,xn) 最小值,返回x1,x2,···,xn中最小值,n不限
min(1,9,5,4,3)结果为1
int(x) 将x变成整数,舍弃小数部分
int(123.45)结果为123;int(“123”)结果为123
float(x) 将x变成浮点数,增加小数部分
float(12)结果为12.0;float(“1.23”)结果为1.23
complex(x) 将x变成复数,增加虚数部分
complex(4)结果为4+0j
(后三个函数可相互转化)
二.天天向上的力量
基本问题:持续的价值
第一问:千分之一的力量
#DayDayUpQ1.py
dayup=pow(1.001,365)
daydown=pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}").format(dayup,daydown))
编写上述代码,并保存为DayDayUpQ1.py文件
>>>(运行结果)
向上:1.44,向下:0.69
第二问:千分之五和百分之一的力量
#DayDayUpQ2.py 使用变量的好处:一处修改即可
dayfactor=0.005
dayup=pow(1+dayfactor,365)
daydown=pow(1-dayfactor,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
编写上述代码,并保存为DayDayUpQ2.py文件
>>>(千分之五运行结果) >>>(百分之一运行结果)
向上:6.17,向下:0.16 向上:37.78,向下:0.03
第三问:工作日的力量(一周五天工作即进步,两天休息即退步)
#DayDayUpQ3.py
dayup=1.0
dayfactor=0.01 for···in···(计算思维)
for i in range(365):
if i % 7 in [6,0]:
dayup=dayup*(1-dayfactor) 采用循环模拟365天的过程
else: 抽象+自动化
dayup=dayup*(1+dayfactor)
print("工作日的力量:{:.2f}".format(dayup))
>>>(运行结果)
工作日的力量:4.63
第四问:工作日的努力
-工作日模式要努力到什么水平,才能与每天努力1%一样?
-A君:一年365天,每天进步1%,不停歇
-B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
#DayDayUpQ4.py
def dayUP(df):
dayup=1
for i in range(365): 根据df参数计算工作日力量的函数参数不同,
if i % 7 in[6,0]: 这段代码可共用
dayup=dayup*(1-0.01) def保留字用于定义函数
else: while保留字判断条件是否成立
dayup=dayup*(1+df) 条件成立时循环执行
return dayup
dayfactor=0.01
while dayUP(dayfactor)<37.78
dayfactor+=0.001
print("工作日的努力参数是:{:.3f}".format(dayfactor))
>>>(运行结果)
工作日的努力参数是:0.019
三.字符串类型及操作
1.字符串类型的表示
字符串由0个或多个字符组成的有序字符序列
(1)字符串有2类共4种表示方法
字符串由一对单引号或一对双引号表示,仅表示单行字符串
“请输入带有符号的温度值”或者“C”
字符串是字符的有序序列,可以对其中的字符进行索引
“请”是“请输入带有符号的温度值“的第0个字符
由一对三单引号或三双引号表示,可表示多行字符串
“‘Python
语言”’ 特别地 (“)‘或(’)”
(2)字符串的序号
正向递增序号和反向递减序号
(3)字符串的使用
使用[]获取字符串中一个或多个字符
-索引:返回字符串中单个字符 <字符串>[M]
“请输入带有符号的温度值:”[0]或者TempStr[-1]
-切片:返回字符串中一段字符子串<字符串>[M:N]
“请输入带有符号的温度值:”[1:3]或者TempStr[0:-1]
字符串切片的高级用法
使用[M:N:K]根据步长对字符串切片
-<字符串>[M:N] M缺失表示至开头 N缺失表示至结尾
“0一二三四五六七八九十”[:3]结果是“0一二”
-<字符串>[M:N:K],根据步长K对字符串切片
“0一二三四五六七八九十”[1:8:2]结果是“一三五七”
“0一二三四五六七八九十”[::-1]结果是“十九八七六五四三二一0”
(4)字符串的特殊字符
转义符\
转义符表达特定字符的本意
eg:“这里有个双引号(\")" 这里有个双引号(“)
转义符形成一些组合,表达一些不可打印的含义
“\b"退回”\n"换行(光标移动到下行首)“\r”回车(光标移动到本行首)
2.字符串操作符
操作符及使用 描述
x+y 连接两个字符串x和y
n*x或x*n 复制n次字符串x
x in s 如果x是s的子串,返回True,否则返回False
3.字符串处理函数
一些以函数形式提供的字符串处理功能
函数及使用 描述
len(x) 长度,返回字符串的长度
len("一二三456“)结果为6
str(x) 任意类型x所对应的字符串形式
str(1.23)结果为“1.23” str([1,2])结果为"[1,2]"
hex(x)或0ct(x) 整数x的十六进制或八进制小写形式
字符串hex(425)结果为“0x1a9" oct(x)结果"0o651"
chr(u) u为Unicode编码,返回其对应字符
ord(x) x为字符,返回其对应的Unicode编码
(7)Unicode编码
Python字符串的编码方式
-统一字符编码,即覆盖几乎所有字符的编码方式
-从0到1114111(0x10FFFF)空间,每个编码对应一个字符
-Python字符串每个字符都是Unicode编码字符
eg:>>>"1+1=2"+chr(10004)
'1+1=2 √'
>>>"这个字符♉︎的Unicode值是:“+strcord(“♉︎”))
’这个字符♉︎的Unicode值是:9801‘
对十二星座
>>>for i in range(12):
print(chr(9800+i),end="")
♈︎ ♉︎ ♊︎♋︎ ♌︎ ♍︎ ♎︎♏︎ ♎︎ ♏︎ ♐︎ ♑︎ ♒︎ ♓︎
4.字符串处理方法
“方法”在编程中是一个专有名词
-“方法”特指.()风格中的函数()
-字符串及变量也是,存在一些方法
★一些以方法形式提供的字符串处理功能(8个)
方法及使用 描述
str.lower()或str.upper() 返回字符串的副本,全部字符小写/大写
“AbCdEfGh".lower()结果为”abcdefgh’
str.split(sep=None) 返回一个列表,由str根据sep被分隔的部分组成
“A,B,C”.split(",")结果为['A','B','C']
str.count(sub) 返回子串sub在str中出现的次数
"an apple a day".count("a")结果为4
str.replace(old,new) 返回字符串str副本,所有old子串被替换为“Python”
replace("n","n123.io")结果为“Python123.io”
str.center(width[,fillchar]) 字符串str根据宽度width居中,fillchar可选"Python"
center(20,"=")结果为‘=======Python=======’
(加粗部分一共20个字符)
str.strip(chars) 从str中去掉在其左侧和右侧chars中列出的字符
“=Python”,strip("=pn")结果为“ytho”
str.join(iter) 在iter变量除最后元素外每个元素后增加一个str
",".join("12345")结果为“1,2,3,4,5”(主要用于字符串分隔)
5.字符串类型的格式化
格式化是对字符串进行格式表达的方式
-字符串格式化使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
槽 用大括号表示
format()方法的格式控制
{1}:计算机{0}的CPU占用率为{2}%.format("2018-10-10","C",10)
槽内部对格式化的配置方式(六个控制格式)
{<参数序号>:<格式控制标记>}
:引导符号
<填充> 用于填充的单个字符 >>>"{0:=^20}".format("PYTHON")
<对齐> <左对齐 >右对齐 ^居中对齐 '=======PYTHON======='
<宽度> 槽设定的输出宽度 >>>"{0:*>20}".format("BIT")
'*****************BIT'
>>>"{:10}".format("BIT")
'BIT '(空格)
< , > 数字的千位分隔符 >>>"{0:,.2f}".format(12345.6789)
<精度> 浮点数小数精度或字符串最大 '12,345.68'
输出长度 >>>"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
<类型> 整数类型b,c,d,o,x,X '110101001,∑,425,651,1a9,1A9'
浮点数类型e,E,f,% >>>"{0:e},{0:E},{0:f},{0:%}".format(3.14)
★(所有标点符号采用英文的半角形式) '3.140000e+00,3.140000E+00,3.140000,314.000000%'
四.Time库的使用
1.time库基本介绍
Time库是Python中处理时间的标准库
-计算机时间的表达
-提供获取系统时间并格式化输出功能
-提供系统级精确计时功能,用于程序性能分析
import time
time.()
time库包括三类函数
-时间获取:time() ctime() gmtime()
-时间格式化: strftime() strptime()
-程序计时:sleep() perf_counter()
2.时间获取
函数 描述
time() 获取当前时间戳(很长的浮点数),即计算及内部时间值浮点数
>>>time.time()
1516939876.60122282
ctime() 获取当前时间并以易读方式表达,返回字符串
>>>time.ctime()
'Fri Jan 26 12:11:16 2018'
gmtime() 获取当前时间,表示为计算机可处理的时间格式
>>>time,gmtime()
time.struct_time(tm_year=2018,tm_mon=1,tm_mday=26,tm_hour=4,
tm_min=11,tm_sec=16,tm_wday=4,tm_yday=26,tm_isdat=0)
3.时间格式化
将时间以合理的方式展示出来
-格式化:类似字符串格式化,需要有展示模板
-展示模板由特定的格式化控制符组成
-strftime()方法
函数 描述
tpl是格式化模板字符串,用来定义输出效果
ts是计算机内部时间类型变量
strftime(tpl,ts) >>>t=time.gmtime()
>>>time.strftime("%Y-%m-%d %H:%M:%S",t)
'2018-01-26 12:55:20'
格式化字符串 日期/时间说明 值范围和实力
%Y 年份 0000~9999,例如:1900
%m 月份 01~12,例如:10
%B 月份名称 January~December,例如:April
%b 月份名称缩写 Jan~Dec,liru :Apr
%d 日期 01~31,例如:25
%A 星期 Monday~Sunday,例如:Wednesday
%a 星期缩写 Mon~Sun,例如:Wed
%H 小时(24h制) 00~23,例如:12
%I 小时(12h制) 01~12,例如:7
%p 上/下午 AM,PM,例如:PM
%M 分钟 00~59,例如:26
%S 秒 00~59,例如:26
函数 描述
strptime(str,tpl) str是字符串形式的时间值
tpl是格式化模板字符串,用定义输入效果
>>>timeStr='2018-01-26 12:55:20'
>>>time.strptime(timeStr,"%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2018,tm_mon=1,tm_mday=26,tm_hour=4,
tm_min=11,tm_sec=16,tm_wday=4,tm_yday=26,tm_isdst=0)
4.程序计时应用
程序计时应用广泛
-程序计时指测量起止动作所经历时间的过程
-测量时间:perf_counter()
-产生时间:sleep()
函数 描述
perf_counter() 返回一个CPU级别的精确时间计数值, 单位为秒
由于这个计数值起点不确定,连续调用差值才有意义 >>>start=time.perf_counter()
318.66599499718114
>>>end=time.perf_counter()
341.3905185375658
>>>end-start
22.714523540384666
sleep(s) s拟休眠的时间,单位是秒,可以是浮点数
>>>def wait():
time.sleep(3.3)
>>>wait() #程序将等待3.3秒后再退出
五.文本进度条
文本进度条
-采用字符串方式打印可以动态变化的文本进度条
-进度条需要能在一行中逐渐变化
单行动态刷新
-刷新的本质是:用后打印的字符覆盖之前的字符
-不能换行:print()需要被控制
-要能回退:打印后光标退回到之前的位置\r(刷新的关键)
#TextProBarV1.py
import time
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(0.1)
实例完整效果
#TextProBarV3,py
import time
scale=50
print("执行开始“.center(scale//2,"-"))
start=time.perf_counter()
form 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,'-'))
计算问题扩展
-文本进度条程序使用了perf_counter()计时
-计时方法适合各类需要统计时间的计算问题
进度条扩展
-在任何运行时间需要较长的程序中增加进度条
-在任何希望提高用户体验的应用中增加进度条
-进度条是人机交互的纽带之一