跟着NOAI考纲学Python,学完就能考,第11课

跟着NOAI考纲学Python,学完就能考,第11课

本文核心观点
NOAI 自学 Python 系列第 11 课:字符串切片、split/join/strip/replace、format 与 f-string 字符串格式化。

跟着NOAI考纲学Python,学完就能考,第11课

每天一个知识点,带你自学NOAI,加入我们吧~

前面学了列表、字典、元组这些数据结构。但有一种数据你从第一课就在用——字符串。之前只是用它存文字、打印出来。这节课深入学字符串操作——切片、查找、替换,让字符串不只是一段文字。

字符串也能用索引

字符串和列表一样,是有顺序的序列。每个字符都有自己的索引,从0开始:

s = "Python"
print(s[0])
print(s[3])
print(s[-1])

P
h
n

跟列表一样,s[0] 取第一个字符,s[-1] 取最后一个字符。

切片

想取一段连续的字符,用切片s[start:end],取从 start 到 end-1 的部分,不包含 end

s = "Python"
print(s[0:3])  # 索引0、1、2
print(s[2:])   # 从索引2到结尾
print(s[:3])   # 从头到索引2

Pyt
thon
Pyt

拆开看:

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 WORLD
hello 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

hello
HELLO

字符串方法不是"修改"原来的字符串,而是"复印一份再改"——原件不动,你拿到的是改好的复印件。

易错点

错误1切片的end不包含 — s[0:3] 取的是索引0、1、2,不包含3。很多初学者以为 s[0:3] 会取4个字符,其实只取3个。

错误2以为方法会修改原字符串 — s.upper() 不改 s 本身,要 s = s.upper() 才行。replace、strip 也一样。

动手试试

自己先想,想完了香农平台上写代码跑一遍验证。

练习1:预测输出

下面这段代码运行后,屏幕上会输出什么?

s = "Hello World"
print(s[0:5])
print(s[6:].upper())

提示:空格也算一个字符,占一个索引位置。

练习2:找bug

下面这段代码想把所有的"猫"替换成"狗",但运行后发现 s 没变。哪里出了问题?

s = "我家有一只猫"
s.replace("猫""狗")
print(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就能用。

微信二维码

扫码备注【NOAI】加交流群