Python每日笔记10

本次内容:自定义异常类+面对对象案例

>> Python每日笔记—目录 <<

自定义异常类

自定义异常类,之所以没有和之前的异常放在一起,是因为那时还没有学习面向对象的内容。
案例:比对输入密码长度,如果长度小于3则抛出异常

'''自定义一个异常类
    python中抛出自定义异常的语法:  raise 异常类对象
'''
class ShortInputError(Exception):
    def __init__(self, length, min_len):
        # 用户输入密码的长度
        self.length = length
        # 系统要求的最少长度
        self.min_len = min_len
    # 设置异常的描述信息
    def __str__(self):
        return '你输入的密码长度是%d,密码长度不能小于%d' % (self.length, self.min_len)

def main():
    # 抛出异常
    try:
        password = input('请输入密码:')
        length = len(password)
        if length < 3:
            # 抛出异常类创建的对象
            raise ShortInputError(length, 3)
    except Exception as e:
        print(e)
    else:
        print("没有异常密码输入完成")

# 调用一下函数
main()

面向对象案例-学生管理

首先定义一个学生类,编写构造函数,有姓名、性别、电话属性

'''定义学生类'''
class Student(object):
    def __init__(self, name, gender, tel):
        self.name = name
        self.gender = gender
        self.tel = tel

    def __str__(self):
        return self.name + ',' + self.gender + ',' + self.tel
'''需求:
    1、存储数据的位置   student.data(文件)
       加载文件数据
       修改数据后保存到文件
    2、存储当前数据的形式:列表存储学生对象
    3、系统功能:
            添加学生
            删除学生
            修改学生
            查询学生信息
            显示所有学生信息
            保存学生信息
            退出系统
'''
# 导入类
from Day08.student import Student
class StudentManager(object):
    def __init__(self):
        # 存储数据所用的列表,命名为student_list
        self.student_list = []

    # 定义功能函数
    # 2.1 显示功能函数
    def show_menu(self):
        print("请选择如下功能:")
        print("1、添加学生")
        print("2、删除学生")
        print("3、修改学生信息")
        print("4、查询学生信息")
        print("5、显示所有学生信息")
        print("6、保存学生信息")
        print("7、加载学生信息")
    # 2.2 添加学生
    def add_student(self):
        # 用户输入姓名、性别、手机号
        name = input("请输入姓名:")
        gender = input("请输入性别:")
        tel = input("请输入手机号:")
        # 创建学生对象
        student = Student(name, gender, tel)
        # 将该学生对象添加到列表
        self.student_list.append(student)
        # 打印信息
        print(self.student_list)
        print(student)

    # 2.3 删除学生
    def del_student(self):
        # 用户输入学生的姓名
        del_name = input("请输入要删除的学生姓名:")
        # 如果用户输入的目标学生存在则删除,否则提示不存在
        for i in self.student_list:
            if i.name == del_name:
                self.student_list.remove(i)
                break
        else:
            print("查无此人")
        # 打印学生列表,验证是否删除
        print(self.student_list)

    # 2.4 修改学生信息
    def modify_student(self):
        # 用户输入学生的姓名
        mod_name = input("请输入要修改的学生姓名:")
        # 如果用户输入的目标学生存在则删除,否则提示不存在
        for i in self.student_list:
            if i.name == mod_name:
                new_name = input("请输入新的姓名")
                new_gender = input("请输入新的性别")
                new_tel = input("请输入新的电话")
                # 输入不为空则修改
                if new_name != "":
                    i.name = new_name
                if new_gender != "":
                    i.gender = new_gender
                if new_tel != "":
                    i.tel = new_tel
                print("修改成功,姓名为%s,性别为%s,电话为%s" % (new_name, new_gender, new_tel))
                break
        else:
            print("查无此人")
        # 打印学生列表,验证是否修改
        print(self.student_list)

    # 2.5 查询学生信息
    def search_student(self):
        # 输入查询的学生姓名
        search_name = input("请输入查询的姓名:")
        for i in self.student_list:
            if i.name == search_name:
                print(i)
                break
        else:
            print("查无此人")

    # 2.6 显示所有学生信息
    def all_student(self):
        for i in self.student_list:
            print(i)

    # 2.7 保存学生信息,写入文件
    def save_student(self):
        # 打开文件
        file1 = open("student.data", 'w', encoding="utf-8")
        # 写入文件
        '''
            类的__dict__属性和对象的__dict__属性
            注意:文件写入的数据不能是学院对象的内存地址,将学生数据转换成列表字典数据,
            然后再进行存储
        '''
        # 使用推导式
        new_list = [i.__dict__ for i in self.student_list]
        print(new_list)
        # 文件内数据要求是字符串类型,需要先转换成字符串类型
        file1.write(str(new_list))
        file1.close()

    # 2.8 加载学生信息,读取文件
    def read_student(self):
        global file1
        try:
            file1 = open("student.data", 'r', encoding="utf-8")
        except:
            file1 = open("student.data", 'w', encoding="utf-8")
        else:
            # 读取数据并添加
            data = file1.read()
            '''
                文件中读取的数据都是只读,且字符串内部为字典数据
                需要转换数据类型,在转换为字典对象后存储
                eval()函数,用来执行一个字符串表达式,并返回表达式的值
            '''
            new_list = eval(data)
            # 使用推导式简化代码
            self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
        finally:
            file1.close()

    def run(self):
        self.show_menu()
        while True:
            num = int(input("请输入功能"))
            if num == 1:
                self.add_student()
            elif num == 2:
                self.del_student()
            elif num == 3:
                self.modify_student()
            elif num == 4:
                self.search_student()
            elif num == 5:
                self.all_student()
            elif num == 6:
                self.save_student()
            elif num == 7:
                self.read_student()

student.data文件内容:
[{
     'gender': '1', 'tel': '1', 'name': '1'}, {
     'gender': '2', 'tel': '2', 'name': '2'}]

今天通过这个案例,面对对象的内容就结束了
明天开始图形化界面GUI的设计,提前高能预警

tip:说明一下,为什么把文件分开放置,而不写在一个文章中,我个人觉得,一整片万字长文读起来很累,眼睛看的很累,所以我把python的各个内容相关的放在一起,方便每日学习。

如果这篇文章对你有帮助,点个赞呗~

你可能感兴趣的:(类,面向对象编程,python)