python练习3

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

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

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

代码如下:

python 复制代码
import os
def f(p):
    if os.path.isfile(p):
        print(p)
    elif os.path.isdir(p):
        for i in os.listdir(p):
            f(os.path.join(p, i))
f('.')                             

运行结果如下:

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

代码如下:

python 复制代码
import os
import hmac

DB_FILE = 'users.db'

def encrypt(s):
    salt = "*******1!!!!"
    return hmac.new(s.encode(), salt.encode(), "md5").hexdigest()

def load():
    d = {}
    if os.path.exists(DB_FILE):
        with open(DB_FILE, 'r') as f:
            for l in f:
                l = l.strip()
                if l:
                    u, p = l.split(':')
                    d[u] = p
    return d

def save(d):
    with open(DB_FILE, 'w') as f:
        for u, p in d.items():
            f.write(f'{u}:{p}\n')

def reg():
    d = load()
    u = input('用户名: ')
    if u in d:
        print('用户已存在')
        return
    p = input('密码: ')
    p2 = input('确认密码: ')
    if p != p2:
        print('密码不一致')
        return
    d[u] = encrypt(p)
    save(d)
    print('注册成功')

def login():
    d = load()
    u = input('用户名: ')
    if u not in d:
        print('用户不存在')
        return
    p = input('密码: ')
    if d[u] == encrypt(p):
        print('登录成功')
    else:
        print('密码错误')

while True:
    print('\n1.注册 2.登录 3.退出')
    c = input('选择: ')
    if c == '1':
        reg()
    elif c == '2':
        login()
    elif c == '3':
        break
    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

    def total(self):
        return self.chinese + self.math + self.english


students = []

while True:
    print("1.录入 2.查看 3.退出")
    c = input("选择:")

    if c == "1":
        name = input("姓名:")
        number = input("学号:")
        chinese = int(input("语文:"))
        math = int(input("数学:"))
        english = int(input("英语:"))
        s = Student(name, number, chinese, math, english)
        students.append(s)
        f = open("students.txt", "a", encoding="utf-8")
        f.write(f"{name},{number},{chinese},{math},{english}\n")
        f.close()
        print("保存成功")

    elif c == "2":
        f = open("students.txt", "r", encoding="utf-8")
        students = []
        for line in f:
            if line.strip():
                p = line.strip().split(",")
                s = Student(p[0], p[1], int(p[2]), int(p[3]), int(p[4]))
                students.append(s)
        f.close()
        students.sort(key=lambda x: x.total(), reverse=True)
        print("姓名\t学号\t\t语文\t数学\t英语\t总分")
        for s in students:
            print(f"{s.name}\t{s.number}\t{s.chinese}\t{s.math}\t{s.english}\t{s.total()}")

    elif c == "3":
        break

运行结果如下:

相关推荐
牢姐与蒯1 天前
c++数据结构之c++11(二)
开发语言·c++
z200509301 天前
【linux学习】深入理解 Linux 进程间通信:管道的艺术与实现
linux·开发语言
财经资讯数据_灵砚智能1 天前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年6月7日
人工智能·python·ai·信息可视化·自然语言处理·ai编程·灵砚智能
lcj25111 天前
【stack、queue、deque、priority_queue】C++ 栈 / 队列 / 优先级队列全解析!手撕实现 + 二叉树层序遍历(附源码)
开发语言·c++·笔记
smith成长之旅1 天前
08 | Mem0 框架分析: BM25 的 Sigmoid 归一化
数据库·python·算法
DogDaoDao1 天前
【第 04 篇】列表与元组 —— 序列类型核心详解
人工智能·python·深度学习·神经网络·机器学习·conda·numpy
idingzhi1 天前
A股量化策略日报(2026年06月07日)
python
奋斗的小方1 天前
Java进阶篇1-2:泛型
java·开发语言·windows
say_fall1 天前
模拟量输入输出技术超详细知识点总结
linux·开发语言·嵌入式硬件·学习·php
我是一颗柠檬1 天前
C++最全面复习:从入门到精通(2026年)
开发语言·c++·visualstudio