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()
相关推荐
vx_biyesheji00012 小时前
豆瓣电影推荐系统 | Python Django 协同过滤 Echarts可视化 深度学习 大数据 毕业设计源码
大数据·爬虫·python·深度学习·django·毕业设计·echarts
鸽芷咕2 小时前
DrissionPage 成 CANN 仓库爆款自动化工具:背后原因何在?
运维·python·自动化·cann
爱学习的阿磊2 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
少云清2 小时前
【金融项目实战】7_接口测试 _代码实现接口测试(重点)
python·金融项目实战
深蓝电商API2 小时前
爬虫IP封禁后的自动切换与检测机制
爬虫·python
m0_550024632 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
B站_计算机毕业设计之家3 小时前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
渣渣苏3 小时前
Langchain实战快速入门
人工智能·python·langchain
lili-felicity3 小时前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python