📖 知识点回顾
os.path.isfile()判断文件是否存在with open()读写文件,自动关闭w 覆盖写入 /a 追加写入
split 字符串分割,类型转换
try-except 做输入防护
列表 + 字典存储学员档案
业务规则:
程序启动自动读取
student.txt加载已有学员档案支持新增学员,新增记录保存到文件
姓名不能为空,年龄为整数,6~30 岁
输入非法时,捕获异常并提示,程序不崩溃
⚔️ Kata 实战任务
任务需求:
编写完整本地文件版学员登记系统
程序启动:判断 student.txt 是否存在,存在就读入文件,加载为列表字典;不存在则创建空学员列表
菜单功能:
1:新增学员
2:查看全部学员
0:退出程序
新增学员时,做输入校验,异常捕获;新增成功,写入保存到 student.txt
全程使用 with 写法
参考代码
import os
FILE_NAME = "student.txt"
def load_students():
"""加载文件中的学员档案,返回学员列表"""
student_list = []
if os.path.isfile(FILE_NAME):
with open(FILE_NAME, "r", encoding="utf-8") as f:
lines = f.readlines()
for line in lines:
line = line.strip()
if not line:
continue
name, age_str, score_str = line.split(",")
stu = {
"name": name,
"age": int(age_str),
"score": int(score_str)
}
student_list.append(stu)
return student_list
def save_students(student_list):
"""把学员列表全部写入txt存档"""
with open(FILE_NAME, "w", encoding="utf-8") as f:
for stu in student_list:
line = f"{stu['name']},{stu['age']},{stu['score']}\n"
f.write(line)
def add_student(student_list):
"""新增学员,带异常校验"""
name = input("请输入学员姓名:").strip()
age_str = input("请输入学员年龄:").strip()
score_str = input("请输入学员分数:").strip()
try:
age = int(age_str)
score = int(score_str)
if len(name) == 0:
raise ValueError("姓名不能为空")
if not (6 <= age <= 30):
raise ValueError("年龄范围必须是6~30")
if not (0 <= score <= 100):
raise ValueError("分数范围必须是0~100")
except ValueError as e:
print(f"❌ 添加失败:{e}\n")
return
# 校验通过,加入列表并保存文件
new_stu = {"name": name, "age": age, "score": score}
student_list.append(new_stu)
save_students(student_list)
print("✅ 学员登记成功,已保存到文件!\n")
def show_students(student_list):
"""展示全部学员"""
if len(student_list) == 0:
print("📭 暂无学员档案\n")
return
print("===== 学员档案 =====")
for index, stu in enumerate(student_list):
print(f"{index+1} | 姓名:{stu['name']},年龄:{stu['age']},分数:{stu['score']}")
print("====================\n")
def main():
# 启动加载档案
student_list = load_students()
print("==== 本地学员登记系统 ====")
while True:
print("【菜单】")
print("1.新增学员")
print("2.查看全部学员")
print("0.退出系统")
choice = input("请输入功能编号:").strip()
if choice == "1":
add_student(student_list)
elif choice == "2":
show_students(student_list)
elif choice == "0":
print("👋 系统退出,档案已保存!")
break
else:
print("⚠️ 输入选项无效,请重新选择\n")
if __name__ == "__main__":
main()
运行示例
==== 本地学员登记系统 ====
【菜单】
1.新增学员
2.查看全部学员
0.退出系统
请输入功能编号:1
请输入学员姓名:小李
请输入学员年龄:17
请输入学员分数:95
✅ 学员登记成功,已保存到文件!
【菜单】
1.新增学员
2.查看全部学员
0.退出系统
请输入功能编号:2
===== 学员档案 =====
1 | 姓名:小明,年龄:16,分数:88
2 | 姓名:小红,年龄:15,分数:92
3 | 姓名:小刚,年龄:16,分数:75
4 | 姓名:小李,年龄:17,分数:95
====================
【菜单】
1.新增学员
2.查看全部学员
0.退出系统
请输入功能编号:0
👋 系统退出,档案已保存!
🧠 思考题
当前系统每次新增学员,直接用 w 模式整体重写全部数据。如果学员数量很大,这样写有没有弊端?
拓展需求:增加删除学员功能,该如何修改代码?
行者孙Python