nlp——python学习记录(11)

今天是基础课完结啦,最后那个学生管理系统最好自己再多写几遍,复盘复盘!!

异常捕获,导包,模块的内容,有一个内容被截掉了,记得补回去!

下面是今天的笔记内容:

# 异常:程序运行过程中,代码遇到错误,会终止程序代码的运行
num = input('请输入数字:')
num = 10 / int(num)
# 如果输入0就会发生异常
print(num)
# 异常的组成:‘异常类型’:‘具体的描述信息’

# 捕获异常:在运行过程中,遇到错误时不让程序终止,让其继续运行,同时给使用者一个提示信息
# 并记录这个错误,便于后期改进
# try: 可能发生异常的代码
# except (异常的类型1....): 发生异常的代码# try: 可能发生异常的代码
# except (异常的类型1....): 发生异常的代码
# try :
# except 异常类型1:
# except 异常类型2:
num = input('请输入数字:')
try:
    num = 10 / int(num)
    print(num)
except (ZeroDivisionError,ValueError):  # 多个异常
    print('输入错误')

num = input('请输入数字:')
try:
    num = 10 / int(num)
    print(num)
except ZeroDivisionError:  # 多个异常
    print('输入错误,不要输入0哦')
except ValueError:
    print('只能输入数字哦')

# 打印异常信息
# try: 可能发生异常的代码
# except (异常的类型1....) as 变量名:
# 发生异常的代码
# print(变量名)
num = input('请输入数字:')
try:
    num = 10 / int(num)
    print(num)
except (ZeroDivisionError,ValueError) as e:  # 多个异常
    print('输入错误',e)

# 捕获所有的异常!!!
# try: 可能发生异常的代码
# except: 发生异常执行的代码 (缺点:不能获取异常的描述信息)
# 或者:
# 异常的完整结构:
# try:可能发生异常的代码
# except Exception as e: 发生异常执行的代码  print(e)
# else: 代码没有异常会执行
# finally: 不管有没有异常都会执行

# Exception 是常见异常类的父类
num = input('请输入数字:')
try:
    num = 10 / int(num)
    print(num)
    # f = open('huiyu','r')  # [Errno 2] No such file or directory: 'huiyu'
except Exception as e:  # 多个异常
    print('输入错误',e)
else:
    print('没有发生异常')
finally:
    print('不管有没有异常都会执行')

# 异常的传递(理解):是底层机制,原理层面
# 异常的传递:当一行代码发生异常之后,会向外城将这哥异常进行传递,只到被捕获或者程序报错为止

# try嵌套
print('other')
num = input('请输入数字:')
try:
    try:  # 内层try发生的异常没有被捕获,会向外层进行传递
        a = int(num)
    except ZeroDivisionError:
        print('error')
    finally:
        print('执行啦')
    num = 10 / a
    print(num)
except Exception as e:
    print(e)



# 函数嵌套  5-3-1-7
def func():
    print('------1---------')
    num = input('输入')
    num = 10 / int(num)
    print(num)
    print('----2---------')


def func1():
    print('------3-------')
    func()
    print('----4-------')


try:
    print('5')
    func1()
    print('6')
except Exception as e:
    print('7')
    print(e)

# 抛出自定义异常(理解)
# 1.自定义异常类,继承Exception 或者BaseException
# 2.选择书写,定义__init__,__str__
# 3.在合适的实际抛出异常对象即可


class PasswordLength(Exception):  # 继承父类的方法
    pass


def get_password():  # 等同于系统定义函数
    password = input('请输入密码:')
    if len(password) >= 6:
        print('hege')
    else:
        # 抛出异常,异常对象
        raise PasswordLength('长度不对')


try:
    get_password()
except PasswordLength as e:
    print(e)  # 异常类的 __str__

print('其他代码')

# 模块 random,os
# 模块就是一个代码文件,是别人已经写好的,文件中的函数类以及变量我们都可以使用
# 好处:直接使用别人已经实现好的功能
# 模块的制作:制作一个模块就是定义一个代码文件
# 模块的名字要遵循标识符的规则(由字母,数字,下划线构成,不能由数字开头)
# 模块中可以定义变量,可以定义函数,定义类

# 想要使用模块的内容,必须先导入模块
# 如果导入的是自己书写的模块,使用的模块和代码文件需要在同一个目录下
# 方法一:import 模块名  使用:模块名.功能名
# 方法二:from 模块名 import 功能名1,2...
# 使用:功能名
# 注意点:如果存在同名的方法名,则会被覆盖
# 方法三:from 模块名 import * ,将模块中的所有功能进行导入(不建议用)

# as 起别名,可以对模块和功能起别名
# 注意:如果使用了别名,就不能使用原来的名字

# 模块中的变量 __all__ = () 在模块前边写上这句话
# 该变量可以在每个模块中定义,类型是元组,列表
# 作用:只是影响 from 模块名 import * 这种导入行为
# 1. 如果没有定义该变量,模块中的所有功能,都可以被导入
# 2. 如果定义了改变了,只能导入变量中定义的内容

