尚学堂Python第一季---字符串
第二次课Python---字符串
字符串的本质:字符序列,不可变(无法对原字符串做任何修改),但可以将字符串的一部分复制到新创建的字符串,达到”看起来修改"的效果
字符串的编码
python3:Unicode
字符串:支持16位的Unicode,ascii是Unicode编码的子码
ord()---可将字符转化为对应的Unicode---ord("高"):39640
chr()---可以把十进制数字转化成对应的字符chr(66):"B"
引号创建字符串
可以使用:单引号或双引号
好处:可以创建本身含有引号的字符串,而不用使用转义字符 “I'm a teacher!"
连续三个单引号或三个双引号,可以创建多行字符串
空字符串---Python3允许有空字符串,字符长度为0,可以使用len(),查看长度
转义字符---”\+特殊字符",实现某些难以用字符表示的效果
字符串拼接
1.可以使用+将多个字符串拼接起来
如果+两边都是字符串,则拼接起来
如果+两边都是数值,则进行加法运算
如果+两边类型不同,报错
2.可以将多个字面字符串直接放到一起实现拼接---’啊啊‘’bb':‘啊啊bb'
字符串复制---“*”
不换行打印
print打印之后会自动换行,print(打印的内容对象,end = "任意字符串"),实现不换行打印
从控制台读取字符串---input()
str()---数字类型转化为字符串
调用print()函数时,解释器自动调用了str()将非字符串的对象转成了字符串。
使用【】提取字符
字符串的本质:字符序列,可以在字符串后面添加【】,在【】里面指定偏移量,可以提取该位置的单个字符
正向搜索:从左至右,字符串的第一个字符的偏移量为0,第二个为1,以此类推,最后一个为len(str) - 1
反向搜索:从右至左,字符串的最后一个自读的偏移量为-1,倒数第二个为-2,以此类推,第一个为-len(str)
replace()----字符串替换
字符串是“不可改变的,可以通过【】获得某个我位置的单个字符,但是不能对这单个字符进行替换,否则会报错,字符串不可改变,但是有时候需要替换某些字符,只能通过创建新的字符串来改变
从图片中的结果可以看到前后变量a的地址不同,说明我们创建了一个新的字符串对象,并指向了变量a,而不是修改了以前的字符串
slice--切片(快速的提取子字符串),标准格式:【start(起始偏移量,起始点:0):end(终止偏移量,终止点:end - 1):step(步长,即跳过几个单个字符进行提取)】
切片时,起始偏移量和终止偏移量不在[0,length -1]这个范围,起始偏移量小于0则会当做0,终止偏移量大于length -1则会被当成-1
split--分割(基于指定分隔符将字符串分隔成多个子字符串(存储到列表中),不指定分隔符,则默认为:空白字符(换行符/空格/制表符)
join--合并(用于将一系列子字符串连接起来(将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串)
+与join之间的区别:
”+“----去连接字符串
a = "abc" #这是一个对象
print(id(a))
a = a + "abc"
print(id(a)) #这是一个对象,前面与后面的print中输出的地址不同,说明这两个对象不是同一个对象
join---去连接字符串
b = ["sdfdf","dfj","weoro"]
b = "*".join(b)
print(id(b))
b = "你是一个笨蛋".join(b))
print(id(b))
字符串驻留机制和字符串的比较
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中,python支持字符串驻留机制,对于符合标识符规则的字符串会启用字符串驻留机制
==和!=:用来比较两个字符串的值是否相同
is和not is :用来比较两个字符串是否为同一个对象,它们的地址可以使用id()来查看
in/not in ---判断某个字符(子字符串)是否存在于字符串中
字符串中常见的方法
第一类:查找方法
第二类:去除首尾信息
第三类:大小写转换
第四类:格式排版
字符串格式化---format
基本语法:{}和:来代替以前的%
format函数可以接受不限个参数,位置可以不按顺序
通过{索引}/{参数名},直接映射参数值,实现对字符串的格式化
填充与对齐
^ < > 分别代表:剧中,左对齐,右对齐,后面带宽度
:即冒号之后带填充的字符,只能是一个字符,不指定的话默认是用空格填充
数值填充与对齐
浮点数:f
整数:d
可变字符串
python中,字符串属于不可变对象,不支持原地修改,如果修改其中的值,就相当于重新创建了了一个字符串对象。但是,经常确实需要原地修改字符串的值,所可以使用:
io.StringIO
array数组
作业:
x1 = 1
y1 = 2
a = 3
b = 4
pyt_1 = (5+10*x1)//5 + (13*(y1 - 1)*(a+b))//x1 + 9*(5//x1+((12+x1)//y1))
print(pyt_1)
从控制台输入用户的月薪,进行运算计算出年薪。打印输出用户的年薪
使用字符串复制,用计算机打印出“爱你一百遍”,打印100 次
将”to be or not to be”字符串倒序输出
将”sxtsxtsxtsxtsxt”字符串中所有的 s输出
判断如下输出结果,并文字解释原因:
>>> a = "abd_33"
>>> b = "abd_33"
>>> c = "dd#"
>>> d = "dd#"
>>> a is b #输出 true or false? ---true
>>> c is d #输出true or false?----false,因为“#"不是标识符
写出如下代码打印的结果:
>>> c = "名字是{name},年龄是{age}"
>>> c.format(age=19,name='高淇')
输出为:名字是高淇,年龄是19