Python学习笔记(三)——字符串类型及操作

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} 1016
  • 浮点数之前的运算存在不确定尾数,不是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} 1016左右,因此round()函数十分有效。

round(x, d): 对x四舍五入,d是小数截取的位数

  • 浮点数可以采用科学计数法表示。使用字母e或E作为幂的符号,以10为基数,格式如下:

aeb表示 a ∗ 1 0 b a*10^b a10b

比如,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%'
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《数据结构实验》实验题目 实验一 客房管理(链表实验) 实现功能:采用结构化程序设计思想,编程实现客房管理程序的各个功能函数,从而熟练掌握单链表的创建、输出、查找、修改、插入、删除、排序和复杂综合应用等操作的算法实现。以带表头结点的单链表为存储结构,实现如下客房管理的设计要求。 实验机时:8 设计要求: #include #include #include //定义客房链表结点结构 typedef struct HNode { char roomN[7]; //客房名称 float Price; //标准价格 float PriceL; //入住价格(默认值=标准价格*80%) int Beds; //床位数Beds char State[5]; //入住状态(值域:"空闲"、"入住"、"预订",默认值为"空闲") struct HNode *next; //指针域 }Hotel, *HLink; (1)实现创建客房信息链表函数void Build(HLink &H),输入(客房名称、标准价格、床位数),同时修改入住价格、入住状态为默认值,即入住价格=标准价格*80%,入住状态为”空闲”(提示:用strcpy()字符串拷贝函数)。为了提高程序调试效率,要求:用文件操作来输入客房信息(客房名称、标准价格、床位数); (2)实现输出客房信息函数void Exp(HLink H),输出所有客房的客房名称、标准价格、入住价格、床位数、入住状态; (3)函数int Find(HLink &H, char *roomN),查找房间名称为roomN的客房。如果找到,则返回该客房在链表中的位置序号(>=1),否则返回0。提示:用strcmp()字符串比较函数; (4)实现函数void updateH(HLink &H, int beds, char *state),将床位数为beds的客房入住状态改为state。提示:用strcpy()字符串拷贝函数; (5)函数void Add(HLink &H),将该链表中未入住的客房入住价格均加价20%; (6)求出入住价格最高的客房函数HLink FirstH(HLink &H),该函数内return语句返回入住价格最高的客房结点指针,返回前将该结点在链表中删除; (7)函数void MoveK1(HLink &H, int k),将单链表中倒数第k个结点移到第一个结点位置,注意:严禁采用先计算链表长度n再减k(即n-k)的方法; (8)函数void ReverseN2(HLink &H),将单链表的正中间位置结点之后的全部结点倒置的功能,注意:严禁采用先计算链表长度n再除以2(即n/2)的方法; (9)函数void SortPriceL(HLink &H),按照客房(入住价格,客房名称)升序排序; (10)函数void upBed(HLink &H,int beds),创建一个【床位数为beds的新结点】(还需输入:客房名称、标准价格等信息),使链表的形态为:【头结点】->【床位数>beds的结点】->【床位数为beds的新结点】->【床位数=1则输出该客房在链表中的位置序号,否则输出该客房不存在;输出(4)~(10)处理后的链表内容,其中(6)还要输出入住价格最高的客房信息。 可能用到的函数: 从文件中读取客房数据:fscanf(文件指针,"%s %f,%d",p->roomN,&p->Price,&p->Beds); 输出客房数据:printf("%s%8.1f%8.1f%6d%8s\n",p->roomN,p->Price,p->PriceL,p->Beds,p->State); 字符串赋值函数:char* strcpy(char *, const char *); 字符串比较函数:int strcmp(const char *, const char *) 实验二 串模式匹配算法(串实验) 实现功能:从主串中第K个字符起,求出子串在主串中首次出现的位置,即模式匹配或串匹配。要求用种模式匹配算法分别实现: 朴素的模式匹配算法(BF算法) KMP改进算法(Next[ ]) KMP改进算法(NextVal[ ]) 实验机时:8 设计要求: 首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。 程序运行后,给出5个菜单项的内容和输入提示: 1.输入主串、子串和匹配起始位置 2.朴素的模式匹配算法 3.KMP改进算法(Next[ ]) 4.KMP改进算法(NextVal[ ]) 0.退出管理系统 请选择0—4: 菜单设计要求:使用数字0—4来选择菜单项,其它输入则不起作用。 输出结果要求:输出各趟匹配详细过程(其中3、4,首先输出Next[ ]或者NextVal[ ]的各元素的数值),然后输出匹配总趟数、单个字符比较次数、匹配成功时的位置序号或者匹配失败提示信息。 实验 二叉树遍历与路径查找(二叉树实验) 实现功能:建立二叉树存储结构、求二叉树的先序遍历、求二叉树的中序遍历、求二叉树的后序遍历、求二叉树的层次遍历、求根到给定结点的路径。 实验机时:8 设计要求: 数据结构: typedef struct node{ char data; //数据域 struct node *lchild , *rchild; //左右孩子指针 }BinTNode, *BinTree; //树中结点类型 首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。 程序运行后,给出如下菜单项的内容和输入提示,使用数字0—6来选择菜单项,其它输入则不起作用: 1.建立二叉树存储结构 2.求二叉树的先序遍历 3.求二叉树的中序遍历 4.求二叉树的后序遍历 5.求二叉树的层次遍历 6.求给定结点的路径 0.退出系统 请选择0—6:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值