第十四天 模块与异常

1. 什么是模块

python中一个py文件就是一个模块
模块分为系统模块和自定义模块

2. 怎么使用模块 - 怎么在一个模块中去使用另外一个模块中的内容

注意:1)如果一个模块中的内容想要能够被别的模块使用,那么这个模块的名字必须符合变量名的要求
2)符合命名要求的模块中,只有全局变量可以被别的模块使用

3.怎么导入模块 - 要使用别的模块中的内容,必须先导入

1)import 模块名 - 导入指定模块,导入后可以通过’模块名.xxx’的方式去使用模块中所有的全局变量
2)from 模块名 import 变量名1, 变量名2, … - 导入指定模块,导入后可以直接使用import后面所有的全局变量
3) from 模块名 import * - 导入指定模块, 导入后可以直接使用模块中所有的全局变量
4)import 模块名 as 新模块名 - 导入模块的时候给模块重命名
5)from 模块名 import 变量名1 as 新变量名1, 变量名2, … - 重新给指定变量命名

1. 导入方式1: import 模块名

# import test
# print(test.a)
# print(test.x)
# test.func1()

# import functools
# functools.reduce()

2. 导入方式2:from 模块名 import 变量名1, 变量名2, …

# from test import a, func1
# print(a)
# # print(x)      # 报错:NameError: name 'x' is not defined!
# func1()

3. 导入方式3:from 模块名 import *

# from test import *
# print(a)
# print(x)
# func1()

4.模块重命名

# import 模块名 as 新模块名
# test = 100
# import test as test1
# print(test1.a, test1.x)
# test1.func1()

5.变量重命名

# from test import a, x as t_x
# print(t_x)
# print(a)

1. 导入原理

当代码执行到导入模块的操作的时候,系统会自动进入被导入的模块,将模块中的代码全部执行一遍。
import和from-import在导入模块的时候会自动检测模块是否重复导入,如果已经导入过,不会重复导入。

# import test
# import test
#
# print('其他语法')

2. 阻止导入

from downloadMovies import download

download('哈利波特1')
print(f'05的__name__:{__name__}')

if __name__ == '__main__':
    pass

1. 异常

程序在执行过程中报错,这个叫程序出现异常(错误 == 异常)
异常的出现会终止程序的运行

# print('++++++')
# print(10 + 'abc')
# print('------')
# print('=======')

2.捕获异常 - 让程序在出现异常的时候不报错,并且可以继续执行

1)捕获异常的使用场景:明明知道某个位置可能会出现异常,但是又无法(不愿意)通过修改代码来避免异常,
还想在异常出现的时候程序可以继续执行,就可以对这段代码进行异常捕获。

2)语法1: - 获取所有异常
try:
代码段1(需要捕获异常的代码段)
except:
代码段2(捕获到异常后会执行的代码)
其他代码

try:
代码段1(需要捕获异常的代码段)
except:
代码段2(捕获到异常后会执行的代码)
else:
代码段3(没有捕获到异常会执行的代码)
其他代码

执行过程: 先执行代码段1,如果代码段1没有异常直接执行其他代码;如果代码段1出现异常,马上执行代码段2,再执行其他代码

try:
    print('++++++')
    # print(10 + 'abc')
    print('------')
    print('=======')
except:
    print('出现异常!')
print('其他语句')
# 练习1:提示用户输入年龄,如果年龄输入有误,不报错,打印'年龄输入有误!'
# age = int(input('请输入年龄:'))
# try:
#     age = int(input('请输入年龄:'))
# except:
#     print('年龄输入有误!')
# 练习2:提示用户输入年龄,如果年龄输入有误,不报错,让用户重新输入,直到输入正确为止
# while True:
#     try:
#         age = int(input('请输入年龄:'))
#         break
#     except:
#         print('输入有误!')

3)语法2: - 捕获特定异常
try:
代码段1(需要捕获异常的代码)
except 异常类型:
代码段2(捕获到指定异常后执行的代码)

4)语法3: - 同时捕获多种异常,不同类型的异常做相同的处理
try:
代码段1(需要捕获异常的代码)
except (异常类型1, 异常类型2,…):
代码段2(捕获到指定异常后执行的代码)

5)语法4: - 同时捕获多种异常,根据不同类型的异常做不同的处理
try:
代码段1(需要捕获异常的代码)
except 异常类型1:
代码段11(捕获到指定异常后执行的代码)
except 异常类型2:
代码段22(捕获到指定异常后执行的代码)
except 异常类型3:
代码段33(捕获到指定异常后执行的代码)

