《Python AI 应用开发入门》第 2.2 节。
接收和清理用户输入,使用切片、字符串方法与 f-string 组织文本。
本节目标
学完本节后,你应当能够:
- 1. 使用
input() 接收文本,使用 print() 输出结果。 - 4. 使用 f-string 生成可读的动态内容。
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:
练习 2:命令标准化
让用户输入一个命令。无论输入 EXIT、Exit 还是 exit,都输出标准形式 exit。
练习 3:标签整理
给定:
tags_text = " Python,AI应用,初学者 "
把它转换为下面的显示文本:
Python | AI应用 | 初学者
提示:可以组合 strip()、split() 和 join();注意逗号后各项可能有多余空格。
随堂小测
- 3.
strip() 会删除字符串中间的所有空格吗? - 4. 为什么
question.lower() 不会自动改变 question? - 5.
split() 和 join() 分别完成什么转换?
参考答案
- 1. Python 使用从零开始的索引规则,第一个位置是
0。 - 4. 字符串不可变,方法返回新字符串;需要赋值才能保存结果。
- 5.
split() 把字符串拆成字符串列表,join() 把一组字符串连接成字符串。 - 6. 它能直接插入不同类型的值和表达式,结构更清晰,也更容易控制格式。
本节完成检查
- • 我能使用
input() 和 print() 完成交互。