目 录CONTENT

文章目录

Python(十九) 中的字符串

Python(十九) 中的字符串

一、什么是字符串

字符串,英文叫 string。

在 Python 中,字符串就是一串文本内容。

通俗地说:

凡是用来表示文字、符号、数字文本的内容,都可以用字符串表示。

例如:

name = "小明"
message = "欢迎学习 Python"
phone = "13800138000"

这里的 "小明""欢迎学习 Python""13800138000" 都是字符串。

注意:

"123" 是字符串。
123 是整数。

它们看起来相似,但类型不同。

示例:

print(type("123"))
print(type(123))

输出结果:

<class 'str'>
<class 'int'>

教学时可以这样讲:

只要被引号包起来,就是字符串。

二、字符串的创建方式

Python 中可以使用单引号、双引号或三引号创建字符串。

1. 单引号

name = '小明'
print(name)

2. 双引号

name = "小明"
print(name)

单引号和双引号的效果基本一样。

推荐习惯:

同一个项目中尽量保持风格统一。

3. 三引号

三引号可以表示多行字符串。

可以使用三个单引号:

text = '''第一行
第二行
第三行'''

print(text)

也可以使用三个双引号:

text = """第一行
第二行
第三行"""

print(text)

三引号常用于:

多行文本
函数说明文档
较长的字符串内容

三、字符串中的引号问题

如果字符串内容本身包含引号,要注意外层引号和里面的引号不要冲突。

示例:

text = "他说:'你好'"
print(text)

输出结果:

他说:'你好'

也可以这样写:

text = '他说:"你好"'
print(text)

如果外层和里面都想使用同一种引号,就需要转义。

text = "他说:\"你好\""
print(text)

这里的 \" 表示普通的双引号字符,不表示字符串结束。

四、转义字符

转义字符是用反斜杠 \ 开头的特殊字符。

常见转义字符:

\n    换行
\t    制表符,相当于按 Tab 键
\\    表示一个反斜杠
\'    表示一个单引号
\"    表示一个双引号

示例:

print("第一行\n第二行")

输出结果:

第一行
第二行

示例:

print("姓名\t年龄")
print("小明\t18")

输出结果大致为:

姓名    年龄
小明    18

如果想输出路径:

path = "C:\\Users\\Student\\Desktop"
print(path)

输出结果:

C:\Users\Student\Desktop

五、原始字符串 r-string

有时候字符串中有很多反斜杠,比如 Windows 路径、正则表达式。

这时可以使用原始字符串。

写法是在字符串前面加 r

path = r"C:\Users\Student\Desktop"
print(path)

输出结果:

C:\Users\Student\Desktop

r 的意思是 raw,表示原始字符串。

通俗理解:

加了 r 以后,大多数反斜杠会按照普通字符处理。

注意:

原始字符串不能以单个反斜杠结尾。

例如下面写法不推荐:

path = r"C:\Users\Student\"

因为最后的反斜杠会影响结尾引号。

六、字符串索引

字符串中的每一个字符都有位置编号,这个编号叫索引。

Python 中的索引从 0 开始。

示例:

text = "Python"

每个字符的位置如下:

字符: P  y  t  h  o  n
索引: 0  1  2  3  4  5

获取某个位置的字符:

text = "Python"

print(text[0])
print(text[1])
print(text[5])

输出结果:

P
y
n

可以这样记:

第一个字符的索引是 0,不是 1。

七、负数索引

Python 也支持负数索引。

负数索引从右往左数。

示例:

text = "Python"

对应关系:

字符:   P   y   t   h   o   n
正索引: 0   1   2   3   4   5
负索引:-6  -5  -4  -3  -2  -1

示例:

text = "Python"

print(text[-1])
print(text[-2])

输出结果:

n
o

教学时可以这样讲:

text[-1] 永远表示最后一个字符。

八、索引越界

如果访问不存在的位置,会报错。

示例:

text = "Python"

print(text[10])

会报错:

IndexError: string index out of range

原因:

"Python" 只有 6 个字符,最大索引是 5。
text[10] 超出了范围。

