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("无效的命令。")

结果:

相关推荐
盐真卿2 小时前
python第八部分:高级特性(二)
java·开发语言
茉莉玫瑰花茶2 小时前
C++ 17 详细特性解析(5)
开发语言·c++·算法
lly2024062 小时前
《堆的 shift down》
开发语言
黎雁·泠崖2 小时前
【魔法森林冒险】2/14 抽象层设计:Figure/Person类(所有角色的基石)
java·开发语言
aiguangyuan3 小时前
使用LSTM进行情感分类:原理与实现剖析
人工智能·python·nlp
季明洵3 小时前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
小小张说故事3 小时前
BeautifulSoup:Python网页解析的优雅利器
后端·爬虫·python
墨雪不会编程3 小时前
C++之【深入理解Vector】三部曲最终章
开发语言·c++
luoluoal3 小时前
基于python的医疗领域用户问答的意图识别算法研究(源码+文档)
python