CC++ & Algorithm

Python字符串基础

中等0
语言版本:C++
概述:把文字组成的“项链”装进变量里,学会创建、拼接和获取单个字符。

Python字符串:玩转文字的基础技能

当我们写作文或记笔记时,会用到一串文字。在Python中,这种由文字组成的序列叫做字符串(string)。字符串就像一条项链,每个字符(字母、数字、符号、空格)是项链上的一颗珠子,整条项链就是字符串。字符串可以用来存储你的名字、一句问候、一段对话,甚至是一整篇作文。它是编程中最常用的数据之一,无论是显示信息、处理用户输入还是读写文件,都离不开它。


1. 如何创建字符串?

创建字符串非常简单:用单引号 ' 或双引号 " 把文字括起来就行。单引号和双引号基本一样,你可以根据喜好选择。如果字符串里已经有单引号,就用双引号包起来,反之亦然。

# 用双引号创建字符串
greeting = "你好,世界!"
# 用单引号创建字符串
name = '小明'
print(greeting)        # 输出:你好,世界!

# 字符串里包含单引号,外面用双引号
sentence = "小明说:'你好!'"
print(sentence)        # 输出:小明说:'你好!'

# 字符串里包含双引号,外面用单引号
sentence2 = '他说:"今天真开心"'
print(sentence2)       # 输出:他说:"今天真开心"

# 空字符串:一对引号中间什么都没有
empty = ""             # 空字符串,表示“没有文字”

常见错误1:忘记写引号,Python会认为变量名,从而报错。比如 hello = Hello 会报 NameError常见错误2:引号不配对,比如 'hello" 会报语法错误。一定要成对出现。


2. 字符串的拼接与重复

拼接(用 + 号)

用加号 + 可以把多个字符串像火车车厢一样连在一起,形成更长的字符串。这在组成一句话时非常有用。

# 定义几个词
first = "我爱"       # 字符串变量
second = "编程"      # 字符串变量
# 用 + 拼接
sentence = first + second
print(sentence)      # 输出:我爱编程

# 也可以直接拼接数值,但要先转成字符串
year = 2025
message = "今年是" + str(year) + "年"   # 用 str() 把数字变成字符串
print(message)      # 输出:今年是2025年

常见错误:字符串和数字直接拼接会报错!比如 "我今年" + 12 会报 TypeError。必须把数字用 str() 转为字符串。

重复(用 * 号)

用乘号 * 可以让一个字符串重复指定的次数,就像复印机一样。这在制作重复的符号或表情时特别方便。

# 重复3次
laugh = "哈" * 3
print(laugh)        # 输出:哈哈哈

# 用重复做分隔线
line = "-" * 20
print(line)         # 输出:--------------------

# 下课后同学们欢呼
cheer = "加油!" * 5
print(cheer)        # 输出:加油!加油!加油!加油!加油!

3. 获取字符串中的单个字符

和排队买零食一样,每个同学(字符)都有一个位置(索引)。在Python中,索引从 0 开始计起,第一个字符的位置是0,第二个是1,依此类推。同时,Python还支持负数索引,其中 -1 表示最后一个字符,-2 表示倒数第二个。

# 以 "Python" 为例
word = "Python"
print(word[0])   # 输出:P(第一个字符)
print(word[1])   # 输出:y(第二个字符)
print(word[2])   # 输出:t(第三个字符)
print(word[-1])  # 输出:n(倒数第一个字符,即最后一个)
print(word[-2])  # 输出:o(倒数第二个字符)

常见错误:索引越界。比如 word[100] 会报 IndexError,因为字符串只有6个字符,索引不能超过5(或小于-6)。写代码时一定要保证索引在有效范围内。

重要:字符串是不可变的。你不能像给列表赋值那样修改字符串中的某个字符。比如下面这样写会报错:

# word = "Python"
# word[0] = "J"   # 错误!字符串不可修改

这就像项链上的珠子是焊死的,不能单独更换,只能重新做一条新项链。如果非要把 “Python” 改成 “Jython”,可以这样做:

old_word = "Python"
new_word = "J" + old_word[1:]   # 用第一个字符替换,后面的保留
print(new_word)   # 输出:Jython

4. 字符串的长度

len() 函数可以知道一个字符串有多少个字符(包括空格、标点、字母、数字等)。len 是 length 的缩写。

# 包含逗号、空格、感叹号
text = "Hello, World!"
print(len(text))  # 输出:13(注意:'H','e','l','l','o',',',' ','W','o','r','l','d','!' 共13个)

在计算长度时,空格也算一个字符!比如 " "(一个空格)的长度是1。


5. 字符串的常见操作(更多玩法)

除了上面这些基础,Python还提供了很多好用的字符串方法,就像给项链配上了各种小工具。

  • 转换大小写.upper() 变成大写,.lower() 变成小写。
  • 去掉首尾空格.strip() 去掉两边空格(常用于处理用户输入)。
  • 替换内容.replace(旧, 新) 把字符串中的某些部分替换掉。
  • 拆分字符串.split(分隔符) 把字符串按指定符号切成几段,得到列表。
  • 判断开头/结尾.startswith(前缀).endswith(后缀)

下面用一个例子来展示:

# 模拟用户输入的邮箱地址
email = "  Xiaoming@School.com   "     # 两边有空格

