每天一个知识点,带你自学NOAI,加入我们吧~
前面学了列表、字典、元组这些数据结构。但有一种数据你从第一课就在用——字符串。之前只是用它存文字、打印出来。这节课深入学字符串操作——切片、查找、替换,让字符串不只是一段文字。
字符串也能用索引
字符串和列表一样,是有顺序的序列。每个字符都有自己的索引,从0开始:
s = "Python"print(s[0])print(s[3])print(s[-1]) |
Phn
跟列表一样,s[0] 取第一个字符,s[-1] 取最后一个字符。
切片
想取一段连续的字符,用切片:s[start:end],取从 start 到 end-1 的部分,不包含 end。
s = "Python"print(s[0:3]) # 索引0、1、2print(s[2:]) # 从索引2到结尾print(s[:3]) # 从头到索引2 |
PytthonPyt
拆开看:
•s[0:3] — 取索引0、1、2,不包含3
•s[2:] — 省略end,从索引2一直取到结尾
•s[:3] — 省略start,从头取到索引2
切片就像剪绳子——你说从哪剪到哪,Python帮你剪下来一段。原来的绳子不变,你拿到的是剪下来的那一截。
常用字符串方法
字符串自带了很多好用的方法,用点号调用:
大小写转换
s = "Hello World"print(s.upper())print(s.lower()) |
HELLO WORLDhello world
去除空白和替换
s = " Hello "print(s.strip()) # 去掉两端空白s2 = "我喜欢苹果"print(s2.replace("苹果", "橘子")) |
Hello我喜欢橘子
分割和查找
sentence = "I love Python"words = sentence.split(" ") # 按空格切开print(words)print(sentence.find("Python")) # 找到了,返回起始索引print(sentence.find("Java")) # 没找到,返回-1 |
['I', 'love', 'Python']7-1
split 把字符串按分隔符切成一个列表,find 返回子串第一次出现的位置,找不到就返回-1。
f-string格式化
想把变量拼进字符串里,之前你可能用 + 号拼接。但更方便的方式是用f-string:
name = "小明"age = 13# 用+拼接,麻烦print("我叫" + name + ",今年" + str(age) + "岁")# 用f-string,简洁print(f"我叫{name},今年{age}岁") |
我叫小明,今年13岁我叫小明,今年13岁
在字符串引号前加一个 f,大括号 {} 里的变量会自动替换成它的值,不用手动转类型,不用加号拼。
字符串不能改
跟元组一样,字符串是不可变的。你不能直接修改其中某个字符:
s = "Python"s[0] = "p"# 报错!TypeError |
TypeError: 'str' object does not support item assignment
那 upper()、replace() 这些方法不是在"改"字符串吗?不是。它们是返回一个新字符串,原来的不变:
s = "hello"s.upper()print(s) # 还是hello,没变s = s.upper() # 要把结果存回去才行print(s) # HELLO |
helloHELLO
字符串方法不是"修改"原来的字符串,而是"复印一份再改"——原件不动,你拿到的是改好的复印件。
易错点
错误1切片的end不包含 — s[0:3] 取的是索引0、1、2,不包含3。很多初学者以为 s[0:3] 会取4个字符,其实只取3个。
错误2以为方法会修改原字符串 — s.upper() 不改 s 本身,要 s = s.upper() 才行。replace、strip 也一样。
动手试试
自己先想,想完了去香农平台上写代码跑一遍验证。
练习1:预测输出 下面这段代码运行后,屏幕上会输出什么?
提示:空格也算一个字符,占一个索引位置。 |
练习2:找bug 下面这段代码想把所有的"猫"替换成"狗",但运行后发现 s 没变。哪里出了问题?
提示:回头看看"字符串不能改"那一节。 |
练习3:写代码 给你一个字符串 sentence = "Python is fun and Python is easy",统计里面有多少个单词(按空格分隔),打印出来。 提示:先 split,再 len。 |
去平台上手写代码
字符串不只是存文字,还能切、能找、能替换。回顾一下:
•s[i] — 索引取单个字符
•s[a:b] — 切片取一段,不包含b
•upper()/lower()/strip()/replace()/split()/find() — 常用方法
•f"...{变量}" — f-string格式化
•字符串不可变 — 方法返回新字符串,不改原来的
这篇文章讲的是香农NOAI学习平台"Python基础"模块的第十一课。平台上有更多的练习题,写完代码点运行,对不对立刻就知道。
香农NOAI学习平台地址:shannon.arpa.school微信扫码登录就能用,免费。找到「Python基础」→「字符串」,从第一道题开始写。
下一篇讲模块——Python自带了很多现成的工具箱,比如数学计算、随机数,一句import就能用。

