Python学习笔记(三)——字符串类型及操作
数字类型及操作
整数、浮点数、复数、数值运算操作符、数值运算函数
整数类型: 与数学中整数的概念一致,大小无限制
pow(x,y)函数: 计算 x y x^y xy
整数的四种表现方式:
-
十进制:1010,99,-217
-
二进制,以0b或0B开头:0b010, -0B101
-
八进制,以0o或0O开头:0o123, -0O456
-
十六进制,以0x或0X开头:0x9a, -0X89
浮点类型: 与数学中实数的概念一致 ,带有小数点及小数的数字
- 浮点数取值范围和小数精度都存在限制,但常规计算可忽略
- 取值范围数量级约 − 1 0 308 -10^{308} −10308至 1 0 308 10^{308} 10308 ,精度数量级 1 0 − 16 10^{-16} 10−16
- 浮点数之前的运算存在不确定尾数,不是bug
比如,0.1 + 0.3 = 0.4,但 0.1 + 0.2 =0.300000000004
因此,0.1 + 0.2 == 0.3 结果是False,但 round(0.1+0.2, 1)== 0.3 结果是True
浮点数间的运算及比较用round()函数辅助,不确定尾数一般发生在 1 0 − 16 10^{-16} 10−16左右,因此round()函数十分有效。
round(x, d): 对x四舍五入,d是小数截取的位数
- 浮点数可以采用科学计数法表示。使用字母e或E作为幂的符号,以10为基数,格式如下:
aeb表示 a ∗ 1 0 b a*10^b a∗10b
比如,4.3e-3 = 0.0043,9.6E5 = 960000.0(e和E都可以)
复数类型: 与数学中的复数的概念一致, j = − 1 j = \sqrt{-1} j=−1
数值运算操作符: 操作符是完成运算的一种符号体系。
操作符及使用 | 描述 |
---|---|
x // y | 整数除。10//3 = 3 |
x % y | 余数,模运算。10%3 = 1 |
x ** y | 幂运算 x y x^y xy。4**0.5 = 2 |
二元操作符有对应的增强赋值操作符
x op=y,即x = x op y, 其中op为二元操作符
比如,x += y, x -= y,若x = 3, x **= 2,则x = 6
数字类型的关系:
类型间可以进行混合运算,生成结果为“最宽”的类型
三种类型存在一种逐渐“扩展”或“变宽”的关系:
整数 -> 浮点数 -> 复数
数值运算函数: 一些以函数形式提供的数值运算功能
函数及使用 | 描述 |
---|---|
abs(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,2,4)= 1 |
round(x[,d]) | 四舍五入,d是保留小数位数,默认值为0。round(-10.123,2)= -10.12 |
m a x ( x 1 , x 2 , . . . , x n ) max(x_1,x_2,...,x_n) max(x1,x2,...,xn) | 最大值,n不限 |
m i n ( x 1 , x 2 , . . . , x n ) min(x_1,x_2,...,x_n) min(x1,x2,...,xn) | 最小值,n不限 |
int(x) | 将x变成整数,舍弃小数部分。int(123.4)=123;int(“123”)=123 |
float(x) | 将x变成浮点数,增加小数部分。float(12)=12.0;float(“1.23”) = 1.23 |
complex(x) | 将x变成复数,增加虚数部分。complex(4)= 4 + 0j |
天天向上的力量
- 0.1%(千分之一)的力量
每天进步0.1%,一年进步多少?
每天退步0.1%,一年退步多少?
#DayDayUpQ1.py
dayup = pow(1.001, 365)
daydown = pow(0.999, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
- 0.5%和1%的力量
#DayDayUpQ2.py
dayfactor = 0.005 #使用变量的好处:一处修改即可
dayup = pow(1 + dayfactor, 365)
daydown = pow(1 - dayfactor, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
- 工作日的力量
一年365天,一周5个工作日,每天进步1%
一年365天,一周2个休息日,每天退步1%
这种工作日的力量,如何呢?
数学思维到计算思维:for…in…
#DayDayUpQ3.py
dayup = 1.0
dayfactor = 0.01
for i in range(365):
if i % 7 in [6,0]:
dayup = dayup * (1 - dayfactor)
else:
dayup = dayup *(1 + dayfactor)
print("工作日的力量:{:.2f}".format(dayup))
- 工作日的努力
工作日要努力到什么水平,才能与每天努力1%一样?
A君:一天365天,每天进步1%,不停歇
B君:一天365天,每周工作5天休息2天,休息日下降1%,工作日要多努力呢?
for… in … (计算思维)到 def… while … ("笨办法"试错):因为计算机运算速度快
#DayDayUpQ4.py
def dayUP(df): #def保留字用于定义函数
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: #while保留字判断条件是否成立,条件成立时执行循环
dayfactor +=0.001
print("工作日的努力参数是:{:.3f}".format(dayfactor))
GRIT: perseverance and passion for long-term goals
1.0 1 365 = 37.78 1.01^{365} = 37.78 1.01365=37.78 1.01 9 365 = 962.89 1.019^{365} = 962.89 1.019365=962.89
–GRIT,坚毅,对长期目标的持续激情及持久耐力
–GRIT是获得成功最重要的因素之一,牢记天天向上的力量
字符串类型及操作
字符串
-
由0个或者多个字符组成的有序字符序列。可以对其中的字符进行索引。如,”请“是“请输入带有符号的温度值:”的第0个字符
-
字符串有2类共4种表示方式:
字符串由一对单引号或一对双引号表示,仅表示单行字符串。
由一对三单引号或三双引号表示,可表示多行字符串。
‘’‘Python
语言’‘’
一对三单引号形成的是字符串,但对其无任何操作时,相当于注释。
- 引入这几种表示方法的原因:
–如果希望在字符串中包含双引号或单引号呢?
‘这里有个双引号(”)’或者”这里有个单引号(’)“
–如果希望在字符串中既包含单引号又包含双引号呢?
“‘这里既有单引号(‘)又有双引号(”)’“
-
字符串的序号:正向递增序号0,1,2,… 和反向递减序号…,-3,-2,-1
-
字符串的使用:使用[]获取字符串中一个或多个字符
索引:<字符串>[M]
切片:<字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
如,“0一二三四五”[:3] 结果是 “0一二”
<字符串>[M: N: K],根据步长K对字符串切片
如,“0一二三四五”[1:8:2] 结果是 “一三五七”
如,“0一二三四五”[::-1] 结果是 “五四三二一0”,逆序
转义符(\)
- 转义符\表达特定字符的本意
如,“这里有个双引号( \ ")” 结果为 这里有个双引号(“)
- 转义符形成一些组合,表达一些不可打印的含义
“\ b” 回退 “\ n ” 换行 “\ r” 回车(将光标移动到本行行首)
字符串操作符:
操作符及使用 | 描述 |
---|---|
x + y | 连接两个字符串x和y |
n * x 或 x * n | 复制n次字符串x |
x in S | 如果x是S的子串,返回True,否则返回False |
获取星期字符串
输入:1-7的整数,表示星期几
输入:输入整数对应的星期字符串
比如,输入3,输出 星期三
#WeekNamePrintV1.py
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input("请输入星期数字(1-7):"))
pos = (weekId - 1) * 3
print(weekStr[pos: pos+3])
#WeekNamePrintV2.py
weekStr = "一二三四五六日"
weekId = eval(input("请输入星期数字(1-7):"))
print("星期" + weekStr[weekId - 1])
字符串处理函数
一些以函数形式提供的字符串处理功能
函数及使用 | 描述 |
---|---|
len(x) | 长度,返回字符串x的长度。len(“一二三456”)结果为 6 |
str(x) | 任意类型x所对应的字符串形式。str(1.23)结果为"1.23",str([1,2])的结果为“[1,2]”。注:str()与eval()是一对函数,前阵添加字符串符号,后者去掉字符串符号 |
hex(x) 或 oct(x) | 整数x的十六进制或八进制小写形式字符串。hex(425)结果为“0x1a9”,oct(425)结果为“0o651” |
chr(u) | u为Unicode编码,返回其对应的字符 |
ord(x) | x为字符,返回其对应的Unicode编码 |
Python字符串的编码方式:
-统一字符编码,即覆盖几乎所有字符的编码方式
-从0到1114111(0x10FFFF)空间,每个编码对应一个字符
-Python字符串中每个字符都是Unicode 编码,因此可以用中、英、韩文等
字符串处理方法
“方法”在编程中是一个专有名词
-
“方法”特指==<a>.<b>()风格==**中的函数<b>()
-
方法本身也是函数,但与<a>有关,<a>.<b>()风格使用
-
字符串及变量也是<a>, 存在一些方法
一些以方法形式提供的字符串处理功能:
方法及使用 | 描述 |
---|---|
str.lower() 或 str.upper() | 返回字符串的副本,全部字符小写/大写。“AbCd”.lower()结果为“abcd” |
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子串被替换为new。“python”.replace(“n”,“n123.io”)结果为“python123.io” |
str.center(width[,fillchar]) | 字符串str根据宽度width居中,fillchar为填充内容字符可有可无。“python”.center(20,“=”)结果为’=======python=======’ |
str,strip(chars) | 从str中去掉在其左侧和右侧chars中列出的字符。“=python=”。strip(" =np")结果为"ytho" |
str.join(iter) | 在iter变量除最后一个元素外每个元素后增加一个str。“,”.joint(“12345”)结果为"1,2,3,4,5" #用于字符串分隔等 |
字符串类型的格式化
格式化是对字符串进行格式表达的方式。
字符串格式化使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
槽:
"{}:计算机{}的CPU占有率为{}%".format("2018-10-10","C",10)
#上述代码中{}分别代表字符串中的第0、1、2个槽。format()参数顺序为0、1、2
"{1}:计算机{0}的CPU占有率为{2}%".format("2018-10-10","C",10)
#表示 "C:计算机2018-10-10的CPU占有率为10%"
format()方法的格式控制:
槽内部对格式化的配置方式如下:
{<参数序号>:<格式控制标记>}
: | <填充> | <对齐> | <宽度> | <,> | <.精度> | <类型> |
---|---|---|---|---|---|---|
引导符号 | 用于填充的单个字符 | <左对齐>右对齐^居中对齐 | 槽设定的输出宽度 | 数字的千位分隔符 | 浮点数小数精度或字符串最大输出长度 | 整数类型b,c,d,o,x,X浮点数类型e,E,f,% |
#填充对齐宽度
"{0:=^20}".format("PYTHON") #0表示format的第0个参数,:是引导符号,=用等号填充,^居中对齐,宽度为20。
#结果为'=======PYTHON======='
"{0:*>20}".format("PYTHON")
#结果为'**************PYTHON'
"{:10}".format("PYTHON") #默认空格填充,左对齐。
#结果为'PYTHON '
#千位分隔符精度类型
"{0:,.2f}".format(12345.6789)
#结果为 '12,345.68'
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
#结果为 '110101001,Ʃ,425,651,1a9,1A9'
"{0:e},{0:E},{0:f},{0:%}".format(3.14)
#结果为 '3.140000e+00,3.140000E+00,3.140000,314.000000%'