python第三次作业

第一题

题目

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("无效的命令。")

相关推荐
是萧萧吖2 小时前
每日一练——有效的括号
java·开发语言·javascript
zhihuaba2 小时前
构建一个基于命令行的待办事项应用
jvm·数据库·python
MediaTea2 小时前
Python:内置类型也是类对象
开发语言·python
gpldock2222 小时前
Flutter App Templates Deconstructed: A 2025 Architectural Review
开发语言·javascript·flutter·wordpress
Ivanqhz2 小时前
现代异构高性能计算(HPC)集群节点架构
开发语言·人工智能·后端·算法·架构·云计算·边缘计算
Faker66363aaa2 小时前
云和云阴影检测与识别_YOLO11-seg-DySample改进实现
python
白中白121382 小时前
Vue系列-2
前端·javascript·vue.js
百***07452 小时前
OpenClaw+一步API实战:本地化AI自动化助手从部署到落地全指南
大数据·人工智能·python
Traced back2 小时前
# C# 基础语法完全指南
开发语言·c#