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()