
引言:为什么需要输入输出?
在第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}")
六、本篇小结
今天,我们完成了以下学习内容:
- input()函数:获取用户输入,返回值是字符串
- print()函数:输出信息,支持自定义分隔符和结尾符
- 字符串拼接:使用 +、join()、f-string 三种方式
- 字符串格式化:f-string、format()、% 三种方式
- 常用字符串方法 :
- 大小写转换:upper()、lower()、title()
- 去除空白:strip()、lstrip()、rstrip()
- 查找替换:find()、replace()、count()
- 分割连接:split()、join()
- 判断类型:isdigit()、isalpha()、startswith()
请记住这三个结论:
- input()返回字符串:需要数字时要进行类型转换
- f-string最方便:字符串格式化推荐使用 f-string
- 字符串方法很丰富:Python提供了大量字符串处理方法
下期预告
在第4期中,我们将学习Python的条件判断与循环,包括:
- if-elif-else 条件语句
- for 循环和 while 循环
- break、continue 和 pass
- 循环的高级用法
敬请期待!
✍坚持原创,求关注,点赞,收藏