# 去掉首尾空格
email_clean = email.strip()
print(email_clean)                      # 输出:"Xiaoming@School.com"

# 全部转小写,方便比较
email_lower = email_clean.lower()
print(email_lower)                      # 输出:"xiaoming@school.com"

# 替换学校域名
new_domain = email_lower.replace("school.com", "example.org")
print(new_domain)                       # 输出:"xiaoming@example.org"

# 按 @ 符号拆分
parts = new_domain.split("@")
print(parts)                            # 输出:['xiaoming', 'example.org']
# 可以用索引取出用户名和域名
user_name = parts[0]
domain = parts[1]
print("用户名:", user_name)             # 输出:用户名: xiaoming
print("域名:", domain)                  # 输出:域名: example.org

提示:这些方法不会改变原字符串,而是返回一个新字符串。因为字符串不可变,所有操作都产生新项链。


6. 格式化字符串:把变量嵌入文字

有时候我们想把变量的值放进字符串里,比如“我的名字是XX,今年XX岁”。Python的f-string(格式化字符串)让这件事变得超级简单,只需要在字符串前面加一个 f,花括号 {} 里放变量名。

student_name = "小红"      # 学生名字
score = 95                 # 考试成绩
# 用 f-string 嵌入变量
report = f"{student_name}同学的成绩是{score}分。"
print(report)              # 输出:小红同学的成绩是95分。

# 还可以直接写表达式,比如计算总分
math_grade = 88
english_grade = 92
total = f"总分:{math_grade + english_grade}分"
print(total)               # 输出:总分:180分

相比于用 + 拼接,f-string 更清晰、不易出错。在CSP-J考试中,用f-string可以使代码更简洁。


7. 完整可运行示例

下面是一个综合例子,用到了字符串的多种操作,模拟一个简易的“学生信息卡片”。

# 学生信息字符串
name = " 小明 "           # 名字两边有空格
school = "阳光小学"       # 学校
grade = 5                 # 年级(数字)

# 去掉名字首尾空格,并用f-string组成一句话
clean_name = name.strip()                                    # 去掉空格
introduction = f"我叫{clean_name},来自{school},读{grade}年级。"
print(introduction)                                          # 输出:我叫小明,来自阳光小学,读5年级。

# 检查学校名字是否包含"小学"
has_xiaoxue = school.endswith("小学")
print(f"学校名是否以'小学'结尾?{has_xiaoxue}")               # 输出:True

# 把介绍文字全部转为大写(仅作演示,中文大写不改变)
print(introduction.upper())                                  # 输出:我叫小明,来自阳光小学,读5年级。(中文不变)

# 用 * 画一条分隔线
print("=" * 20)

# 输入一个新的字符并展示索引访问
word = "Python"
# 用户想取第4个字符(注意索引3)
position = 3
print(f"'{word}'的第{position+1}个字符是:{word[position]}")  # 输出:'Python'的第4个字符是:h

运行结果:

我叫小明,来自阳光小学,读5年级。
学校名是否以'小学'结尾?True
我叫小明,来自阳光小学,读5年级。
====================
'Python'的第4个字符是:h

8. 小练习(巩固一下)

  1. 定义一个字符串 school = "蓝天小学",分别打印出它的第一个字最后一个字。(提示:用索引0和-1)
  2. "我是"school 拼接起来,再连上 "的学生",然后打印出来(应该输出“我是蓝天小学的学生”)。
  3. "哈哈" 重复10次,打印出来(用来表示大笑)。
  4. user_input = " Hello World " 去掉首尾空格,然后全部转小写,最后输出。

参考答案(自己先试试再看哦):

school = "蓝天小学"
print(school[0])    # 蓝
print(school[-1])   # 学

full = "我是" + school + "的学生"
print(full)         # 我是蓝天小学的学生

laugh = "哈哈" * 10
print(laugh)        # 哈哈哈哈哈哈哈哈哈……(20个哈)

user_input = "   Hello World   "
clean = user_input.strip().lower()
print(clean)        # hello world

9. 相关指引

掌握了字符串的基本操作后,你可以继续学习:

  • 列表:字符串像列表,但不可变。学会列表后,你可以修改里面的元素。
  • 文件读写:读取文本文件时,内容就是一个个字符串。
  • 循环与条件判断:结合 for 循环可以逐个访问字符串里的每个字符。
  • 正则表达式:以后遇到复杂的模式匹配(比如检查邮箱格式)时会用到。

字符串就像编程世界的“文字积木”,现在你已经能自由拼接、切割、获取单个字符了。多多练习,你会越来越熟练!

例题精讲

1单选题

已知字符串 s = "Python",下列哪个表达式可以正确获取字符 'y'?

As[0]
Bs[1]
Cs[2]
Ds[-6]
2判断题

在 Python 中,字符串是不可变的,即不能直接修改字符串中的某个字符。

3填空题
以下代码希望输出 "Hello World",请填写正确的表达式。
s1 = "Hello"
s2 = "World"
result = s1 + " " + ___ 
print(result)
4单选题

以下哪个选项可以正确计算字符串 "GESP" 的长度?

Alen("GESP")
Blength("GESP")
Csize("GESP")
Dstrlen("GESP")
5填空题
以下代码希望输出字符串 s 的最后一个字符,请填写正确的索引。
s = "Python"
last_char = s[___]
print(last_char)