# try:
#     age = int(input('请输入你年龄:'))
#     # print(age + '10')
# except ValueError:
#     pass

3. 关键字finally(了解)

try:
代码段1(需要捕获异常的代码段)
except 异常类型:
代码段2(捕获到异常后会执行的代码)
finally:
代码段3(无论前面的代码怎么执行的,代码段3都会执行)

print('-===========================================')
try:
    print('abc'[5])
    # print({'a': 10}['b'])
except KeyError:
    print('出现键错误异常!')
finally:
    print('finally')

print('其他语句')

作业

# 新建两个名为files.txt和files_student.txt的文本,内容都是空列表
# 新建一个名为files_stu_number.txt的文本,内容是数字0
# 可实现选择性删除、修改等功能
import hashlib


def add_stu():
    all_stu = eval(open('files_student.txt').read())  # type:list
    while True:
        stu_id = int(open('files_stu_number.txt').read())
        stu_name = input('请输入姓名:')
        age = input('请输入年龄:')
        tel = input('请输入电话:')
        stu_id += 1
        open('files_stu_number.txt', 'w').write(str(stu_id))
        all_stu.append({'学号': 'stu' + str(stu_id).zfill(4), '姓名': stu_name, '年龄': age, '电话': tel})
        open('files_student.txt', 'w').write(str(all_stu))
        print('添加成功!\n1.继续\n2.返回')
        value = input('请选择(1~2):')
        if value != '1':
            break


def inquire_stu_name():
    all_stu = eval(open('files_student.txt').read())  # type:list
    inquire_name = input('请输入要查找的姓名:')
    count = -1
    if inquire_name in [x['姓名'] for x in all_stu]:
        for x in all_stu:
            if inquire_name == x['姓名']:
                count += 1
                print(count, str(x)[1:-2].replace('\'', ''))
    else:
        print('该学生未录入信息!')


def inquire_stu_number():
    all_stu = eval(open('files_student.txt').read())  # type:list
    inquire_id = input('请输入要查找的(四位)学号:')
    for i in all_stu:
        if inquire_id == i['学号'][3:]:
            print(str(i)[1:-2].replace('\'', ''))
            break
    else:
        print('该学生未录入信息!')


def delete_student():
    all_stu = eval(open('files_student.txt').read())  # type:list
    print('1.按姓名删\n2.按学号删\n其他:返回')
    value = input('请选择(1~2):')
    if value == '1':
        delete_name = input('请输入要删除的学生姓名:')
        count = -1
        if delete_name in [x['姓名'] for x in all_stu]:
            delete_stu = []
            for x in all_stu:
                if delete_name == x['姓名']:
                    count += 1
                    print(count, str(x)[1:-2].replace('\'', ''), )
                    delete_stu.append(x)
            nums = eval(input('请输入需要删除的学生的标号(0~%d),其他返回:' % count))
            if type(nums) == int and 0 <= nums <= count:
                for i in all_stu:
                    if i == delete_stu[nums]:
                        all_stu.remove(i)
                        open('files_student.txt', 'w').write(str(all_stu))
                        print('成功删除!')
        else:
            print('该学生未录入信息')
    elif value == '2':
        delete_number = input('请输入要删除的学生(四位)学号:')
        for x in all_stu:
            if delete_number == x['学号'][3:]:
                print(x, '\n1.确认删除\n其他:返回')
                inquiry = input('请选择:')
                if inquiry == '1':
                    all_stu.remove(x)
                    open('files_student.txt', 'w').write(str(all_stu))
                    print('成功删除!')
                break
        else:
            print('该学生未录入信息')


