第一题
题目
1.使用os和os.path以及函数的递归完成: 给出一个路径,遍历当前路径所有的文件及文件夹 打印输出所有的文件(遇到文件输出路径,遇到文件夹继续进文件夹)
代码
python
import os
import os.path
def simple_traverse(current_path):
# 检查路径是否存在,不存在则跳过
if not os.path.exists(current_path):
return
# 获取当前路径下的所有条目(文件和文件夹)
# os.listdir() 会列出目录下的所有内容(不包含'.'和'..')
for item_name in os.listdir(current_path):
# 构建完整路径
full_item_path = os.path.join(current_path, item_name)
# 判断是文件还是文件夹
if os.path.isfile(full_item_path):
# 如果是文件,打印它的完整路径
print(full_item_path)
elif os.path.isdir(full_item_path):
# 如果是文件夹,递归调用自身来遍历这个子文件夹
simple_traverse(full_item_path)
if __name__ == "__main__":
# 设置你想要遍历的起始路径
start_directory = "homework"
print(f"开始遍历: {os.path.abspath(start_directory)}") # 打印绝对路径方便查看
simple_traverse(start_directory)
print("遍历结束。")

第二题
题目
2.使用加密模块及IO模拟登录功能,要求使用文件模拟数据库存储用户名和密码。
代码
python
import hmac
def encryption_admin(str_data):
salt = "*****!!!!".encode("utf-8")
return hmac.new(salt, str_data.encode("utf-8"), "md5").hexdigest()
def load_user_from_zm():
user_data = {}
with open("zm.txt", "r", encoding="utf-8") as f:
content = f.read().strip()
stored_username, stored_pwd = content.split(" ")
user_data["username"] = encryption_admin(stored_username)
user_data["password"] = encryption_admin(stored_pwd)
return user_data
database = load_user_from_zm()
user_input = input("请输入用户名和密码并使用空格分隔: ")
username, password = user_input.split(" ")
if (encryption_admin(username) == database["username"] and
encryption_admin(password) == database["password"]):
print("登录成功")
else:
print("登录失败")

第三题
题目
3.使用面向对象编程完成学生信息录入功能,数据存储在本地文件txt中,并读取学生信息并按照成绩进行排序,学生其他属性自行规划
代码
python
class Student:
"""
表示一个学生对象,包含姓名、学号、语文、数学、英语成绩以及总分。
"""
def __init__(self, name, number, chinese, math, english):
self.name = name
self.number = number
self.chinese = chinese
self.math = math
self.english = english
# 计算总分
self.total = chinese + math + english
def to_string(self):
"""
将学生信息转换为字符串格式,用于存储到文件。
格式为:姓名|学号|语文|数学|英语|总分
"""
return f"{self.name}|{self.number}|{self.chinese}|{self.math}|{self.english}|{self.total}"
def from_string(self, line):
"""
从字符串解析学生信息,用于从文件读取。
"""
parts = line.strip().split("|")
self.name = parts[0]
self.number = parts[1]
self.chinese = int(parts[2])
self.math = int(parts[3])
self.english = int(parts[4])
self.total = self.chinese + self.math + self.english # 重新计算总分
return self
class StudentManager:
"""
管理学生信息的类,负责学生信息的录入、加载、保存和排序。
"""
def __init__(self, file_path="students.txt"):
self.file_path = file_path
def add_student(self, student):
"""
向文件中添加一个学生的信息。
"""
with open(self.file_path, "a", encoding="utf-8") as f:
f.write(student.to_string() + "\n")
print(f"学生 '{student.name}' 的信息已保存!")
def load_students(self):
"""
从文件中加载所有学生的信息。
"""
students = []
try:
with open(self.file_path, "r", encoding="utf-8") as f:
for line in f:
if line.strip():
student = Student("", "", 0, 0, 0) # 创建一个空对象
student.from_string(line)
students.append(student)
except FileNotFoundError:
print(f"文件 '{self.file_path}' 不存在,将创建一个新的学生列表。")
return students
def sort_students_by_total(self, students):
"""
对学生列表按总分降序排序。
"""
students.sort(key=lambda s: s.total, reverse=True)
return students
# --- 主程序部分 ---
manager = StudentManager()
print("--- 学生信息录入 ---")
while True:
command = input("请输入 'add' 录入学生信息,输入 'view' 查看并排序,输入 'quit' 退出: ")
if command == 'add':
# 录入学生信息
name = input("请输入学生姓名:")
number = input("请输入学生的学号:")
try:
chinese = int(input("请输入学生的语文成绩:"))
math = int(input("请输入学生的数学成绩:"))
english = int(input("请输入学生的英语成绩:"))
student = Student(name, number, chinese, math, english)
manager.add_student(student)
except ValueError:
print("成绩输入错误,请确保输入的是数字!")
elif command == 'view':
# 查看并排序学生信息
print("\n--- 查看和排序学生信息 (按总分降序) ---")
all_students = manager.load_students()
if not all_students:
print("当前没有学生信息。")
continue
print("\n--- 原始学生信息 ---")
for s in all_students:
print(s.to_string())
# 只提供按总分降序排序
sorted_students = manager.sort_students_by_total(all_students)
print("\n--- 按总分降序排序后 ---")
for s in sorted_students:
print(s.to_string())
elif command == 'quit':
# 退出程序
print("感谢使用,再见!")
break
else:
print("无效的命令。")

