python第三次作业

第一题:

python 复制代码
# 1.使用os和os.path以及函数的递归完成:
# 给出一个路径,遍历当前路径所有的文件及文件夹
# 打印输出所有的文件(遇到文件输出路径,遇到文件夹继续进文件夹)
import os
import os.path
def recursion_test(item):
    if os.path.isdir(item):
        for i in os.listdir(item):
            new_item = os.path.join(item,i)
            if os.path.isfile(new_item):
                print(new_item) 
            elif os.path.isdir(new_item):
                print(new_item)
                recursion_test(new_item)
print(recursion_test("c:/Users/33019/Desktop/python/code/04python-module"))

第二题:

python 复制代码
#2.使用加密模块及IO模拟登录功能,要求使用文件模拟数据库存储用户名和密码。
import hmac
import io
def encryption_admin(str):
    slat = "*******!!!!!".encode("utf-8")
    return hmac.new(slat, str.encode("utf-8"), "md5").hexdigest()

user_input_name, user_input_pwd = input("请输入用户名和密码并使用空格隔开:").split(" ")
file_name = r"C:\Users\33019\Desktop\python\code\04python-module\admin.txt"



with io.open(file_name,"r",encoding="utf-8") as f:
    file_content = f.read().strip()
    f.seek(0)
    for line in f:
        file_user, file_pwd = line.strip().split(":")
        if encryption_admin(user_input_name) == file_pwd:
            print("登录成功")
            break
    else:
        print("登录失败")

第三题:

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

# 定义学生类
class Student:
    def __init__(self, name, stu_id, age, score):
        self.name = name    
        self.stu_id = stu_id
        self.age = age      
        self.score = score  

    def to_str(self):
        return f"{self.name}|{self.stu_id}|{self.age}|{self.score}"

    @staticmethod
    def from_str(line):
        parts = [part.strip() for part in line.split("|")]
        name, stu_id = parts[0], parts[1]
        age = int(parts[2])    
        score = float(parts[3])
        return Student(name, stu_id, age, score)

    def __repr__(self):
        return f"学生(姓名:{self.name}, 学号:{self.stu_id}, 年龄:{self.age}, 成绩:{self.score})"


# 学生管理类
class StudentManager:
    def __init__(self, file_path=r"C:\Users\33019\Desktop\python\code\04python-module\student_info.txt"):
        self.file_path = file_path 

    def input_student(self):
        print("===== 开始录入学生信息 =====")
        name = input("请输入学生姓名:")
        stu_id = input("请输入学生学号:")
        age = input("请输入学生年龄:")
        score = input("请输入学生成绩:")
        return Student(name, stu_id, age, score)

    def save_to_file(self, student, append=True):
        mode = "a" if append else "w"
        with open(self.file_path, mode, encoding="utf-8") as f:
            f.write(student.to_str() + "\n")
        print(f"===== 学生{student.name}的信息已成功保存 =====")

    def read_from_file(self):
        student_list = []
        try:
            with open(self.file_path, "r", encoding="utf-8") as f:
                for line in f.readlines():
                    if line.strip():  # 跳过文件中的空行,避免解析报错
                        student_list.append(Student.from_str(line))
            print("===== 从本地文件读取学生信息成功 =====")
        except FileNotFoundError:
            print(f"【提示】{self.file_path}文件不存在,暂无已存储的学生信息!")
        return student_list

    def sort_by_score(self, student_list, reverse=True):
        if not student_list:
            print("暂无学生信息,无法执行排序操作!")
            return []
        sorted_student = sorted(student_list, key=lambda s: s.score, reverse=reverse)
        # print(f"===== 学生信息已按成绩{'降序' if reverse else '升序'}排序完成 =====")
        return sorted_student



stu_manager = StudentManager()


count = int(input("请输入要录入的学生数量:"))  # 录入的学生数量,按需修改
for _ in range(count):
    student = stu_manager.input_student()
    stu_manager.save_to_file(student)  # 追加写入本地txt

all_stu = stu_manager.read_from_file()


if all_stu:
    print("\n【读取到的原始学生信息】:")
    print(all_stu)
    sorted_stu = stu_manager.sort_by_score(all_stu)
    print("\n【按成绩排序后的学生信息】:")
    print(sorted_stu)
相关推荐
韩立学长3 小时前
【开题答辩实录分享】以《助农信息发布系统设计与实现》为例进行选题答辩实录分享
python·web
码农水水3 小时前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展
wkd_0073 小时前
【Qt | QTableWidget】QTableWidget 类的详细解析与代码实践
开发语言·qt·qtablewidget·qt5.12.12·qt表格
东东5163 小时前
高校智能排课系统 (ssm+vue)
java·开发语言
余瑜鱼鱼鱼3 小时前
HashTable, HashMap, ConcurrentHashMap 之间的区别
java·开发语言
m0_736919103 小时前
模板编译期图算法
开发语言·c++·算法
【心态好不摆烂】3 小时前
C++入门基础:从 “这是啥?” 到 “好像有点懂了”
开发语言·c++
dyyx1113 小时前
基于C++的操作系统开发
开发语言·c++·算法
AutumnorLiuu3 小时前
C++并发编程学习(一)——线程基础
开发语言·c++·学习