def login():
    username = input('请输入账号:')
    password = input('请输入密码:')
    all_user = eval(open('files.txt').read())  # type:list
    for user in all_user:
        if username == user['username']:
            break
    else:
        print('登录失败!该账号不存在!')
        return
    hash1 = hashlib.md5()
    hash1.update(password.encode())
    result = hash1.hexdigest()
    if result == user['password']:
        print('登录成功!')
        while True:
            print("""
            ===========================
                🌺🌺欢迎%s:
                             ❤️1.添加学生
                             ❤️2.查看学生
                             ❤️3.修改学生信息
                             ❤️4.删除学生
                             ❤️5.返回
            =========================== """ % username)
            value = input('请选择(1~5):')
            all_stu = eval(open('files_student.txt').read())  # type:list
            if value == '1':
                add_stu()
            elif value == '2':
                if all_stu:
                    print('1.查看所有学生\n2.根据姓名查找\n3.根据学号查找\n其他:返回')
                    value = input('请选择(1~3):')
                    if value == '1':
                        for x in all_stu:
                            print(str(x)[1:-2].replace('\'', ''))
                    elif value == '2':
                        inquire_stu_name()
                    elif value == '3':
                        inquire_stu_number()
                else:
                    print('该账号没有可管理的学生,请先添加学生')
            elif value == '3':
                print('需要修改的学生\n1.根据姓名查找\n2.根据学号查找\n其他:返回')
                value = input('请选择(1~2):')
                if value == '1':
                    all_stu = eval(open('files_student.txt').read())  # type:list
                    inquire_name = input('请输入要查找的姓名:')
                    count = -1
                    if inquire_name in [x['姓名'] for x in all_stu]:
                        modification_stu = []
                        for x in all_stu:
                            if inquire_name == x['姓名']:
                                count += 1
                                print(count, str(x)[1:-2].replace('\'', ''))
                                modification_stu.append(x)
                        nums = eval(input('请输入需要修改的学生的标号(0~%d),其他返回:' % count))
                        if type(nums) == int and 0 <= nums <= count:
                            for i in all_stu:
                                if i == modification_stu[nums]:
                                    print('1.姓名\n2.年龄\n3.电话\n其他:返回')
                                    nums = input('请选择要修改的选项(1~3):')
                                    if nums == '1':
                                        new_name = input('请输入新的姓名:')
                                        i['姓名'] = new_name
                                        open('files_student.txt', 'w').write(str(all_stu))
                                        print('修改成功!')
                                        break
                                    elif nums == '2':
                                        new_age = input('请输入新的年龄:')
                                        i['年龄'] = new_age
                                        open('files_student.txt', 'w').write(str(all_stu))
                                        print('修改成功!')
                                        break
                                    elif nums == '3':
                                        new_tel = input('请输入新的电话:')
                                        i['电话'] = new_tel
                                        open('files_student.txt', 'w').write(str(all_stu))
                                        print('修改成功!')
                                        break
                    else:
                        print('该学生未录入信息!')
                elif value == '2':
                    all_stu = eval(open('files_student.txt').read())  # type:list
                    inquire_id = input('请输入要查找的(四位)学号:')
                    for i in all_stu:
                        if inquire_id == i['学号'][3:]:
                            print(str(i)[1:-2].replace('\'', ''))
                            print('1.姓名\n2.年龄\n3.电话\n其他:返回')
                            nums = input('请选择要修改的选项(1~3):')
                            if nums == '1':
                                new_name = input('请输入新的姓名:')
                                i['姓名'] = new_name
                                open('files_student.txt', 'w').write(str(all_stu))
                                print('修改成功!')
                                break
                            elif nums == '2':
                                new_age = input('请输入新的年龄:')
                                i['年龄'] = new_age
                                open('files_student.txt', 'w').write(str(all_stu))
                                print('修改成功!')
                                break
                            elif nums == '3':
                                new_tel = input('请输入新的电话:')
                                i['电话'] = new_tel
                                open('files_student.txt', 'w').write(str(all_stu))
                                print('修改成功!')
                                break
                    else:
                        print('该学生未录入信息!')
            elif value == '4':
                delete_student()
            elif value == '5':
                break
            else:
                print('输入有误!')
    else:
        print('登录失败!密码错误!')


def register():
    username = input('请输入账号:')
    password = input('请输入密码:')
    all_user = eval(open('files.txt').read())  # type:list
    if username in [x['username'] for x in all_user]:
        print('注册失败,该账号已经被注册!')
        return
    hash1 = hashlib.md5()
    hash1.update(password.encode())
    result = hash1.hexdigest()
    all_user.append({'username': username, 'password': result})
    open('files.txt', 'w').write(str(all_user))
    print('注册成功!')


def show_main():
    while True:
        print("""
        ===============================
            **欢迎来到学生信息管理系统**
                         1.登               录
                         2.注               册
                         3.退               出
        ===============================
""")
        choice = input('请选择(1~3):')
        if choice == '1':
            login()
        elif choice == '2':
            register()
        elif choice == '3':
            print('退出')
            break
        else:
            print('输入有误!')


show_main()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值