python第三次作业

1.使用os和os.path以及函数的递归完成:

给出一个路径,遍历当前路径所有的文件及文件夹

打印输出所有的文件(遇到文件输出路径,遇到文件夹继续进文件夹)

python 复制代码
import os

def traverse_path(path):
    # 检查路径是否存在
    if not os.path.exists(path):
        print(f"错误:路径 '{path}' 不存在。")
        return
    # 遍历当前路径下的所有条目
    for entry in os.listdir(path):
        # 构建条目的完整路径
        full_path = os.path.join(path, entry)
        
        # 如果是文件,打印其路径
        if os.path.isfile(full_path):
            print(f"文件: {full_path}")
        # 如果是文件夹,递归调用自身继续遍历
        elif os.path.isdir(full_path):
            traverse_path(full_path)
if __name__ == "__main__":
    # 替换为你要遍历的路径,'D:/python/code' 表示当前目录
    target_path = 'D:/Python/code'
    print(f"开始遍历路径: {target_path}\n")
    traverse_path(target_path)

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

python 复制代码
import hashlib
import os

# 定义模拟数据库的文件路径
DB_FILE = "users.txt"

def hash_password(password):
    return hashlib.sha256(password.encode()).hexdigest()

def register_user(username, password):
    # 检查用户是否已存在
    if os.path.exists(DB_FILE):
        with open(DB_FILE, 'r', encoding='utf-8') as f:
            for line in f:
                existing_user, _ = line.strip().split(':')
                if existing_user == username:
                    print("注册失败:用户名已存在。")
                    return

    # 加密密码并写入文件
    hashed_pwd = hash_password(password)
    with open(DB_FILE, 'a', encoding='utf-8') as f:
        f.write(f"{username}:{hashed_pwd}\n")
    print("注册成功!")

def login_user(username, password):
    if not os.path.exists(DB_FILE):
        print("登录失败:用户数据库不存在。")
        return False

    hashed_pwd = hash_password(password)
    with open(DB_FILE, 'r', encoding='utf-8') as f:
        for line in f:
            stored_user, stored_pwd = line.strip().split(':')
            if stored_user == username and stored_pwd == hashed_pwd:
                print("登录成功!")
                return True
    print("登录失败:用户名或密码错误。")
    return False

# 示例调用
if __name__ == "__main__":
    print("=== 用户注册/登录系统 ===")
    while True:
        choice = input("请选择操作 (1-注册, 2-登录, 3-退出): ")
        if choice == '1':
            username = input("输入用户名: ")
            password = input("输入密码: ")
            register_user(username, password)
        elif choice == '2':
            username = input("输入用户名: ")
            password = input("输入密码: ")
            login_user(username, password)
        elif choice == '3':
            break
        else:
            print("无效选择,请重试。")

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

python 复制代码
import json
# 补充缺失的os模块导入(修复NameError错误)
import os

# 定义存储学生信息的文件路径
STUDENT_FILE = "students.txt"

class Student:

    def __init__(self, student_id, name, score):

        self.student_id = student_id
        self.name = name
        self.score = score

    def to_dict(self):
 
        return {
            "student_id": self.student_id,
            "name": self.name,
            "score": self.score
        }

    @classmethod
    def from_dict(cls, data):

        return cls(data["student_id"], data["name"], data["score"])

def add_student():

    try:
        student_id = input("输入学号: ")
        # 校验学号非空
        if not student_id.strip():
            print("错误:学号不能为空!")
            return
        
        name = input("输入姓名: ")
        if not name.strip():
            print("错误:姓名不能为空!")
            return
        
        score = float(input("输入成绩: "))
        # 校验成绩范围
        if score < 0 or score > 100:
            print("错误:成绩需在0-100之间!")
            return
        
        student = Student(student_id, name, score)
        
        # 读取现有学生信息
        students = load_students()
        
        # 检查学号是否重复
        for s in students:
            if s.student_id == student_id:
                print(f"错误:学号{student_id}已存在!")
                return
        
        students.append(student)
        
        # 保存更新后的学生信息
        save_students(students)
        print("学生信息添加成功!")
    except ValueError:
        print("错误:成绩必须是数字!")
    except Exception as e:
        print(f"添加失败:{str(e)}")

def load_students():

    # 修复os模块未导入导致的NameError
    if not os.path.exists(STUDENT_FILE):
        return []
    
    try:
        with open(STUDENT_FILE, 'r', encoding='utf-8') as f:
            data = json.load(f)
            return [Student.from_dict(item) for item in data]
    except json.JSONDecodeError:
        print("警告:学生信息文件格式错误,已重置为空列表!")
        return []
    except Exception as e:
        print(f"加载学生信息失败:{str(e)}")
        return []

def save_students(students):

    try:
        data = [student.to_dict() for student in students]
        with open(STUDENT_FILE, 'w', encoding='utf-8') as f:
            json.dump(data, f, ensure_ascii=False, indent=4)
    except Exception as e:
        print(f"保存学生信息失败:{str(e)}")

def sort_students_by_score():

    students = load_students()
    if not students:
        print("暂无学生信息。")
        return
    
    # 按成绩降序排序
    sorted_students = sorted(students, key=lambda x: x.score, reverse=True)
    
    print("\n=== 学生成绩排名(降序) ===")
    for i, student in enumerate(sorted_students, 1):
        print(f"{i}. 学号: {student.student_id}, 姓名: {student.name}, 成绩: {student.score}")

# 示例调用
if __name__ == "__main__":
    print("=== 学生信息管理系统 ===")
    while True:
        choice = input("\n请选择操作 (1-添加学生, 2-查看成绩排名, 3-退出): ")
        if choice == '1':
            add_student()
        elif choice == '2':
            sort_students_by_score()
        elif choice == '3':
            print("退出系统,再见!")
            break
        else:
            print("无效选择,请输入1、2或3!")
相关推荐
John Song1 天前
Python创建虚拟环境的方式对比与区别?
开发语言·python
geovindu1 天前
python: Bridge Pattern
python·设计模式·桥接模式
搞程序的心海1 天前
Python面试题(一):5个最常见的Python基础问题
开发语言·python
宝贝儿好1 天前
【强化学习实战】第十一章:Gymnasium库的介绍和使用(1)、出租车游戏代码详解(Sarsa & Q learning)
人工智能·python·深度学习·算法·游戏·机器学习
程序媛一枚~1 天前
✨✨✨使用Python,OpenCV及图片拼接生成❤️LOVE❤️字样图,每张小图加随机颜色边框,大图加随机大小随机颜色边框
图像处理·python·opencv·numpy·图像拼接
MediaTea1 天前
Python:collections.Counter 常用函数及应用
开发语言·python
如若1231 天前
flash-attn 安装失败?从报错到成功的完整排雷指南(CUDA 12.8 + PyTorch 2.7)
人工智能·pytorch·python
007张三丰1 天前
知乎高赞回答爬虫:从零开始,建立你的专属知识库
爬虫·python·知识库·python爬虫·知乎·高赞回答