字符串操作
- 连接(+)和重复(*)
- 比较运算符
- 单字符字符串的比较
- 多字符字符串的比较
- in 运算符
- 字符串集合是不可变的。
- 自测练习
连接(+)和重复(*)
+:连接符,能够将两个字符串连接在一起,得到一个新的字符串对象。
*:重复符,重复符需要一个字符串和一个整数,得到整数个字符串相连接的新字符串。
连接字符时,根据+前后的字符串顺序去连接。
复制字符时,数字放前面也没关系,例如:3*myString
连接字符不能连接字符串和数字,重复字符时不能对两个字符串进行操作
对比加法运算符和乘法运算符。
Python会根据运算符前后的对象是什么类型来决定+或 * 此时代表什么运算符。
例如,当+前后都是数字时,Python会对两个数字进行相加操作。当识别到+前后都是字符串时,Python会对两个字符串进行连接操作。
同理,当 * 前后都是数字时,会进行乘法运算。当 * 前后一个是字符串一个是数字时,会进行字符串的重复运算。
在Python中可以使用type()函数获取当前对象的类型。再利用int() float() str()对当前对象进行类型转换,确保运算正确。
比较运算符
单字符字符串的比较
比较两个单字符字符串,可以使用“”运算符。比较时区分大小写。
如:aa为True,但a==A为Flase
比较单字符字符串大小时,比较的是字符的ASCII值大小。
下面是常见字符的ASCII值。
可以使用函数ord()得到字符的ASCII值,也可以使用chr()获取ASCII值对应的字符。
ord(A)=65 ord(a)=97,所以‘a’>‘A’
技巧:对于26个字母来说,都是大写字母,排序前的ASCII的就小。都是小写字母,排序前的ASCII的也小。但一个大写字母和一个小写字母,大写一定比小写小。(其实记住A和a的ASCII值就好了)
多字符字符串的比较
思路:并行检查两个字符串中位于同一位置的字符,然后向前推进,直到找到两个不同的字符为止。
(1)从两个字符串索引值为0的位置开始(最左边第一个字符)
(2)比较位于当前的两个单字符(单字符比较方法如上)
- 相等,两个字符串的索引值加1,回到(2)
- 不相等,返回这两个字符的比较结果,作为字符串比较结果
(3)如果两个字符串到第一个字符串结束时都相等,那么较长的字符串更大。例如"ab"<“abc”
例如:“abc”<"cde"为True
“abc”<"abd"为True
" "<"a"为True(空字符串可以视为长度为0,比任何字符串都小)
in 运算符
in在。。。里面
在这里用于检查集合的成员。一个元素在不在这个集合里。
使用方法:被检查的元素 in 集合名
如果在,结果是True,否则为Flase
w="hello"
"a" in w #返回Flase
"e" in w #返回True
"ll" in w #返回True
"eo" in w #返回Flase
注意:如果被检测元素是多字符字符串,必须集合中有按照这种顺序排序的才算True
字符串集合是不可变的。
前面说字符串是可以索引的,例如a[0]是字符串的第一个元素。
也说了=是赋值语句,能将右边的内容复制给左边。
但两者结合在一起就会出错。
不能通过a[0]="a"这种形式去修改字符串的内容。
已经创建的字符串时不可修改的。
如果想要修改一个变量相关联的字符串内容,可以用未被修改的切片和修改内容连接得到一个新的字符串内容来直接取代原来的内容。如把“Hello”修改成“Jello”
myString="Hello"
myString="J"+myString[1:] #这里[1:]可以得到第2个元素一直到最后的切片,“ello”
#用“J”+“ello”得到“Jello”,再赋值给myString
自测练习
【参考答案】
分析代码:
第4行的布尔表达式是标号indxInt小于字符串长度-1时
将标号索引值和下一个值的字符进行比较,前面大于后面就把当前字符放到resultStr中,否则,重复当前的resultStr两次。
(a)"abc"前面的都大于后面的,所以执行的都是重复符号的内容,resultStr一开始为空,最后也是空。结果:“”
(b)c>b,resultStr=“c” b>a resultStr=“cb” 结果为“cb”
(c)c>a,resultStr=“c” a<b resultStr=“cc” 结果为“cc”
(d)indxInt一直等于0,while循环永不停止
(e)在最后一次判断时,my(indxInt+1)的索引值会超出范围。