避免方法:

text = "Python"

if len(text) > 10:
    print(text[10])
else:
    print("索引超出范围")

九、字符串切片

切片就是从字符串中取出一部分内容。

基本格式:

字符串[开始位置:结束位置]

注意:

包含开始位置。
不包含结束位置。

示例:

text = "Python"

print(text[0:2])

输出结果:

Py

原因:

text[0:2] 从索引 0 开始,到索引 2 之前结束。
所以取到索引 0 和索引 1 的字符。

可以这样记:

左闭右开:包含左边,不包含右边。

十、切片省略写法

1. 省略开始位置

text = "Python"

print(text[:3])

输出结果:

Pyt

text[:3] 表示:

从开头取到索引 3 之前。

2. 省略结束位置

text = "Python"

print(text[2:])

输出结果:

thon

text[2:] 表示:

从索引 2 开始,一直取到最后。

3. 开始和结束都省略

text = "Python"

print(text[:])

输出结果:

Python

text[:] 表示取整个字符串。

十一、带步长的切片

切片还可以加第三个参数,叫步长。

格式:

字符串[开始位置:结束位置:步长]

示例:

text = "abcdefg"

print(text[0:7:2])

输出结果:

aceg

解释:

从索引 0 到索引 7 之前,每隔 2 个位置取一次。

也可以省略开始和结束:

text = "abcdefg"

print(text[::2])

输出结果:

aceg

十二、使用切片反转字符串

步长可以是负数。

如果步长是 -1,可以反转字符串。

示例:

text = "Python"

print(text[::-1])

输出结果:

nohtyP

解释:

text[::-1] 表示从右往左取整个字符串。

这是 Python 中很常见的写法。

十三、字符串长度 len()

len() 可以获取字符串长度,也就是字符串中字符的个数。

示例:

text = "Python"

print(len(text))

输出结果:

6

中文字符也按字符数量计算:

text = "你好"

print(len(text))

输出结果:

2

注意:

len() 计算的是字符数量,不是字节数量。

十四、字符串拼接

字符串可以使用 + 拼接。

示例:

first_name = "张"
last_name = "三"

name = first_name + last_name
print(name)

输出结果:

张三

也可以拼接句子:

name = "小明"

message = "你好," + name
print(message)

输出结果:

你好,小明

注意:

字符串只能和字符串直接相加。

错误示例:

age = 18

message = "年龄是:" + age

会报错,因为 age 是整数。

正确写法:

age = 18

message = "年龄是:" + str(age)
print(message)

或者使用格式化:

age = 18

message = f"年龄是:{age}"
print(message)

十五、字符串重复

字符串可以使用 * 重复。

示例:

print("Python" * 3)

输出结果:

PythonPythonPython

再如:

print("-" * 20)

输出结果:

--------------------

这个写法常用于输出分隔线。

十六、判断字符串是否包含某内容

可以使用 in 判断一个字符串是否包含另一个字符串。

示例:

text = "I love Python"

print("Python" in text)
print("Java" in text)

输出结果:

True
False

也可以使用 not in

text = "I love Python"

if "Java" not in text:
    print("没有找到 Java")

十七、遍历字符串

字符串可以使用 for 循环逐个字符遍历。

示例:

text = "Python"

for ch in text:
    print(ch)

输出结果:

P
y
t
h
o
n

这里的 ch 是每次循环取到的一个字符。

教学时可以这样讲:

字符串可以看作由一个个字符组成的序列。
所以它可以被索引、切片和遍历。

十八、字符串是不可变对象

Python 中的字符串是不可变对象。

意思是:

字符串一旦创建,就不能直接修改其中某一个字符。

错误示例:

text = "Python"

text[0] = "J"

这会报错:

TypeError: 'str' object does not support item assignment

如果想得到 "Jython",可以创建一个新字符串:

text = "Python"

new_text = "J" + text[1:]

print(new_text)

输出结果:

Jython

教学时可以这样讲:

字符串不能原地修改。
所谓修改字符串,本质上通常是创建一个新的字符串。

