Python实战第3期:输入输出与字符串操作

引言:为什么需要输入输出?

在第2期中,我们学习了变量和数据类型。但你可能发现了一个问题:程序中的数据都是我们预先写好的,不够灵活。

如果我们想让程序根据用户的输入来处理数据,该怎么办呢?这就需要用到输入函数input()。

同时,我们也需要把程序的处理结果展示给用户,这就需要用到输出函数print()。

输入输出是程序与用户交互的桥梁,掌握了它们,你的程序就能"活"起来了。


一、input()和print()

1. input()函数:获取用户输入

input() 函数用于从用户那里获取输入,返回的是一个字符串。

python 复制代码
# 获取用户输入的名字
name = input("请输入你的名字:")
print(f"你好,{name}!")

运行效果:

复制代码
请输入你的名字:小明
你好,小明!

💡 提示:input() 的返回值始终是字符串,如果需要数字,要进行类型转换。

python 复制代码
# 获取用户输入的年龄
age_str = input("请输入你的年龄:")
age = int(age_str)  # 转换为整数
print(f"明年你就{age + 1}岁了!")

2. print()函数:输出信息

print() 函数用于在控制台输出信息。

python 复制代码
# 输出字符串
print("Hello, World!")

# 输出变量
name = "小明"
print(name)

# 输出多个值(用逗号分隔)
name = "小明"
age = 25
print("姓名:", name, "年龄:", age)

输出:

复制代码
姓名: 小明 年龄: 25

3. print()的高级用法

自定义分隔符

python 复制代码
# 默认用空格分隔
print("A", "B", "C")  # 输出:A B C

# 自定义分隔符
print("A", "B", "C", sep="-")  # 输出:A-B-C
print("2024", "01", "15", sep="/")  # 输出:2024/01/15

自定义结尾符

python 复制代码
# 默认以换行符结尾
print("Hello")
print("World")
# 输出:
# Hello
# World

# 自定义结尾符
print("Hello", end=" ")
print("World")
# 输出:Hello World

输出到文件

python 复制代码
# 将输出写入文件
with open("output.txt", "w", encoding="utf-8") as f:
    print("这是第一行", file=f)
    print("这是第二行", file=f)

4. 格式化输出

使用 f-string(推荐)

python 复制代码
name = "小明"
age = 25
score = 95.5

# 基本用法
print(f"姓名:{name},年龄:{age}岁")

# 控制小数位数
print(f"分数:{score:.1f}")  # 保留1位小数
print(f"分数:{score:.2f}")  # 保留2位小数

# 对齐方式
print(f"{'姓名':<10}{'年龄':>5}")  # 左对齐、右对齐
print(f"{name:<10}{age:>5}")

# 填充字符
print(f"{name:*^20}")  # 用*填充,居中

输出:

markdown 复制代码
姓名:小明,年龄:25岁
分数:95.5
分数:95.50
姓名            年龄
小明               25
********小明********

使用 format() 方法

python 复制代码
name = "小明"
age = 25

# 位置参数
print("姓名:{},年龄:{}".format(name, age))

# 指定位置
print("年龄:{1},姓名:{0}".format(name, age))

# 命名参数
print("姓名:{name},年龄:{age}".format(name=name, age=age))

使用 % 格式化(旧式)

python 复制代码
name = "小明"
age = 25
score = 95.5

# %s 字符串,%d 整数,%f 浮点数
print("姓名:%s,年龄:%d,分数:%.1f" % (name, age, score))

💡 提示:推荐使用 f-string,语法简洁,可读性强。


二、字符串拼接、格式化

1. 字符串拼接

使用 + 运算符

python 复制代码
# 基本拼接
first_name = "张"
last_name = "三"
full_name = first_name + last_name
print(full_name)  # 输出:张三

# 拼接字符串和数字
name = "小明"
age = 25
message = "我叫" + name + ",今年" + str(age) + "岁"
print(message)

💡 提示:使用 + 拼接时,数字需要先转换为字符串。

使用 join() 方法

python 复制代码
# 用指定字符连接列表中的字符串
words = ["Hello", "World", "Python"]
result = " ".join(words)
print(result)  # 输出:Hello World Python

