Python代码练习

问题:

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

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

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

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

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

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 = "python-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_gpf():
    user_data = {}
    with open("E:\python学习\python-homework\gpf666.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_gpf()
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("无效的命令。")

结果:

相关推荐
dapeng28701 小时前
分布式系统容错设计
开发语言·c++·算法
2501_945423541 小时前
用Matplotlib绘制专业图表:从基础到高级
jvm·数据库·python
2301_793804691 小时前
使用Python处理计算机图形学(PIL/Pillow)
jvm·数据库·python
qq_417695051 小时前
代码热修复技术
开发语言·c++·算法
badhope6 小时前
Mobile-Skills:移动端技能可视化的创新实践
开发语言·人工智能·git·智能手机·github
码云数智-园园7 小时前
微服务架构下的分布式事务:在一致性与可用性之间寻找平衡
开发语言
吴佳浩7 小时前
GPU 编号进阶:CUDA\_VISIBLE\_DEVICES、多进程与容器化陷阱
人工智能·pytorch·python
C++ 老炮儿的技术栈7 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
hz_zhangrl7 小时前
CCF-GESP 等级考试 2026年3月认证C++一级真题解析
开发语言·c++·gesp·gesp2026年3月·gespc++一级
Liu628887 小时前
C++中的工厂模式高级应用
开发语言·c++·算法