十九、常用字符串方法

字符串方法就是字符串自带的功能。

调用格式:

字符串.方法名()

例如:

text = "python"

print(text.upper())

输出结果:

PYTHON

下面介绍常见方法。

二十、大小写转换

1. upper()

把字符串转换成大写。

text = "python"

print(text.upper())

输出结果:

PYTHON

2. lower()

把字符串转换成小写。

text = "PYTHON"

print(text.lower())

输出结果:

python

3. title()

把每个单词首字母变成大写。

text = "hello python"

print(text.title())

输出结果:

Hello Python

4. capitalize()

把字符串第一个字符变成大写。

text = "hello python"

print(text.capitalize())

输出结果:

Hello python

注意:

这些方法不会修改原字符串,而是返回一个新字符串。

示例:

text = "python"

text.upper()

print(text)

输出结果:

python

如果想保存转换结果,需要赋值:

text = "python"

text = text.upper()

print(text)

二十一、去除空白字符

1. strip()

去除字符串两边的空白字符。

text = "  Python  "

print(text.strip())

输出结果:

Python

2. lstrip()

去除左边空白字符。

text = "  Python  "

print(text.lstrip())

3. rstrip()

去除右边空白字符。

text = "  Python  "

print(text.rstrip())

常见使用场景:

username = input("请输入用户名:").strip()

这样可以避免用户不小心输入前后空格。

二十二、查找字符串

1. find()

find() 用于查找子字符串的位置。

如果找到,返回第一次出现的索引。

如果找不到,返回 -1

示例:

text = "I love Python"

print(text.find("Python"))
print(text.find("Java"))

输出结果:

7
-1

2. index()

index() 也可以查找位置。

如果找到,返回索引。

如果找不到,会报错。

text = "I love Python"

print(text.index("Python"))

输出结果:

7

如果:

print(text.index("Java"))

会报错。

教学建议:

初学阶段查找字符串,优先使用 find(),因为找不到时返回 -1,不会直接报错。

3. count()

count() 用于统计某个子字符串出现的次数。

text = "banana"

print(text.count("a"))
print(text.count("na"))

输出结果:

3
2

二十三、替换字符串 replace()

replace() 用于替换字符串中的内容。

格式:

字符串.replace(旧内容, 新内容)

示例:

text = "I love Java"

new_text = text.replace("Java", "Python")

print(new_text)

输出结果:

I love Python

注意:

replace() 不会修改原字符串,而是返回一个新字符串。

示例:

text = "I love Java"

text.replace("Java", "Python")

print(text)

输出结果:

I love Java

如果想保存结果,需要赋值:

text = text.replace("Java", "Python")

二十四、拆分字符串 split()

split() 用于把一个字符串拆分成列表。

示例:

text = "apple,banana,orange"

fruits = text.split(",")

print(fruits)

输出结果:

['apple', 'banana', 'orange']

如果不指定分隔符,默认按空白字符拆分。

text = "I love Python"

words = text.split()

print(words)

输出结果:

['I', 'love', 'Python']

常见使用场景:

data = "小明,18,北京"

name, age, city = data.split(",")

print(name)
print(age)
print(city)

二十五、连接字符串 join()

join() 用于把列表中的多个字符串连接成一个字符串。

示例:

words = ["I", "love", "Python"]

text = " ".join(words)

print(text)

输出结果:

I love Python

再如:

fruits = ["apple", "banana", "orange"]

text = ",".join(fruits)

print(text)

输出结果:

apple,banana,orange

注意:

join() 连接的列表中必须都是字符串。

错误示例:

numbers = [1, 2, 3]

text = ",".join(numbers)

正确写法:

numbers = [1, 2, 3]

text = ",".join(str(num) for num in numbers)

print(text)

输出结果:

1,2,3

二十六、判断开头和结尾

1. startswith()

判断字符串是否以指定内容开头。

filename = "report.pdf"

print(filename.startswith("report"))

输出结果:

True

2. endswith()

判断字符串是否以指定内容结尾。

filename = "report.pdf"

print(filename.endswith(".pdf"))

