Python第三次作业

1.使用os和os.path以及函数的递归完成: 给出一个路径,遍历当前路径所有的文件及文件夹 打印输出所有的文件(遇到文件输出路径,遇到文件夹继续进文件夹)

python 复制代码
import os

def traverse_files(path):
    """
    递归遍历指定路径下的所有文件并打印文件路径
    :param path: 要遍历的根路径
    """
    #检查路径是否存在
    if not os.path.exists(path):
        print(f"路径 {path} 不存在!")
        return
    
    #遍历当前路径下的所有文件/文件夹
    for item in os.listdir(path):
        #拼凑完整路径
        full_path = os.path.join(path,item)

        #判断是否是文件
        if os.path.isfile(full_path):
            print(f"文件:{full_path}")
        #判断是否是文件,若是则递归调用
        elif os.path.isdir(full_path):
            traverse_files(full_path)

#测试调用(替换为你遍历的路径)
if __name__ == "__main__":
    target_path = "./test_folder"
    traverse_files(target_path)

2.使用加密模块及IO模拟登录功能,要求使用文件模拟数据库存储用户名和密码。

python 复制代码
import hashlib

# 加密函数:将密码转为md5哈希值(不可逆)
def encrypt_password(password):
    """
    对密码进行md5加密
    :param password: 原始密码
    :return: 加密后的字符串
    """
    md5 = hashlib.md5()
    md5.update(password.encode("utf-8"))
    return md5.hexdigest()

# 注册功能(新增用户)
def register(username, password):
    """
    注册用户,将用户名和加密后的密码存入文件
    :param username: 用户名
    :param password: 原始密码
    """
    # 检查用户名是否已存在
    if check_user_exists(username):
        print(f"用户名 {username} 已存在!")
        return
    
    # 写入文件(格式:用户名:加密密码)
    with open("user_db.txt", "a", encoding="utf-8") as f:
        f.write(f"{username}:{encrypt_password(password)}\n")
    print(f"用户 {username} 注册成功!")

# 检查用户是否存在
def check_user_exists(username):
    """
    检查用户名是否已存在
    :param username: 用户名
    :return: 存在返回True,否则False
    """
    try:
        with open("user_db.txt", "r", encoding="utf-8") as f:
            for line in f:
                if line.strip().split(":")[0] == username:
                    return True
        return False
    except FileNotFoundError:
        # 文件不存在则直接返回False(首次注册)
        return False

# 登录功能
def login(username, password):
    """
    登录验证,对比用户名和加密后的密码
    :param username: 用户名
    :param password: 原始密码
    :return: 登录成功返回True,否则False
    """
    if not check_user_exists(username):
        print(f"用户名 {username} 不存在!")
        return False
    
    # 读取文件验证密码
    with open("user_db.txt", "r", encoding="utf-8") as f:
        for line in f:
            user, pwd = line.strip().split(":")
            if user == username and pwd == encrypt_password(password):
                print(f"用户 {username} 登录成功!")
                return True
    
    print("密码错误!")
    return False

# 测试调用
if __name__ == "__main__":
    # 示例:注册用户
    register("zhangsan", "123456")
    # 示例:登录验证
    login("zhangsan", "123456")  # 正确密码
    login("zhangsan", "654321")  # 错误密码

3.使用面向对象编程完成学生信息录入功能,数据存储在本地文件txt中,并读取学生信息并按照成绩进行排序,学生其他属性自行规划

python 复制代码
class Student:
    """学生类:封装学生属性和行为"""
    def __init__(self, id, name, age, gender, score):
        self.id = id          # 学号(唯一标识)
        self.name = name      # 姓名
        self.age = age        # 年龄
        self.gender = gender  # 性别
        self.score = score    # 成绩

    def to_string(self):
        """将学生信息转为字符串(用于写入文件)"""
        return f"{self.id},{self.name},{self.age},{self.gender},{self.score}"
    
    @staticmethod
    def from_string(line):
        """从字符串解析为Student对象(用于读取文件)"""
        id, name, age, gender, score = line.strip().split(",")
        return Student(id, name, int(age), gender, float(score))

class StudentManager:
    """学生信息管理类:处理录入、存储、读取、排序"""
    def __init__(self, file_path="students.txt"):
        self.file_path = file_path  # 存储学生信息的文件路径

    def add_student(self, student):
        """录入学生信息并写入文件"""
        # 检查学号是否重复
        if self.check_id_exists(student.id):
            print(f"学号 {student.id} 已存在,录入失败!")
            return
        
        with open(self.file_path, "a", encoding="utf-8") as f:
            f.write(student.to_string() + "\n")
        print(f"学生 {student.name} 信息录入成功!")

    def check_id_exists(self, student_id):
        """检查学号是否重复"""
        try:
            with open(self.file_path, "r", encoding="utf-8") as f:
                for line in f:
                    if line.strip().split(",")[0] == student_id:
                        return True
            return False
        except FileNotFoundError:
            return False

    def get_all_students(self):
        """读取所有学生信息,返回Student对象列表"""
        students = []
        try:
            with open(self.file_path, "r", encoding="utf-8") as f:
                for line in f:
                    if line.strip():  # 跳过空行
                        students.append(Student.from_string(line))
        except FileNotFoundError:
            print("学生信息文件不存在,暂无学生数据!")
        return students

    def sort_students_by_score(self, reverse=True):
        """按成绩排序(默认降序,reverse=False为升序)"""
        students = self.get_all_students()
        if not students:
            return []
        # 按score属性排序
        students.sort(key=lambda s: s.score, reverse=reverse)
        return students

    def print_sorted_students(self):
        """打印排序后的学生信息"""
        sorted_students = self.sort_students_by_score()
        if not sorted_students:
            print("暂无学生信息可展示!")
            return
        
        print("\n===== 学生信息(按成绩降序)=====")
        print("学号\t姓名\t年龄\t性别\t成绩")
        print("-" * 40)
        for s in sorted_students:
            print(f"{s.id}\t{s.name}\t{s.age}\t{s.gender}\t{s.score}")

# 测试调用
if __name__ == "__main__":
    # 创建管理对象
    manager = StudentManager()
    
    # 录入学生信息
    manager.add_student(Student("001", "张三", 18, "男", 92.5))
    manager.add_student(Student("002", "李四", 19, "女", 88.0))
    manager.add_student(Student("003", "王五", 18, "男", 95.0))
    
    # 打印排序后的学生信息
    manager.print_sorted_students()
相关推荐
用户83562907805113 小时前
无需 Office:Python 批量转换 PPT 为图片
后端·python
markfeng814 小时前
Python+Django+H5+MySQL项目搭建
python·django
GinoWi15 小时前
Chapter 2 - Python中的变量和简单的数据类型
python
JordanHaidee15 小时前
Python 中 `if x:` 到底在判断什么?
后端·python
ServBay15 小时前
10分钟彻底终结冗长代码,Python f-string 让你重获编程自由
后端·python
闲云一鹤16 小时前
Python 入门(二)- 使用 FastAPI 快速生成后端 API 接口
python·fastapi
Rockbean17 小时前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
曲幽18 小时前
FastAPI + Ollama 实战:搭一个能查天气的AI助手
python·ai·lora·torch·fastapi·web·model·ollama·weatherapi
用户606487671889618 小时前
国内开发者如何接入 Claude API?中转站方案实战指南(Python/Node.js 完整示例)
人工智能·python·api
只与明月听19 小时前
RAG深入学习之Chunk
前端·人工智能·python