# 用逗号连接
csv_line = ",".join(["apple", "banana", "orange"])
print(csv_line)  # 输出:apple,banana,orange

# 用换行符连接
lines = ["第一行", "第二行", "第三行"]
text = "\n".join(lines)
print(text)

使用 f-string 拼接

python 复制代码
name = "小明"
age = 25
score = 95.5

# 直接在字符串中嵌入变量
message = f"我叫{name},今年{age}岁,分数{score:.1f}"
print(message)

2. 字符串格式化进阶

数字格式化

python 复制代码
num = 1234567.89

# 千分位分隔
print(f"{num:,}")  # 输出:1,234,567.89

# 百分比
rate = 0.856
print(f"{rate:.1%}")  # 输出:85.6%

# 科学计数法
big_num = 1234567890
print(f"{big_num:.2e}")  # 输出:1.23e+09

# 二进制、八进制、十六进制
num = 255
print(f"二进制:{num:b}")    # 输出:11111111
print(f"八进制:{num:o}")    # 输出:377
print(f"十六进制:{num:x}")  # 输出:ff

日期格式化

python 复制代码
from datetime import datetime

now = datetime.now()

# 常用日期格式
print(f"{now:%Y-%m-%d}")        # 输出:2024-01-15
print(f"{now:%Y年%m月%d日}")    # 输出:2024年01月15日
print(f"{now:%H:%M:%S}")        # 输出:14:30:25
print(f"{now:%Y-%m-%d %H:%M}")  # 输出:2024-01-15 14:30

表格对齐

python 复制代码
# 生成对齐的表格
data = [
    ("张三", 25, 95.5),
    ("李四", 28, 88.0),
    ("王五", 22, 92.3),
]

print(f"{'姓名':<10}{'年龄':>5}{'分数':>8}")
print("-" * 25)
for name, age, score in data:
    print(f"{name:<10}{age:>5}{score:>8.1f}")

输出:

markdown 复制代码
姓名          年龄    分数
-------------------------
张三            25    95.5
李四            28    88.0
王五            22    92.3

三、常用字符串方法

1. 大小写转换

python 复制代码
text = "Hello, Python!"

# 全部转大写
print(text.upper())      # 输出:HELLO, PYTHON!

# 全部转小写
print(text.lower())      # 输出:hello, python!

# 首字母大写
print(text.title())      # 输出:Hello, Python!

# 首字母大写(其他小写)
print(text.capitalize()) # 输出:Hello, python!

# 大小写互换
print(text.swapcase())   # 输出:hELLO, pYTHON!

2. 去除空白字符

python 复制代码
text = "  Hello, Python!  "

# 去除两端空白
print(text.strip())      # 输出:Hello, Python!

# 去除左侧空白
print(text.lstrip())     # 输出:Hello, Python!  

# 去除右侧空白
print(text.rstrip())     # 输出:  Hello, Python!

# 去除指定字符
text = "***Hello***"
print(text.strip("*"))   # 输出:Hello

💡 提示:处理用户输入时,经常需要用 strip() 去除多余的空白。

python 复制代码
name = input("请输入名字:").strip()

3. 查找与替换

python 复制代码
text = "Hello, Python! Hello, World!"

# 查找子串位置
print(text.find("Python"))      # 输出:7
print(text.find("Java"))        # 输出:-1(未找到)

# 查找(未找到会报错)
# print(text.index("Java"))     # 报错:ValueError

# 统计出现次数
print(text.count("Hello"))      # 输出:2

# 替换
print(text.replace("Python", "Java"))  # 输出:Hello, Java! Hello, World!

# 限制替换次数
print(text.replace("Hello", "Hi", 1))  # 只替换第一个:Hi, Python! Hello, World!

4. 分割与连接

python 复制代码
# 分割字符串
text = "apple,banana,orange"
fruits = text.split(",")
print(fruits)  # 输出:['apple', 'banana', 'orange']

# 按空格分割
text = "Hello World Python"
words = text.split()
print(words)  # 输出:['Hello', 'World', 'Python']