输出结果:

True

常见使用场景:

filename = "photo.jpg"

if filename.endswith(".jpg"):
    print("这是 JPG 图片")

二十七、判断字符串内容类型

常见方法:

isdigit()    是否全是数字
isalpha()    是否全是字母
isalnum()    是否由字母或数字组成
isspace()    是否全是空白字符
islower()    是否全是小写
isupper()    是否全是大写

示例:

print("123".isdigit())
print("abc".isalpha())
print("abc123".isalnum())
print("   ".isspace())

输出结果:

True
True
True
True

常见使用场景:判断用户输入是否是数字。

age = input("请输入年龄:")

if age.isdigit():
    age = int(age)
    print("年龄是:", age)
else:
    print("请输入正确的数字")

注意:

isdigit() 适合判断普通正整数。
它不能直接判断负数或小数。

例如:

print("-3".isdigit())
print("3.14".isdigit())

输出结果:

False
False

二十八、字符串格式化

字符串格式化就是把变量的值放进字符串中。

比如我们想输出:

小明今年18岁

如果姓名和年龄来自变量,就需要格式化。

Python 中常见格式化方式有三种:

1. f-string
2. format()
3. % 格式化

现在最推荐的是 f-string。

二十九、f-string 格式化

f-string 是 Python 3.6 开始支持的格式化方式。

写法是在字符串前面加 f,然后用 {} 放变量或表达式。

示例:

name = "小明"
age = 18

message = f"{name}今年{age}岁"

print(message)

输出结果:

小明今年18岁

也可以在 {} 中写表达式:

a = 3
b = 5

print(f"{a} + {b} = {a + b}")

输出结果:

3 + 5 = 8

教学时可以这样讲:

f-string 就是把变量直接塞进字符串里。

三十、f-string 控制小数位数

格式:

{变量:.位数f}

示例:

price = 3.14159

print(f"价格是:{price:.2f}")

输出结果:

价格是:3.14

这里的 .2f 表示保留 2 位小数。

再如:

score = 95.678

print(f"成绩是:{score:.1f}")

输出结果:

成绩是:95.7

三十一、f-string 设置宽度和对齐

可以设置输出宽度。

示例:

name = "Tom"

print(f"|{name:10}|")

输出大致为:

|Tom       |

表示这个位置占 10 个字符宽度,默认左对齐或根据类型对齐。

常见对齐方式:

<    左对齐
>    右对齐
^    居中对齐

示例:

name = "Tom"

print(f"|{name:<10}|")
print(f"|{name:>10}|")
print(f"|{name:^10}|")

输出效果:

|Tom       |
|       Tom|
|   Tom    |

也可以指定填充字符:

name = "Tom"

print(f"|{name:*^10}|")

输出结果:

|***Tom****|

三十二、format() 格式化

format() 是另一种常见格式化方式。

示例:

name = "小明"
age = 18

message = "{}今年{}岁".format(name, age)

print(message)

输出结果:

小明今年18岁

也可以指定位置:

message = "{0}喜欢{1},{1}也喜欢{0}".format("小明", "Python")

print(message)

输出结果:

小明喜欢Python,Python也喜欢小明

也可以使用名字:

message = "{name}今年{age}岁".format(name="小明", age=18)

print(message)

输出结果:

小明今年18岁

三十三、% 格式化

% 格式化是较早的字符串格式化方式。

示例:

name = "小明"
age = 18

message = "%s今年%d岁" % (name, age)

print(message)

输出结果:

小明今年18岁

常见占位符:

%s    字符串
%d    整数
%f    浮点数

保留两位小数:

price = 3.14159

print("%.2f" % price)

输出结果:

3.14

教学建议:

现在新代码更推荐使用 f-string。
format() 和 % 格式化了解即可,阅读旧代码时会遇到。

三十四、三种格式化方式对比

同一个需求:输出姓名和年龄。

1. f-string

name = "小明"
age = 18

print(f"{name}今年{age}岁")

2. format()

name = "小明"
age = 18

print("{}今年{}岁".format(name, age))