# __name__ 在每个模块中都有,是系统自己定义的
# 1.直接运行当前代码,值为__main__
# 2.把文件作为模块导入时,结果是my_cacl(文件名)

# 模块的注意点
# 自己定义的模块名字,不要和系统中的名字一致
# 模块的搜索顺序,当前目录-->系统目录-->报错

# 包:功能相近或者相似的模块放在一个目录中,
# 并在目录中定义 __init__.py文件,这个目录就是包

面向对象版本的学生管理系统:将其分成三个文件,放入同一个目录下,方便查看

(1)main.py

main.py  # 程序启动


# 对象 = 管理系统类()
# 对象.start()
# 管理系统类,类名:StudentManagerSystem
#          属性:学生列表=[],学生字典={’学号‘:一个学生对象}
#          方法:增删改查,显示菜单信息
# 学生:字典  类名:Student  属性:姓名,年龄,性别,学号(唯一)
#           方法:init  str

# 面向对象开发的一般方式:
# 1.一个类作为一个单独的python文件
# 2.定义一个main.py作为程序启动文件
# 代码文件的组成:student.py   student_manager_system.py  main.py

# 保存,把具体的学生信息保存到文件中
# for x in {}.values():pass

# 读取文件,一行内容就是一个学生信息
# readline 读取所有行,会有换行符
# 将列表中的每一项数据转换为数据
# Student(id,name,age,gender)
# .strip()去除换行符 .split()  分割

import student_manager_system as sms

if __name__ == '__main__':
    stu_sms = sms.StudentMangerSystem()
    stu_sms.start()

(2)student.py

class Student(object):
    def __init__(self,stu_id,name,age,gender):
        self.stu_id = stu_id
        self.name = name
        self.age = age
        self.gender = gender

    def __str__(self):
        return f'{self.stu_id},{self.name},{self.age},{self.gender}'


if __name__ == '__main__':
    stu = Student(1,'aa',15,'m')
    print(stu)

(3)student_manager_system.py

import student


class StudentMangerSystem(object):
    def __init__(self):
        self.stu_dicts = {}

    @staticmethod
    def __show_menu():  # 功能菜单函数
        print('1.添加学生')
        print('2.删除学生')
        print('3.修改学生信息')
        print('4.查询单个学生信息')
        print('5.查询所有学生信息')
        print('6.退出系统')

    def __insert_student(self):
        # 判断学生信息是否存在,学号是否存在,key是否存在
        stu_id = input('请输入学号:')
        if stu_id in self.stu_dicts:
            print('学生信息已经存在啦,不要再添加')
            return
        name = input('请输入姓名:')
        age = input('请输入年龄:')
        gender = input('请输入性别:')

        stu = student.Student(stu_id,name,age,gender)
        # 放入字典
        self.stu_dicts[stu_id] = stu

    def __remove_student(self):
        stu_id = input('请输入要删除的学号')
        if stu_id in self.stu_dicts:
            # 删除字典中的数据 del 变量[key]
            del self.stu_dicts[stu_id]
            print('学生已删除')
        else:
            print('学生信息不存在')

    def __modify_student(self):
        stu_id = input('请输入要修改的学号')
        if stu_id in self.stu_dicts:
            # 修改
            stu = self.stu_dicts[stu_id]
            stu.age = input('请输入信息的年龄信息')
            print('信息已经修改完毕....')
        else:
            print('学生信息不存在')

    def __search_student(self):
        stu_id = input('请输入要查询的学号')
        if stu_id in self.stu_dicts:
            # 删除字典中的数据 del 变量[key]
            stu = self.stu_dicts[stu_id]
            print(stu)
        else:
            print('学生信息不存在')

    def __show_all_info(self):
        for stu in self.stu_dicts.values():
            print(stu)

    def __save(self):
        f = open('student.txt','w',encoding='utf-8')
        for stu in self.stu_dicts.values():
            f.write(str(stu) + '\n')
        f.close()

    def __load_info(self):
        try:
            f = open('student.txt','r',encoding='utf-8')
            buf_list = f.readlines()
            for buf in buf_list:
                buf = buf.strip()  # 去除换行符
                info_list = buf.split(',')  # 列表
                # 创建对象
                stu = student.Student(*info_list)
                # 将对象添加到字典中
                stu_id = info_list[0]
                self.stu_dicts[stu_id] = stu
            f.close()
        except Exception:
            pass

    def start(self):  # 将整个定义成一个函数
        self.load_info()
        while True:  # 多次进行
            self.show_menu()
            opt = input('请输入要选择对的操作编号:')
            if opt == '1':
                self.insert_student()
                pass
            elif opt == '2':
                self.remove_student()
                pass
            elif opt == '3':
                self.modify_student()
                pass
            elif opt == '4':
                self.search_student()
                pass
            elif opt == '5':
                self.show_all_info()
                pass
            elif opt == '6':
                print('6.退出系统')
                self.save()
                break
            else:
                print('输入错误,请重新输入')
                continue

            input('.......回车键继续操作......')

多敲多练!一定要自己写到不会出bug!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值