python基础-学习记录day17

126 阅读4分钟

模块包与学员管理系统

1、random模块

"""
random 随机模块
内置模块  直接导入就可以使用的

random模块常用方法

random.random()--> 随机生成[0,1)的数
random.randint()--> 随机生成整数[]
random.choice()--> 随机在序列取元素
random.shuffle()--> 打乱传入的容器内部顺序并返回
random.sample() --> 随机取样
random.randrange()--> 随机取整数[)
"""

import random
import time

print(random.random())  # [0,1)
time.sleep(random.random())  # 随机暂停
print(random.randint(1, 100))  # [1,100] 1和100都是能够取到的
"""验证码 6位纯数字 4个纯数字 """
li = []
for i in range(6):
    every_num = str(random.randint(0, 9))
    # print(every_num,type(every_num))
    li.append(every_num)

# print(li)

yanzhengma = ''.join(li)
print(yanzhengma, type(yanzhengma))  # 981898 <class 'str'>
li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(random.choice(li))  # 8

li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(li)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(li)  # 打乱的是列表本身
print(li)  # [4, 6, 5, 1, 8, 9, 2, 7, 3]

li = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print(random.sample(li, 6))  # 随机取样 要有参数 要知道你取几个 返回的是列表类型
# [0, 3, 8, 1, 2, 4]
print(random.randrange(1, 10))  # 在范围内随机取整数  [) 左闭右开# 8

2、json模块

import json

dic = {"name": "花花", "age": 18}
print(dic, type(dic))  # {'name': '花花', 'age': 18} <class 'dict'>
dic2 = {'name': '花花', 'age': 18}
print(dic2, type(dic2))  # {'name': '花花', 'age': 18} <class 'dict'>
"""
json类型的数据跟字典非常的相似
json中的数据必须使用双引号包裹。
json数据本质上也是字符串类型 
'{"name":"花花","age":18}'


json.loads()            -->  json转为字典(适用于语句)
json.dumps()         -->  字典转为json(适用于语句)
"""

# 1.dict--->str
a = "python"
b = {"city": "hunan"}
c = '{"city":"hunan"}'
d = '{"city":"hunan"}'
print(a, type(a), b, type(b), c, type(c))
# python <class 'str'> {'city': 'hunan'} <class 'dict'> {"city":"hunan"} <class 'str'>

res = str(b)
print(res, type(res))  # {'city': 'hunan'} <class 'str'>
res = json.dumps(b)
print(res, type(res))  # {"city": "hunan"} <class 'str'>

# 2.str--->dict
data = '{"age":18}'
# print(dict(data))  # 转不了报错

res2 = json.loads(data)
print(res2)  # {'age': 18}
"""
json.load()--> json转为字典(适用于文件)
json.dump()--> 字典转为json(适用于文件)
"""
import json

data = {"name": "huahua"}
f = open("data.json", mode="w")
# f.write(data)  # must be str, not dict  写入的必须是字符串
# 写进去
json.dump(data, f)  # 将字典转换成json文件 然后写入文件

# 读取文件
f = open("data.json", mode="r")
# res = f.read()
# print(type(res), res)
# f.seek(0)
# 运行下面之前先把上面的read注释掉  因为指针在最后面了 读取不了了 或者seek到0
j_data = json.load(f)  # 将json对象转换成字典
print(j_data)  # {'name': 'huahua'}
print(type(j_data), j_data.get("name"))  # <class 'dict'> huahua

image.png

3、模块导入

# module1.py
def printinfo1():
    print('printinfo1')


def printinfo11():
    print('printinfo11')
# module2.py
def printinfo2():
    print('printinfo2')


def printinfo22():
    print('printinfo22')
# import mypackage.module1,mypackage.module2
# from mypackage import module1,module2
# from mypackage import *

# import mypackage.module1
# mypackage.module1.printinfo1()
# mypackage.module1.printinfo11()
# import mypackage.module2
# mypackage.module2.printinfo2()
# mypackage.module2.printinfo22()


# from mypackage import module1,module2
# module1.printinfo1()
# module1.printinfo11()
# module2.printinfo2()
# module2.printinfo22()


