一、简单的学生系统(老师的)
# 1.分析数据结构
"""
学生管理系统管理学生---->管理多个学生---->需要容器存储学生---->容器选择---->列表?字典?元组?集合?
因为学生管理涉及增删改查---->列表、字典---->系统对应的大的容器是字典 ---->字典的某一个key对应的值是所有的学生
---->每一个学生是一个字典
"""
# 声明所有的key值
key_all_student = 'students'
key_name = 'name'
key_age = 'age'
key_tel = 'tel'
ke_id = 'id'
# 系统的容器
system_info = {}
# 当前以及添加过的学生人数
number = 0
# 系统入口
while True:
print('''
----欢迎进入xxx学生管理系统----
1.添加学生
2.查看学生信息
3.删除学生信息
4.修改学生信息
0.退出系统
-----------------------------
''')
input_value = input('请选择:')
# 退出系统
if input_value == '0':
break
# 添加学生
if input_value == '1':
while True:
print('----添加学生----')
add_name = input('姓名:')
add_age = input('年龄:')
add_tel = input('电话:')
# 产生学号
number += 1
add_id = 'py1805' + str(number).rjust(3, '0')
# 创建学生(一个学生就是一个字典)
add_student = {key_name:add_name, key_age:add_age, key_tel:add_tel, ke_id:add_id}
# 获取存学生的容器
all_student = system_info.get(key_all_student)
if not all_student:
all_student = []
# 将学生添加到容器中
all_student.append(add_student)
system_info[key_all_student] = all_student
print('添加学生%s成功' % add_name)
print(system_info)
# 给出选择
print('1.继续添加\n其他:返回上一层')
add_input = input('>>>>')
if add_input != '1':
break
continue
# 查看学生
if input_value == '2':
print('''
----查看学生----
1.查看所有的学生信息
2.根据姓名查看学生信息
3.根据学号查看学生信息
4.返回上一层
''')
find_input = input('>>>>')
if find_input == '4':
continue
# 拿到所有的学生
all_students = system_info.get(key_all_student)
# 系统中没有学生
"""
or和and的短路操作:
表达式1 or 表达式2 ---- 如果表达式1为True,就不会执行表达式2
达式1 and 表达式2 ---- 如果表达式1为False,就不会执行表达式2
"""
if not all_students or not len(all_students):
print('还没有学生信息!')
continue
# 查看所有的学生信息
if find_input == '1':
# 系统中存在学生
for student in all_students:
print('姓名:%s,年龄%s,电话:%s,学号:%s' %
(student[key_name], student[key_age], student[key_tel], student[ke_id]))
# 根据姓名
elif find_input == '2':
find_name = input('请输入学生的名字:')
# 表示是否找不到
flag = True
for student in all_students:
# 如果学生名字和输入的名字相同就打印该学生的信息
if find_name == student[key_name]:
print(student)
flag =False
if flag:
print('找不到该学生的信息!')
# 根据学号
elif find_input == '3':
find_id = input('请输入学生的id:')
flag = True
for student in all_students:
if find_id == student[ke_id]:
print(student)
flag = False
break
if flag:
print('找不到该学生的信息!')
continue
# 删除学生
if input_value == '3':
while True:
print('''
1.按姓名删除
2.按学号删除
3.返回
''')
del_input = input('>>>>')
if del_input == '3':
break
# 找出所有学生
all_students = system_info.get(key_all_student)
if not all_students or not len(all_students):
print('没有改学生的信息')
break
if del_input == '1':
del_name = input('输入要删除的学生信息的学生姓名:')
del_student = []
# 找到所有可能被删除的学生
for student in all_students:
if del_name == student[key_name]:
# 保存可能被删除的学生的信息
del_student.append(student)
# 判断有没有符合的信息
if not len(del_student):
print('没有找到符合的学生!')
break
# 打印可能被删除的学生信息
index = 0
for student in del_student:
print(index, student)
index += 1
len1 = len(del_student)-1
del_index = input('请输入要删除的信息的编号(0-%d):' % len1)
del_student = del_student[int(del_index)]
system_info[key_all_student].remove(del_student)
print('删除成功')
continue
# 修改学生
if input_value == '4':
print('修改学生')
continue
二、了解函数
"""左移-右移-左移-右移-左移"""
"""
问题在哪?
1.同样一个功能的代码需要重复写多次
2.当功能发生改变的时候,需要修改多个地方
怎么解决这个问题?
使用函数
"""
# 发射子弹
print('上弹')
print('瞄准')
print('扣扳机')
# 左移
def left():
print('看后视镜')
print('向左打方向盘')
print('踩油门')
print('回正方向盘')
# 右移
def right():
print('看后视镜')
print('向右打方向盘')
print('踩油门')
print('回正方向盘')
三、函数
函数:函数就是对实现某一特定功能的代码块的封装
作用:封装(将功能绑定在一个函数中,想要使用这个功能时直接调用函数)
怎么声明函数:
def function(参数列表):
'''函数说明'''
函数体
def:Python中声明函数的关键字
函数说明:对函数的功能和参数以及返回值进行说明
function():标识符,PEP8,见名知意。
():固定格式
参数列表:形参列表 参数名1,参数名2,参数名3
参数的功能是接收从函数外部传到参数内部的数据
函数体:实现函数功能的代码块,可能会包含一个return语句初学者声明函数的步骤:
a.确定函数的功能
b.确定函数名
c.确定参数
确定需不需要参数
确定需要几个参数
(看实现函数的功能需不需要从外面传数据到函数中)
d.实现函数的功能
e.确定返回值函数的调用
函数名(实参列表)
函数名:调用的函数一定是已经声明过的,想要使用什么功能就调用对应的函数
实参列表:实参是用来给形参赋值的
***!!!函数的调用过程:
0.回到函数声明的地方
1.使用实参给形参赋值
2.执行函数体
3.函数体执行完成后,回到函数调用的位置
注意:
a.函数只有在调用的时候才会执行
b.函数调用的时候一定要保证每个形参都有值
c.一个函数可以调用多次
四、参数
# 1.位置参数
"""
传参的时候,实参按顺序给形参赋值
"""
def func1(a, b, c):
print(a, b, c)
func1(1, 2, 3)
结果:
1 2 3
# 2.关键字参数
"""
调用函数的时候:
函数名(参数=值)
"""
func1(b=2, c=3, a=1)
# 说明:位置参数和关键字可以混着来
def func11(a, d, b=40, c=30):
print(a, b, c, d)
func11(10, d=20)
结果:
1 2 3
10 40 30 20
# 3.参数的默认值
"""
python中函数的参数可以设置默认值
有默认值的参数必须放在参数列表的最后
调用参数有默认值的函数时,有默认值的参数可以传参也可以不传参
"""
def func2(a, b, c=100):
print(a, b, c)
func2(1, 2)
结果:
1 2 100
# 4.参数个数不定
"""
函数的参数个数不确定的时候,就在声明函数的时候就在形参的前面加一个*,将形参变成元组
调用这个函数的时候,这个参数会将对应的实参作为元组保存起来
*形参可以不传参
"""
# 写一个函数,功能是求多个数的和
def my_sum(*numbers):
print(numbers)
sum1 = 0
for item in numbers:
sum1 += item
return sum1
print(my_sum(1, 2, 3))
# 注意:参数个数不定,可以是形参中的一部分是不定的
# 不定形参只能写在后面
def func3(char, *numbers):
print(numbers, char)
func3('a', 1, 2)
结果:
(1, 2, 3)
6
(1, 2) a