3. % 格式化

name = "小明"
age = 18

print("%s今年%d岁" % (name, age))

建议:

初学者优先掌握 f-string。

原因:

写法直观。
变量放在哪里,结果就显示在哪里。

三十五、字符串与 input()

input() 接收到的内容永远是字符串。

示例:

age = input("请输入年龄:")

print(type(age))

即使用户输入的是 18age 也是字符串 "18"

如果要进行数字计算,需要转换类型:

age = input("请输入年龄:")
age = int(age)

print(age + 1)

教学提醒:

input() 得到的是字符串。
要计算就转成 int 或 float。

三十六、字符串和编码简单了解

计算机底层只能处理数字。

字符串中的文字也需要用数字表示。

这个转换规则就叫编码。

常见编码:

UTF-8
GBK
ASCII

Python 3 中字符串默认支持 Unicode,可以很好地处理中文。

示例:

text = "你好,Python"

print(text)
print(len(text))

初学阶段只需要记住:

Python 3 对中文支持很好。
保存文件时通常使用 UTF-8 编码。

如果以后学习文件读写,会经常看到:

open("data.txt", "r", encoding="utf-8")

这里的 encoding="utf-8" 就是指定编码。

三十七、常见注意事项

1. 字符串要用引号包起来

错误写法:

name = 小明

正确写法:

name = "小明"

2. 单引号和双引号要成对出现

错误写法:

text = "Python'

正确写法:

text = "Python"

3. 索引从 0 开始

text = "Python"

print(text[0])

输出:

P

不是 y

4. 切片结束位置不包含在内

text = "Python"

print(text[0:2])

输出:

Py

取到索引 0 和 1,不取索引 2。

5. 字符串不能直接修改某个字符

错误写法:

text = "Python"
text[0] = "J"

正确思路:

text = "Python"
text = "J" + text[1:]

6. 字符串和数字不能直接用 + 拼接

错误写法:

age = 18
print("年龄:" + age)

正确写法:

age = 18
print("年龄:" + str(age))

更推荐:

age = 18
print(f"年龄:{age}")

7. 字符串方法通常返回新字符串

示例:

text = "python"
text.upper()
print(text)

输出:

python

因为 upper() 返回的是新字符串,没有改变原字符串。

应该写:

text = text.upper()

8. split() 得到的是列表

text = "a,b,c"
result = text.split(",")

print(result)

输出:

['a', 'b', 'c']

9. join() 只能连接字符串

错误写法:

numbers = [1, 2, 3]
print(",".join(numbers))

正确写法:

numbers = [1, 2, 3]
print(",".join(str(num) for num in numbers))

10. f-string 前面不要忘记写 f

错误写法:

name = "小明"
print("{name},你好")

输出结果:

{name},你好

正确写法:

name = "小明"
print(f"{name},你好")

输出结果:

小明,你好

三十八、课堂示例

示例 1:获取姓名首字母

name = "Python"

first = name[0]

print(first)

讲解重点:

索引从 0 开始。
name[0] 表示第一个字符。

示例 2:获取文件扩展名

filename = "report.pdf"

ext = filename[-4:]

print(ext)

输出结果:

.pdf

讲解重点:

负数索引可以从右边取字符。
切片可以取出字符串的一部分。

示例 3:判断是否是手机号

phone = input("请输入手机号:").strip()

if len(phone) == 11 and phone.isdigit():
    print("手机号格式基本正确")
else:
    print("手机号格式错误")

讲解重点:

len() 判断长度。
isdigit() 判断是否全是数字。
strip() 去除前后空格。

示例 4:统计某个字符出现次数

text = "banana"

count = text.count("a")

print(count)

输出结果:

3

示例 5:处理逗号分隔的数据

data = "小明,18,北京"

name, age, city = data.split(",")

print(f"姓名:{name}")
print(f"年龄:{age}")
print(f"城市:{city}")

讲解重点:

split() 可以把字符串拆成列表。
f-string 可以方便地格式化输出。

示例 6:生成欢迎语

name = input("请输入姓名:").strip()

