当前位置:首页>python>第2.2章:一篇学完Python的字符串与输入输出

第2.2章:一篇学完Python的字符串与输入输出

  • 2026-09-30 23:30:27
第2.2章:一篇学完Python的字符串与输入输出

《Python AI 应用开发入门》第 2.2 节。

接收和清理用户输入,使用切片、字符串方法与 f-string 组织文本。

本节目标

学完本节后,你应当能够:

  1. 1. 使用 input() 接收文本,使用 print() 输出结果。
  2. 2. 使用索引和切片读取字符串的一部分。
  3. 3. 使用常见字符串方法清理、查找和转换文本。
  4. 4. 使用 f-string 生成可读的动态内容。
  5. 5. 说明字符串不可变意味着什么。

1. 字符串表示文本

聊天消息、提示词、模型名称和用户昵称都可以使用字符串:

user_name = "小林"question = "Python 的列表是什么?"model_name = "demo-model"

字符串可以使用单引号或双引号:

answer_a = "Python 很适合编写 AI 应用。"answer_b = 'Python 很适合编写 AI 应用。'

内容中包含单引号时,外层可以使用双引号:

message = "用户输入了 'exit'。"

需要在字符串中表示换行、制表符或引号时,可以使用转义字符:

print("第一行\n第二行")print("名称\t数量")print("他说:\"你好!\"")

2. input() 与 print()

input() 显示提示并等待用户输入:

question = input("请输入问题:")print(question)

input() 返回的内容不包括用户最后按下的回车,但会保留用户主动输入的其他空格。

print() 可以输出多个值,默认用空格分隔:

model_name = "demo-model"message_count = 3print("模型:", model_name, "消息数:", message_count)

可以使用 sep 修改分隔符,使用 end 修改结尾:

print("user", "你好", sep=": ")print("正在生成", end="...")print("完成")

输出:

user: 你好正在生成...完成

3. 字符串长度与索引

len() 返回字符串包含的字符数量:

question = "Python"print(len(question))

结果是 6。

字符串中的位置从 0 开始:

word = "Python"print(word[0])   # Pprint(word[1])   # yprint(word[-1])  # n

负索引从末尾向前计算。访问不存在的位置会触发 IndexError:

# print(word[10])

索引适合明确知道字符串非空且位置存在的场景。

4. 字符串切片

切片语法是:

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

结束位置不包含在结果中:

word = "Python"print(word[0:3])  # Pytprint(word[:3])   # Pytprint(word[3:])   # honprint(word[-3:])  # honprint(word[::2])  # Pto

切片超出范围通常不会报错:

print(word[:100])  # Python

切片很适合制作预览:

question = "请用简单语言解释 Python 列表与元组的区别"preview = question[:12]print(preview)

5. 字符串不可变

不能直接修改字符串中的某个字符:

word = "Python"# word[0] = "J"

这会触发 TypeError。字符串方法也不会原地修改原变量,而是返回新字符串:

raw_question = "  PYTHON 是什么?  "clean_question = raw_question.strip().lower()print(raw_question)print(clean_question)

原字符串仍然保留。如果希望更新变量,需要重新赋值。

6. 常用字符串方法

去除两端空白

question = input("请输入问题:").strip()

strip() 会去除两端的空格、换行和制表符,但不会删除文本中间的正常空格。

大小写转换

command = "  EXIT  ".strip().lower()print(command)  # exit

这能让命令判断不受大小写和两端空格影响。

替换

template = "请用{style}风格回答"prompt = template.replace("{style}", "简洁")

查找与计数

question = "Python 列表和 Python 字典有什么区别?"print("Python" in question)       # Trueprint(question.find("字典"))      # 找到时返回起始位置print(question.count("Python"))   # 2

find() 找不到时返回 -1。如果只关心“是否包含”,优先使用 in,意图更清楚。

拆分与连接

tags_text = "Python,AI,入门"tags = tags_text.split(",")print(tags)summary = " / ".join(tags)print(summary)

结果:

['Python', 'AI', '入门']Python / AI / 入门

split() 把字符串变成列表;join() 把一组字符串连接成一个字符串。列表会在第 2.5 节详细学习。

7. 拼接字符串

加号可以拼接字符串:

user_name = "小林"message = "你好," + user_name + "!"

但字符串不能直接与数字拼接:

message_count = 3# print("消息数:" + message_count)

可以先转换:

print("消息数:" + str(message_count))

更推荐使用 f-string。

8. f-string 格式化

在字符串引号前加 f,就能把花括号中的表达式结果插入文本:

user_name = "小林"message_count = 3print(f"你好,{user_name}!当前有 {message_count} 条消息。")

花括号中可以放简单表达式:

unit_price = 0.015request_count = 8total_cost = unit_price * request_countprint(f"预计费用:{total_cost:.2f} 元")

.2f 表示以两位小数显示浮点数。它只改变显示方式,不会修改原变量。

9. 多行字符串与提示词

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

role = "Python 助教"topic = "字符串"prompt = f"""你是一名{role}。请解释主题:{topic}要求:1. 使用初学者能理解的语言。2. 给出一个短示例。"""print(prompt)

缩进也会成为字符串内容的一部分。构造提示词时要检查多余空格与换行。

10. 输入清理的基本习惯

命令行输入通常先做最小清理:

raw_command = input("请输入命令:")command = raw_command.strip().lower()

但不要对所有文本都使用 lower()。用户的自然语言问题可能需要保留原始大小写:

question = input("请输入问题:").strip()

原则是根据业务含义处理:

  • • 菜单命令通常可以统一大小写。
  • • 用户姓名、代码和自然语言问题通常保留原样。
  • • 判断前去除两端多余空白通常是安全的。

动手练习

练习 1:提示词格式化器

创建 prompt_formatter.py:

  1. 1. 询问用户角色、主题和回答风格。
  2. 2. 对三项输入使用 strip()。
  3. 3. 使用多行 f-string 生成提示词。
  4. 4. 输出提示词长度和前 20 个字符的预览。

练习 2:命令标准化

让用户输入一个命令。无论输入 EXIT、Exit 还是 exit,都输出标准形式 exit。

练习 3:标签整理

给定:

tags_text = " Python,AI应用,初学者 "

把它转换为下面的显示文本:

Python | AI应用 | 初学者

提示:可以组合 strip()、split() 和 join();注意逗号后各项可能有多余空格。

随堂小测

  1. 1. 字符串索引为什么从 0 开始?
  2. 2. "Python"[1:4] 的结果是什么?
  3. 3. strip() 会删除字符串中间的所有空格吗?
  4. 4. 为什么 question.lower() 不会自动改变 question?
  5. 5. split() 和 join() 分别完成什么转换?
  6. 6. f-string 相比加号拼接有什么优势?

参考答案

  1. 1. Python 使用从零开始的索引规则,第一个位置是 0。
  2. 2. "yth",结束位置 4 不包含在结果中。
  3. 3. 不会,它默认只删除两端空白。
  4. 4. 字符串不可变,方法返回新字符串;需要赋值才能保存结果。
  5. 5. split() 把字符串拆成字符串列表,join() 把一组字符串连接成字符串。
  6. 6. 它能直接插入不同类型的值和表达式,结构更清晰,也更容易控制格式。

本节完成检查

  • • 我能使用 input() 和 print() 完成交互。
  • • 我能使用索引与切片读取字符串。
  • • 我使用过至少五种字符串方法。
  • • 我理解字符串不可变。
  • • 我能使用 f-string 构造多行提示词。
  • • 我完成了三个动手练习。

最新文章

随机文章