# from mypackage.module1 import printinfo1,printinfo11
#
# printinfo1()
# printinfo11()

# 必须在`__init__.py`文件中添加__all__= [控制允许导入的模块列表]
from mypackage import *
module1.printinfo1()
module2.printinfo2()
# printinfo1
# printinfo2
# __init__.py
__all__ = ['module1', 'module2']

4、学员管理系统

image.png

# main.py
from manage import Student_Manage

# 开始运行
if __name__ == '__main__':
    # 创建对象
    student = Student_Manage()
    # 通过对象调用某个方法
    student.run()
# student.py
class Student():
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age

    def __str__(self):
        return f"姓名:{self.name}\t性别:{self.sex}\t年龄:{self.age}"
# manage.py
from student import Student

class Student_Manage():
    # 数据仓库
    def __init__(self):
        self.student_list = []

    # 显示功能界面
    def show_menu(self):
        print("======欢迎进入学员管理系统======")
        print("\t---1、添加学员信息---")
        print("\t---2、删除学员信息---")
        print("\t---3、修改学员信息---")
        print("\t---4、查看学员信息---")
        print("\t---5、显示学员信息---")
        print("\t---6、保存学员信息---")
        print("\t-----7、退出系统-----")

        # 主函数

    # 主函数
    def run(self):
        while True:
            # 显示功能菜单
            self.show_menu()
            number = int(input("输入对应的数字实现对应功能:"))
            if number == 1:
                self.add_student()
            elif number == 2:
                self.del_student()
            elif number == 3:
                self.modify_student()
            elif number == 4:
                self.search_student()
            elif number == 5:
                self.show_student()
            elif number == 6:
                self.save_student()
            elif number == 7:
                print("欢迎下次使用")
                break

    # 添加信息
    def add_student(self):
        name = input("请输入姓名:")
        sex = input("请输入性别:")
        age = input("请输入年龄:")
        # 创建一个学生对象
        student = Student(name, sex, age)  # 实例化对象
        print(student)
        # 将创建的学生对象传入列表中
        self.student_list.append(student)

    # 删除信息
    def del_student(self):
        stu_name = input("请输入你要删除的学员姓名:")
        for data in self.student_list:
            if data.name == stu_name:
                print(data.name, "---删除成功")
                self.student_list.remove(data)
                break
        else:
            print("当前学员不存在")

    # 修改信息
    def modify_student(self):
        stu_name = input("请输入你要修改的学员姓名:")
        for data in self.student_list:
            if data.name == stu_name:
                data.name = input("请输入姓名:")
                data.sex = input("请输入性别:")
                data.age = input("请输入年龄:")
                print(f"姓名:{data.name},性别:{data.sex},年龄:{data.age}")
                break
        else:
            print("学员不存在")

    # 查找信息
    def search_student(self):
        stu_name = input("请输入你要查找的学员姓名:")
        for data in self.student_list:
            if data.name == stu_name:
                print(f"姓名:{data.name},性别:{data.sex},年龄:{data.age}")

    # 显示信息
    def show_student(self):
        for data in self.student_list:
            print(f"姓名:{data.name},性别:{data.sex},年龄:{data.age}")

    # 保存信息 重要
    def save_student(self):
        for data in self.student_list:
            data_stu = f"姓名:{data.name},性别:{data.sex},年龄:{data.age}"
            with open("student.txt", "a", encoding="utf-8") as f:
                f.write(data_stu + "\n")

代码部分运行结果:

image.png

image.png

5、练习:

编写程序,生成一个包含20个随机整数的列表,

然后对其中偶数下标的元素进行降序排列,

奇数下标的元素不变。 (提示:使用切片。)

import random
# 方法1
li = [random.randint(1, 100) for i in range(20)]
print(li)
li1 = li[::2]
li2 = li[1::2]
li1.sort(reverse=True)
new_li = [''] * len(li)
new_li[::2] = li1
new_li[1::2] = li2
print(new_li)

# 方法2
li = [random.randint(1, 100) for i in range(20)]
print(li)
li1 = sorted(li[::2], reverse=True)
for i, j in enumerate(range(0, len(li), 2)):
    li[j] = li1[i]
print(li)

运行结果:

image.png