message = f"欢迎你,{name}!"

print(message)

讲解重点:

input() 获取用户输入。
strip() 去除多余空格。
f-string 生成完整句子。

示例 7:隐藏手机号中间四位

phone = "13800138000"

hidden_phone = phone[:3] + "****" + phone[7:]

print(hidden_phone)

输出结果:

138****8000

讲解重点:

字符串不能直接修改。
可以通过切片和拼接生成新字符串。

三十九、课堂练习

练习 1:输出字符串第一个和最后一个字符

要求:给定字符串 "Python",输出第一个字符和最后一个字符。

参考代码:

text = "Python"

print(text[0])
print(text[-1])

练习 2:截取字符串

要求:从 "Hello Python" 中截取 "Python"

参考代码:

text = "Hello Python"

print(text[6:])

练习 3:反转字符串

要求:把 "Python" 反转成 "nohtyP"

参考代码:

text = "Python"

print(text[::-1])

练习 4:去除用户输入前后空格

要求:输入用户名,去除前后空格后输出。

参考代码:

username = input("请输入用户名:").strip()

print(username)

练习 5:判断文件类型

要求:判断文件名是否以 .txt 结尾。

参考代码:

filename = "readme.txt"

if filename.endswith(".txt"):
    print("这是文本文件")
else:
    print("不是文本文件")

练习 6:把列表连接成字符串

要求:把 ["apple", "banana", "orange"] 连接成 "apple,banana,orange"

参考代码:

fruits = ["apple", "banana", "orange"]

text = ",".join(fruits)

print(text)

练习 7:格式化输出成绩

要求:输出姓名和成绩,成绩保留 1 位小数。

参考代码:

name = "小明"
score = 95.678

print(f"{name}的成绩是{score:.1f}")

练习 8:统计一句话中某个词是否出现

要求:判断 "I love Python" 中是否包含 "Python"

参考代码:

text = "I love Python"

if "Python" in text:
    print("包含 Python")
else:
    print("不包含 Python")

四十、教学建议

讲解字符串时,可以按照下面顺序:

1. 先说明字符串就是文本
2. 讲单引号、双引号、三引号
3. 讲转义字符和原始字符串
4. 讲索引,重点强调从 0 开始
5. 讲负数索引
6. 讲切片,重点强调左闭右开
7. 讲字符串不可变
8. 讲常用字符串方法
9. 讲 split 和 join
10. 讲 f-string 格式化
11. 最后通过手机号、文件名、用户输入等例子练习

可以用下面的问题引导学生:

为什么 text[0] 是第一个字符?
为什么 text[0:3] 不包含第 3 个索引?
字符串能不能像列表一样直接修改某个字符?
input() 得到的是字符串还是数字?
为什么 f-string 前面要写 f?

教学重点建议放在:

字符串创建
索引
切片
不可变性
常用方法
split 和 join
f-string 格式化

四十一、总结

字符串是 Python 中用来表示文本的数据类型。

可以这样记:

字符串:用引号包起来的文本
索引:根据位置取一个字符
切片:根据范围取一部分字符串
方法:字符串自带的常用功能
格式化:把变量放进字符串中

字符串常见操作:

text[0]        获取第一个字符
text[-1]       获取最后一个字符
text[1:4]      获取一部分内容
text[::-1]     反转字符串
len(text)      获取长度
"a" in text    判断是否包含
text.split()   拆分字符串
" ".join(list) 连接字符串

常用格式化方式:

name = "小明"
age = 18

print(f"{name}今年{age}岁")

最重要的注意事项:

1. 字符串要用引号包起来
2. 索引从 0 开始
3. 切片结束位置不包含在内
4. 字符串是不可变对象
5. 字符串和数字不能直接用 + 拼接
6. 字符串方法通常返回新字符串
7. input() 获取到的是字符串
8. 新代码优先使用 f-string 格式化

一句话总结:

字符串是 Python 中处理文本的基础,掌握索引、切片、常用方法和格式化,就能完成大多数文本处理任务。
0
博主关闭了当前页面的评论