字符串
字符串就是一段文字:一个名字、门牌上的字、一整封信。从第 1 课起你就在显示字符串了,这一课学怎么把它拆开、再拼起来。
拼接和重复
+ 把两个字符串首尾接起来;* 把一个字符串重复几次。
1first = "灯火"2second = "小镇"3print(first + second)4print(first + " " + second)5print("-" * 20)6print("哈" * 3)
灯火小镇 灯火 小镇 -------------------- 哈哈哈
+ 自己不会加空格,要空格就自己加,像第二行那样。+ 两边都得是字符串:"灯 " + 3 会报 TypeError,要写成 "灯 " + str(3),或者用 f-string。
有多长
len() 数字符串里有几个字符。空格和标点也算,一个汉字算一个。
1word = "点灯人"2print(len(word))3print(len("你好,世界!"))4print(len(""))
3 6 0
"" 是空字符串:里面什么也没有,长度是 0。
一个一个字符地取
每个字符都有一个位置编号,叫下标。下标从 0 开始数。负数从后往前数:-1 是最后一个字符。
| 字符 | 灯 | 火 | 小 | 镇 |
|---|---|---|---|---|
| 下标 | 0 | 1 | 2 | 3 |
| 从后往前 | -4 | -3 | -2 | -1 |
1name = "灯火小镇"2print(name[0])3print(name[3])4print(name[-1])5print(name[4])
灯
镇
镇
Traceback (most recent call last):
File "main.py", line 5, in <module>
print(name[4])
IndexError: string index out of range发生了什么: 下标超出范围了:这里面没有那么多个。别忘了下标从 0 开始数。
"灯火小镇" 有 4 个字符,最后一个的下标是 3。取 name[4] 就报 IndexError。想要任何字符串的最后一个字符,用 [-1] 比先算长度省事。
切片
text[开始:结束] 取出字符串的一段:从「开始」取到「结束」,不包括「结束」那一个。不写「开始」就从头取,不写「结束」就取到最后。
1text = "欢迎来到灯火小镇"2print(text[0:4])3print(text[4:6])4print(text[:4])5print(text[4:])6print(text[-2:])
欢迎来到 灯火 欢迎来到 灯火小镇 小镇
可以这样想:数字指的是字符之间的缝。[0:4] 在第 0 条缝和第 4 条缝各切一刀,中间剩 4 个字符。而且 text[:4] + text[4:] 拼起来,永远是原来的整句。
这段代码显示什么?
1word = "春夏秋冬"2print(word[1:3])
从下标 1(夏)开始,到下标 3 之前停,所以取到的是下标 1 和 2:夏秋。
单个下标会越界报错,切片不会。超过结尾,只是取到的少一点,或者是个空字符串。
步长和反转
第三个数是步长:[::2] 每隔一个取一个。步长是 -1 就从后往前走,字符串就倒过来了。
1digits = "0123456789"2print(digits[::2])3print(digits[1::2])4print("我爱点灯"[::-1])
02468 13579 灯点爱我
[::-1] 是 Python 里反转字符串的常用写法,读作「整个,倒着来」。
字符串不能改
字符串里的哪个字符都能读,但不能就地换掉一个:
1name = "灯火小镇"2name[0] = "烟"
Traceback (most recent call last):
File "main.py", line 2, in <module>
name[0] = "烟"
TypeError: 'str' object does not support item assignment发生了什么: 类型不对:拿了一种东西去做另一种东西才能做的事。
字符串是不可变的:做出来以后就不会变。想「改」一个字符串,就用几段拼出一个新的,再存回同一个名字:
1name = "灯火小镇"2name = "烟" + name[1:]3print(name)
烟火小镇
特殊字符和长文字
第 1 课的反斜杠写法在所有字符串里都能用:\n 换行,\t 制表符,\" 引号。一个 \n 算一个字符。要写好几行的文字,用三个引号更方便:一直到后面的三个引号为止,换行和空格都原样保留。
1print(len("a\nb"))2sign = """灯火街3 7 号"""4print(sign)
3 灯火街 7 号
小技巧: 三引号字符串也是 Python 程序员在程序开头写长说明的方式。讲函数的时候还会见到它。
练一练
写好代码,点检查。提示随便看,实在想不出来再看答案。
姓和名
✓用下标和切片,把 full 分成姓和名,中间隔一个空格显示。
林 小雨
1full = "林小雨"2print(full)
倒过来
✓把 word 倒过来显示。
水来自海上
1word = "上海自来水"2print(word)
卡号尾号
✓只显示卡号的最后四位,放进下面这句话里。
尾号 3316 的卡
1card = "4921 7734 0058 3316"2print("尾号", card, "的卡")
这一课学会了
+拼接字符串,*重复;数字要先转换。len()数有几个字符;""是空字符串。text[0]是第一个字符,text[-1]是最后一个;超出范围报IndexError。text[开始:结束]切片,不包括「结束」那一个;两头都可以不写。text[::-1]把字符串倒过来。- 字符串不能改:要拼一个新的,而不是改其中一个字符。
- 三引号能写跨好几行的字符串。