# 限制分割次数
text = "a,b,c,d,e"
parts = text.split(",", 2)  # 只分割前2个
print(parts)  # 输出:['a', 'b', 'c,d,e']

# 连接字符串
words = ["Hello", "World", "Python"]
result = " ".join(words)
print(result)  # 输出:Hello World Python

5. 判断字符串

python 复制代码
text = "Hello123"

# 是否以指定内容开头/结尾
print(text.startswith("Hello"))  # 输出:True
print(text.endswith("123"))      # 输出:True

# 是否全是数字
print("12345".isdigit())         # 输出:True
print("123.45".isdigit())        # 输出:False

# 是否全是字母
print("Hello".isalpha())         # 输出:True
print("Hello123".isalpha())      # 输出:False

# 是否全是字母或数字
print("Hello123".isalnum())      # 输出:True

# 是否全是小写/大写
print("hello".islower())         # 输出:True
print("HELLO".isupper())         # 输出:True

6. 字符串切片

python 复制代码
text = "Hello, Python!"

# 基本切片 [start:end]
print(text[0:5])    # 输出:Hello
print(text[7:])     # 输出:Python!
print(text[:5])     # 输出:Hello

# 负数索引
print(text[-1])     # 输出:!
print(text[-7:-1])  # 输出:Python

# 步长
print(text[::2])    # 输出:Hlo yhn
print(text[::-1])   # 输出:!nohtyP ,olleH(反转字符串)

7. 多行字符串

python 复制代码
# 使用三引号
poem = """
静夜思
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
"""
print(poem)

# 使用反斜杠续行
text = "这是第一行\
这是第二行"
print(text)

# 使用括号
text = (
    "这是第一行"
    "这是第二行"
    "这是第三行"
)
print(text)  # 输出:这是第一行这是第二行这是第三行

8. 转义字符

python 复制代码
# 常用转义字符
print("Hello\nWorld")      # 换行
print("Hello\tWorld")      # 制表符
print("Hello\\World")      # 反斜杠
print("Hello\"World\"")    # 双引号
print("Hello\'World\'")    # 单引号

# 原始字符串(不转义)
print(r"Hello\nWorld")     # 输出:Hello\nWorld
print(r"C:\Users\Name")    # 输出:C:\Users\Name

💡 提示:处理文件路径或正则表达式时,使用原始字符串 r"" 可以避免转义问题。


四、实战练习

练习1:个人信息录入

python 复制代码
# 获取用户输入
name = input("请输入你的名字:").strip()
age = int(input("请输入你的年龄:").strip())
city = input("请输入你的城市:").strip()

# 格式化输出
print("\n" + "=" * 30)
print(f"姓名:{name}")
print(f"年龄:{age}岁")
print(f"城市:{city}")
print(f"10年后,你将{age + 10}岁")
print("=" * 30)

练习2:字符串处理工具

python 复制代码
# 获取用户输入
text = input("请输入一段文字:")

# 统计信息
print(f"\n统计结果:")
print(f"字符数:{len(text)}")
print(f"单词数:{len(text.split())}")
print(f"大写字符数:{sum(1 for c in text if c.isupper())}")
print(f"小写字符数:{sum(1 for c in text if c.islower())}")
print(f"数字字符数:{sum(1 for c in text if c.isdigit())}")

# 转换
print(f"\n转换结果:")
print(f"全大写:{text.upper()}")
print(f"全小写:{text.lower()}")
print(f"首字母大写:{text.title()}")

练习3:简易计算器

python 复制代码
# 获取用户输入
num1 = float(input("请输入第一个数字:").strip())
operator = input("请输入运算符(+、-、*、/):").strip()
num2 = float(input("请输入第二个数字:").strip())

# 计算结果
if operator == "+":
    result = num1 + num2
elif operator == "-":
    result = num1 - num2
elif operator == "*":
    result = num1 * num2
elif operator == "/":
    if num2 == 0:
        print("错误:除数不能为0!")
        result = None
    else:
        result = num1 / num2
else:
    print("错误:不支持的运算符!")
    result = None

# 输出结果
if result is not None:
    print(f"\n计算结果:{num1} {operator} {num2} = {result:.2f}")

