Appearance
第16章:基础实战
实战1:简单计算器
16.1 需求分析
实现一个简单的计算器,具有以下功能:
- 支持加减乘除、取余、幂运算
- 支持用户重复输入
- 捕获输入错误异常
- 友好的用户交互
16.2 核心实现
- 输入输出:使用
input()获取用户输入,使用print()显示结果 - 运算符:使用算术运算符和
**运算符 - 条件判断:使用
if-elif-else结构处理不同运算符 - 循环:使用
while循环实现重复计算 - 异常处理:使用
try-except捕获输入错误和除数为0的异常
16.3 实操
python
"""
简单计算器
功能:实现加减乘除、取余、幂运算,支持重复计算,捕获异常
"""
def calculate():
"""计算器主函数"""
print("=== 简单计算器 ===")
print("支持的运算:+", "-", "*", "/", "%", "**")
print("输入 'exit' 退出计算器")
print("=================")
while True:
# 获取第一个数
num1_input = input("请输入第一个数:")
if num1_input.lower() == "exit":
print("计算器已退出")
break
# 获取运算符
operator = input("请输入运算符(+、-、*、/、%、**):")
if operator.lower() == "exit":
print("计算器已退出")
break
# 获取第二个数
num2_input = input("请输入第二个数:")
if num2_input.lower() == "exit":
print("计算器已退出")
break
try:
# 转换为数字
num1 = float(num1_input)
num2 = float(num2_input)
# 执行运算
if operator == "+":
result = num1 + num2
print(f"{num1} + {num2} = {result}")
elif operator == "-":
result = num1 - num2
print(f"{num1} - {num2} = {result}")
elif operator == "*":
result = num1 * num2
print(f"{num1} * {num2} = {result}")
elif operator == "/":
if num2 == 0:
print("错误:除数不能为0")
else:
result = num1 / num2
print(f"{num1} / {num2} = {result}")
elif operator == "%":
if num2 == 0:
print("错误:除数不能为0")
else:
result = num1 % num2
print(f"{num1} % {num2} = {result}")
elif operator == "**":
result = num1 ** num2
print(f"{num1} ** {num2} = {result}")
else:
print("错误:不支持的运算符")
except ValueError:
print("错误:请输入有效的数字")
except Exception as e:
print(f"错误:{e}")
finally:
print("-----------------")
# 运行计算器
if __name__ == "__main__":
calculate()运行结果
=== 简单计算器 ===
支持的运算:+ - * / % **
输入 'exit' 退出计算器
=================
请输入第一个数:10
请输入运算符(+、-、*、/、%、**):+
请输入第二个数:5
10.0 + 5.0 = 15.0
-----------------
请输入第一个数:10
请输入运算符(+、-、*、/、%、**):/
请输入第二个数:0
错误:除数不能为0
-----------------
请输入第一个数:abc
请输入运算符(+、-、*、/、%、**):+
请输入第二个数:5
错误:请输入有效的数字
-----------------
请输入第一个数:exit
计算器已退出实战2:学生信息管理系统
16.4 需求分析
实现一个学生信息管理系统,具有以下功能:
- 添加学生信息(姓名、学号、年龄、成绩)
- 删除学生信息
- 修改学生信息
- 查询学生信息
- 展示所有学生信息
- 支持退出系统
16.5 核心实现
- 列表:使用列表存储学生信息
- 字典:使用字典存储每个学生的详细信息
- 函数:将不同功能封装为函数
- 循环:使用
while循环实现菜单选择 - 条件判断:使用
if-elif-else结构处理不同操作
16.6 实操
python
"""
学生信息管理系统
功能:添加、删除、修改、查询、展示学生信息
"""
# 存储学生信息的列表
students = []
def display_menu():
"""显示菜单"""
print("\n=== 学生信息管理系统 ===")
print("1. 添加学生信息")
print("2. 删除学生信息")
print("3. 修改学生信息")
print("4. 查询学生信息")
print("5. 展示所有学生信息")
print("6. 退出系统")
print("========================")
def add_student():
"""添加学生信息"""
print("\n=== 添加学生信息 ===")
name = input("请输入姓名:")
student_id = input("请输入学号:")
age = input("请输入年龄:")
score = input("请输入成绩:")
# 验证输入
try:
age = int(age)
score = float(score)
except ValueError:
print("错误:年龄必须是整数,成绩必须是数字")
return
# 检查学号是否已存在
for student in students:
if student['id'] == student_id:
print("错误:学号已存在")
return
# 添加学生信息
student = {
'name': name,
'id': student_id,
'age': age,
'score': score
}
students.append(student)
print("添加成功!")
def delete_student():
"""删除学生信息"""
print("\n=== 删除学生信息 ===")
student_id = input("请输入要删除的学生学号:")
for student in students:
if student['id'] == student_id:
students.remove(student)
print("删除成功!")
return
print("错误:未找到该学号的学生")
def update_student():
"""修改学生信息"""
print("\n=== 修改学生信息 ===")
student_id = input("请输入要修改的学生学号:")
for student in students:
if student['id'] == student_id:
print(f"当前信息:姓名={student['name']}, 年龄={student['age']}, 成绩={student['score']}")
# 修改信息
name = input("请输入新姓名(按回车保持不变):")
age = input("请输入新年龄(按回车保持不变):")
score = input("请输入新成绩(按回车保持不变):")
if name:
student['name'] = name
if age:
try:
student['age'] = int(age)
except ValueError:
print("错误:年龄必须是整数")
return
if score:
try:
student['score'] = float(score)
except ValueError:
print("错误:成绩必须是数字")
return
print("修改成功!")
return
print("错误:未找到该学号的学生")
def search_student():
"""查询学生信息"""
print("\n=== 查询学生信息 ===")
student_id = input("请输入要查询的学生学号:")
for student in students:
if student['id'] == student_id:
print(f"姓名:{student['name']}")
print(f"学号:{student['id']}")
print(f"年龄:{student['age']}")
print(f"成绩:{student['score']}")
return
print("错误:未找到该学号的学生")
def display_all_students():
"""展示所有学生信息"""
print("\n=== 所有学生信息 ===")
if not students:
print("暂无学生信息")
return
print(f"{'姓名':<10}{'学号':<15}{'年龄':<5}{'成绩':<10}")
print("-" * 40)
for student in students:
print(f"{student['name']:<10}{student['id']:<15}{student['age']:<5}{student['score']:<10}")
def main():
"""主函数"""
while True:
display_menu()
choice = input("请输入选择(1-6):")
if choice == "1":
add_student()
elif choice == "2":
delete_student()
elif choice == "3":
update_student()
elif choice == "4":
search_student()
elif choice == "5":
display_all_students()
elif choice == "6":
print("系统已退出")
break
else:
print("错误:请输入有效的选择")
# 运行系统
if __name__ == "__main__":
main()运行结果
=== 学生信息管理系统 ===
1. 添加学生信息
2. 删除学生信息
3. 修改学生信息
4. 查询学生信息
5. 展示所有学生信息
6. 退出系统
========================
请输入选择(1-6):1
=== 添加学生信息 ===
请输入姓名:张三
请输入学号:2023001
请输入年龄:18
请输入成绩:95
添加成功!
=== 学生信息管理系统 ===
1. 添加学生信息
2. 删除学生信息
3. 修改学生信息
4. 查询学生信息
5. 展示所有学生信息
6. 退出系统
========================
请输入选择(1-6):5
=== 所有学生信息 ===
姓名 学号 年龄 成绩
----------------------------------------
张三 2023001 18 95.0
=== 学生信息管理系统 ===
1. 添加学生信息
2. 删除学生信息
3. 修改学生信息
4. 查询学生信息
5. 展示所有学生信息
6. 退出系统
========================
请输入选择(1-6):6
系统已退出实战3:文本文件处理
16.7 需求分析
实现一个文本文件处理程序,具有以下功能:
- 读取文本文件中的内容
- 统计文本长度
- 统计单词数量
- 将统计结果写入新的文本文件
16.8 核心实现
- 文件读写:使用
open()函数和with语句 - 字符串操作:使用字符串方法处理文本
- 异常处理:捕获文件不存在、编码错误等异常
16.9 实操
python
"""
文本文件处理
功能:读取文本文件,统计文本长度和单词数量,将结果写入新文件
"""
def process_text_file(input_file, output_file):
"""处理文本文件"""
try:
# 读取文件
with open(input_file, "r", encoding="utf-8") as f:
content = f.read()
# 统计文本长度
text_length = len(content)
# 统计单词数量(简单处理,按空格分割)
words = content.split()
word_count = len(words)
# 生成统计结果
result = f"文本文件:{input_file}\n"
result += f"文本长度:{text_length} 字符\n"
result += f"单词数量:{word_count} 个\n"
result += f"\n原文本内容:\n{content}"
# 写入结果到新文件
with open(output_file, "w", encoding="utf-8") as f:
f.write(result)
print(f"处理完成!统计结果已写入 {output_file}")
print(f"文本长度:{text_length} 字符")
print(f"单词数量:{word_count} 个")
except FileNotFoundError:
print(f"错误:文件 {input_file} 不存在")
except UnicodeDecodeError:
print(f"错误:文件 {input_file} 编码错误,请确保文件是UTF-8编码")
except Exception as e:
print(f"错误:{e}")
# 测试
if __name__ == "__main__":
input_file = "test.txt" # 替换为实际的输入文件路径
output_file = "result.txt" # 输出文件路径
process_text_file(input_file, output_file)运行结果
假设test.txt文件内容为:
Hello, Python!
Welcome to text file processing.
This is a test file.运行结果:
处理完成!统计结果已写入 result.txt
文本长度:63 字符
单词数量:11 个result.txt文件内容:
文本文件:test.txt
文本长度:63 字符
单词数量:11 个
原文本内容:
Hello, Python!
Welcome to text file processing.
This is a test file.实战4:随机验证码生成器
16.10 需求分析
实现一个随机验证码生成器,具有以下功能:
- 生成6位随机验证码(包含数字、大写字母、小写字母)
- 支持用户刷新验证码
- 验证用户输入是否正确
16.11 核心实现
- random模块:使用
random模块生成随机数 - 字符串操作:使用字符串方法处理验证码
- 循环:使用
while循环实现验证码验证 - 条件判断:使用
if-else结构处理验证结果
16.12 实操
python
"""
随机验证码生成器
功能:生成6位随机验证码,支持刷新,验证用户输入
"""
import random
import string
def generate_captcha(length=6):
"""生成随机验证码"""
# 定义验证码字符集
characters = string.ascii_letters + string.digits # 包含大小写字母和数字
# 生成指定长度的验证码
captcha = ''.join(random.choice(characters) for _ in range(length))
return captcha
def verify_captcha():
"""验证码验证"""
while True:
# 生成验证码
captcha = generate_captcha()
print(f"\n验证码:{captcha}")
# 获取用户输入
user_input = input("请输入验证码(输入 'refresh' 刷新验证码,输入 'exit' 退出):")
if user_input.lower() == "exit":
print("验证码验证已退出")
break
elif user_input.lower() == "refresh":
print("正在刷新验证码...")
continue
# 验证输入
if user_input == captcha:
print("验证码正确!")
# 验证码正确后可以执行后续操作
break
else:
print("验证码错误,请重新输入")
# 运行验证码验证
if __name__ == "__main__":
print("=== 验证码验证系统 ===")
verify_captcha()运行结果
=== 验证码验证系统 ===
验证码:3Ab7Yz
请输入验证码(输入 'refresh' 刷新验证码,输入 'exit' 退出):3Ab7Yz
验证码正确!另一种情况:
=== 验证码验证系统 ===
验证码:X5pQ2R
请输入验证码(输入 'refresh' 刷新验证码,输入 'exit' 退出):X5pQ2
验证码错误,请重新输入
验证码:X5pQ2R
请输入验证码(输入 'refresh' 刷新验证码,输入 'exit' 退出):refresh
正在刷新验证码...
验证码:7Tf9Gh
请输入验证码(输入 'refresh' 刷新验证码,输入 'exit' 退出):7Tf9Gh
验证码正确!