练习4:文本格式化

python 复制代码
# 生成格式化的表格
students = [
    ("张三", 20, 95.5),
    ("李四", 21, 88.0),
    ("王五", 19, 92.3),
    ("赵六", 22, 85.7),
]

# 表头
print(f"{'序号':^5}{'姓名':^10}{'年龄':^8}{'分数':^10}")
print("-" * 35)

# 数据行
for i, (name, age, score) in enumerate(students, 1):
    print(f"{i:^5}{name:^10}{age:^8}{score:^10.1f}")

# 统计
print("-" * 35)
avg_score = sum(s[2] for s in students) / len(students)
print(f"{'平均分':^25}{avg_score:^10.1f}")

五、常见问题与排错

问题1:input()返回的是字符串

原因 :input() 的返回值始终是字符串 解决方法:使用类型转换函数

python 复制代码
# ❌ 错误
age = input("请输入年龄:")
print(age + 1)  # TypeError: can only concatenate str (not "int") to str

# ✅ 正确
age = int(input("请输入年龄:"))
print(age + 1)

问题2:字符串拼接报错

原因 :字符串和数字不能直接用 + 拼接 解决方法:使用 f-string 或类型转换

python 复制代码
# ❌ 错误
name = "小明"
age = 25
print("我叫" + name + ",今年" + age + "岁")  # TypeError

# ✅ 正确
print(f"我叫{name},今年{age}岁")
# 或
print("我叫" + name + ",今年" + str(age) + "岁")

问题3:中文字符对齐问题

原因 :中文字符宽度是英文字符的2倍 解决方法:使用全角空格或手动计算宽度

python 复制代码
# 使用全角空格对齐
print(f"{'姓名':<10}{'年龄':>5}")
print(f"{'张三':<10}{'25':>5}")
print(f"{'李四':<10}{'28':>5}")

六、本篇小结

今天,我们完成了以下学习内容:

  1. input()函数:获取用户输入,返回值是字符串
  2. print()函数:输出信息,支持自定义分隔符和结尾符
  3. 字符串拼接:使用 +、join()、f-string 三种方式
  4. 字符串格式化:f-string、format()、% 三种方式
  5. 常用字符串方法 :
    • 大小写转换:upper()、lower()、title()
    • 去除空白:strip()、lstrip()、rstrip()
    • 查找替换:find()、replace()、count()
    • 分割连接:split()、join()
    • 判断类型:isdigit()、isalpha()、startswith()

请记住这三个结论:

  1. input()返回字符串:需要数字时要进行类型转换
  2. f-string最方便:字符串格式化推荐使用 f-string
  3. 字符串方法很丰富:Python提供了大量字符串处理方法

下期预告

在第4期中,我们将学习Python的条件判断与循环,包括:

  • if-elif-else 条件语句
  • for 循环和 while 循环
  • break、continue 和 pass
  • 循环的高级用法

敬请期待!


✍坚持原创,求关注,点赞,收藏

相关推荐
goehou1 小时前
MCP 传输方式实战:stdio、Streamable HTTP、WebSocket 该选哪个
python·llm·agent·教程·mcp
用户0332126663671 小时前
如何快速拆分超大 Excel 文件【Python 教程】
python·excel
kimnoic1 小时前
Python中使用封装类还是函数以及它们的区别
开发语言·python
我先测了1 小时前
Midscene.js 全栈学习指南:从入门到精通的 AI 视觉自动化框架
javascript·人工智能·自动化·agent·midscene
青柠之夏cc1 小时前
Python Java PHP底层对比:内存并发性能全解析
开发语言·python·线程
TomEval1 小时前
【测AI】第10篇:AI 模型功能测试实战 —— 测试用例怎么设计?
人工智能·python·功能测试·测试用例
半亩码田2 小时前
C#转Python第5.1篇:异步编程:asyncio vs async/await,语法相似但机制不同
开发语言·python·c#
yi0112 小时前
DAY27: LeetCode 110. 平衡二叉树 | 在递归中判断是否平衡
人工智能·笔记·python·算法·leetcode·二叉树·递归
Ken_P_##2 小时前
WordAgent
github·agent