删除用户功能实现 | 学习笔记

简介: 快速学习 删除用户功能实现

开发者学堂课程【Python入门 2020年版删除用户功能实现】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10439


删除用户功能实现


内容介绍:

一、   删除用户功能实现

二、   数据库的格式


一、删除用户功能实现

在该实例中分为按姓名删和按学号删。比如拿到操作板 num= input('1.按姓名删\n2.按学号删\n 其他:返回’),如果num==1,按名字删;elif num==2(12是要加引号的)按学号删。

def delte_student( ):

num = input('1.按姓名删\n2.按学号删\n其他:返回’)

if num ==’ 1’:

pass

elif num == '2 ':

pass

else:

return

如果那名字删就要让别人输入名字。

我们先查看学生:

学号:stu0001,姓名:王老大,性别:男,年龄:18,电话:119

学号:stu0002,姓名:jerry,性别:女,年龄:19,电话:118

我们再添加一个学生 jerry

请选择(1-5:1

请输入名字:jerry

请输入年龄:男

请输入性别:20

请输入电话:111

添加成功!

1.继续

2.返回

请选择(1-2):2

欢迎 tony:

1.  添加学生

2.  查看学生

3.  修改学生信息

4.  删除学生

5.  返回

请选择(1-5):4

1.按名字删

2.按学号删

其他:返回

请选择:jerry

欢迎 tony:

1.  添加学生

2.  查看学生

3.  修改学生信息

4.  删除学生

5.  返回

请选择(1-5:4

1.按名字删

2.按学号删

其他:返回

请选择:1

请输入要删除的学生名字:jerry

0学号:stu0002,姓名:jerry,性别:女,年龄:19,电话:118

1学号:stu0003,姓名:jerry,性别:男,年龄:20,电话:111

(如果有同名的,会将下标,名字列出,可选择删除对象)

请输入需要删除的学生的标号(0~1),q-返回:(因有两个,所以标号是0~1,既其他就返回)

如果别人输入11是请输入需要删除的名字。先拿到学生名字,接着读文件。

读文件后,拿到所有的学生,得到一个列表。然后删除的名字等等于这个名字,接着判断有还是没有。如果没有学生直接返回。接着删除学生,根据名字删除,也有学号删除。接着到过滤,value 默认等等于空,然后等等于 value,就拿到这个值。

再拿到 students 就进行过滤:

def delte_student( ):

y=file_manager.read_json(name+’.json’,{})

students=y.get(‘all_student’,[])

key=value=‘’

if not students:

print(‘该老师还没有学员,请添加学员’)

return

num = input('1.按姓名删\n2.按学号删\n其他:返回’)

if num ==’ 1’:

del_name=input(‘请输入要删除的学生名字:’)

elif num == '2 ':

del_id=input(‘请输入要删除的学生id’)

else:

return

students=filter(lambda s:s.get(key,’’)==valuestudents)

进行过滤,将 del_namedel_id 改成 valuekey 分别等于 name s_id

def delte_student( ):

y=file_manager.read_json(name+’.json’,{})

students=y.get(‘all_student’,[])

key=value=‘’

if not students:

print(‘该老师还没有学员,请添加学员’)

return

num = input('1.按姓名删\n2.按学号删\n其他:返回’)

if num ==’ 1’:

key=’name’

value=input(‘请输入要删除的学生名字:’)

elif num == '2 ':

key=’s_id’

value=input(‘请输入要删除的学生id’)

else:

return

students=filter(lambda s:s.get(key,’’)==valuestudents)

接着根据上面拿到数据,得到 students

如果经过过滤没有找到 students,在如果找到后,就进行打印(s拆除即可)

def delte_student( ):

y=file_manager.read_json(name+’.json’,{})

students=y.get(‘all_student’,[])

key=value=‘’

if not students:

print(‘该老师还没有学员,请添加学员’)

return

num = input('1.按姓名删\n2.按学号删\n其他:返回’)

if num ==’ 1’:

key=’name’

value=input(‘请输入要删除的学生名字:’)

elif num == '2 ':

key=’s_id’

value=input(‘请输入要删除的学生id’)

else:

return

students=filter(lambda s:s.get(key,’’)==valuestudents)

if not students:

print(‘没有找到对应的学生’)

return

for s in students:

print(‘学号:{s_id},姓名:{name},性别:{gender},年龄:{age},电话:{tel}’.format(**s))

运行结果:

请选择(1-3:1

请输入老师账号:jack

请输入密码:123456

欢迎 jact 老师进入到学生管理系统:

1.  添加学生

2.  查看学生

3.  修改学生信息

4.  删除学生

5.  返回

请选择(1-5:4

1.按名字删

2.按学号删

其他:返回1

请输入要删除的学生名字:jimmy

学号:stu0002,姓名:jimmy,性别:male,年龄:13,电话:113

学号:stu0003,姓名:jimmy,性别:male,年龄:14,电话:117

jimmy 就被信息打印出)

打印出来后,接着输入序号。注意带序号的打印,x=ix 就是下标的占位,i才是真正的下标:

def delte_student( ):

y=file_manager.read_json(name+’.json’,{})

students=y.get(‘all_student’,[])

key=value=‘’

if not students:

print(‘该老师还没有学员,请添加学员’)

return

num = input('1.按姓名删\n2.按学号删\n其他:返回’)

if num ==’ 1’:

key=’name’

value=input(‘请输入要删除的学生名字:’)

elif num == '2 ':

key=’s_id’

value=input(‘请输入要删除的学生id’)

else:

return

students=filter(lambda s:s.get(key,’’)==valuestudents)

if not students:

print(‘没有找到对应的学生’)

return

for i s in enumerate(students):

print(‘{x}学号:{s_id},姓名:{name},性别:{gender},年龄:{age},电话{tel}’.format(x=i,**s))

运行结果:

请选择(1-3:1

请输入老师账号:jack

请输入密码:123456

欢迎jact老师进入到学生管理系统:

1.  添加学生

2.  查看学生

3.  修改学生信息

4.  删除学生

5.  返回

请选择(1-5:4

1.按名字删

2.按学号删

其他:返回1

请输入要删除的学生名字:jimmy

0学号:stu0002,姓名:jimmy,性别:male,年龄:13,电话:113

1学号:stu0003,姓名:jimmy,性别:male,年龄:14,电话:117

(学号前面出现序号)

因写得不够好,进行改进:

def delte_student( ):

y=file_manager.read_json(name+’.json’,{})

students=y.get(‘all_student’,[])

key=value=‘’

if not students:

print(‘该老师还没有学员,请添加学员’)

return

num = input('1.按姓名删\n2.按学号删\n其他:返回\n请选择:’)

if num ==’ 1’:

key=’name’

value=input(‘请输入要删除的学生名字:’)

elif num == '2 ':

key=’s_id’

value=input(‘请输入要删除的学生id’)

else:

return

students=filter(lambda s:s.get(key,’’)==valuestudents)

if not students:

print(‘没有找到对应的学生’)

return

for i s in enumerate(students):

print(‘{x}学号:{s_id},姓名:{name},性别:{gender},年龄:{age},电话:{tel}’.format(x=i,**s))

运行结果:

请选择(1-3:1

请输入老师账号:jack

请输入密码:123456

欢迎jact老师进入到学生管理系统:

1.  添加学生

2.  查看学生

3.  修改学生信息

4.  删除学生

5.  返回

请选择(1-5:4

1.按名字删

2.按学号删

其他:返回

请选择:1

请输入要删除的学生名字:jimmy

0学号:stu0002,姓名:jimmy,性别:male,年龄:13,电话:113

1学号:stu0003,姓名:jimmy,性别:male,年龄:14,电话:117

接着删除序号,上面的代码是将它打印出,需加入n=input(‘请输入需要删除的学生的标号(0~1),q-返回:’)

def delte_student( ):

y=file_manager.read_json(name+’.json’,{})

students=y.get(‘all_student’,[])

key=value=‘’

if not students:

print(‘该老师还没有学员,请添加学员’)

return

num = input('1.按姓名删\n2.按学号删\n其他:返回\n请选择:’)

if num ==’ 1’:

key=’name’

value=input(‘请输入要删除的学生名字:’)

elif num == '2 ':

key=’s_id’

value=input(‘请输入要删除的学生id’)

else:

return

students=filter(lambda s:s.get(key,’’)==valuestudents)

if not students:

print(‘没有找到对应的学生’)

return

for i s in enumerate(students):

print(‘{x}学号:{s_id},姓名:{name},性别:{gender},年龄:{age},电话:{tel}’.format(x=i,**s))

n=input

(‘请输入需要删除的学生的标号(0~{}),q-返回:’.format(len(students)-1))

(注意波浪线后不许写死,format 里应是 students 的长度-1

运行结果:

请选择(1-3:1

请输入老师账号:jack

请输入密码:123456

欢迎 jact 老师进入到学生管理系统:

1.  添加学生

2.  查看学生

3.  修改学生信息

4.  删除学生

5.  返回

6.   

请选择(1-5:4

1.按名字删

2.按学号删

其他:返回

请选择:1

请输入要删除的学生名字:jimmy

File "C: \Users\chris \Desktop\Python 基础 Day17-学生管理系统\01-代码\student manager.py”,line 142,in show_m
File "C: \Users\chris \Desktop\Python
基础 Day17-学生管理系统\01-代码\student manager.py”,line 127,in
delte_

n = input('请输 入需要删除的学生的标号(0~{}),q-返回:’

.format(len(students) -1))
TypeError:

object of type’ filter’ has no len()

1学号:stu_0003, 姓名:jimmy,性别:male,年龄:14,电话:117
Process finished with exit code 1

filter 是一个可迭代对象,不能用 len 属性,需要把其变成一个列表。

len 可用于字符串,元组,列表,字典,集合,可迭代对象不能用 len。将 lenstudents) 改成i

打印结果:

0

1

2

3

4

5

6

7

8

9

如果在外面打印i

In[7]:print(i)

9

test.ty:

打印i:

#Python 里,只有函数能够分隔作用域

这里i是一个全局变量

for i in range(10):

print( '循环内部i = {}'.format(i))

运行结果:

C:\Users\chris \AppData\Local\Programs \Python\Python37\python.exe C:/Users/chris/Desktop/Python 基础/Day17- 学生

循环内部 i = 0

循环内部 i = 1

循环内部 i = 2

循环内部 i = 3

循环内部 i = 4

循环内部 i = 5

循环内部 i = 6

循环内部 i = 7

循环内部 i = 8

循环内部 i = 9

运行结果:

C:\ Users \chris\AppData\Local\Program\Python\Python37\python.exe C:/Users/chris/Desktop/Python 基础/Day17-学生 Traceback (most recent call last):
File "C:/Users/chris/Desktop/Python/Day17-学生管理系统/01-代码/test.py", line 5, in <module>
print(‘循环外部i={}’ . format(i))
NameError: name’I’ is ndt defined
Process finished with exit code 1

就会出现报错,因为 for 循环没有走过 i 的值有可能就没法用,走过 for 循环才会定义这个 i 。如果 range(1),就可以运行 :

运行结果:

C:\Users\chris \AppData\Local\Programs \Python\Python37\python.exe C:/Users/chris/Desktop/Python 基础/Day17- 学生

循环内部i = 0

循环外部i = 0

process finished with exit code 0

如果 range 里的值不对,将会报错,说明变量定义失败。

def delte_student( ):

y=file_manager.read_json(name+’.json’,{})

students=y.get(‘all_student’,[])

key=value=‘’

if not students:

print(‘该老师还没有学员,请添加学员’)

return

num = input('1.按姓名删\n2.按学号删\n其他:返回\n请选择:’)

if num ==’ 1’:

key=’name’

value=input(‘请输入要删除的学生名字:’)

elif num == '2 ':

key=’s_id’

value=input(‘请输入要删除的学生id’)

else:

return

students=filter(lambda s:s.get(key,’’)==valuestudents)

if not students:

print(‘没有找到对应的学生’)

return

for i s in enumerate(students):

print(‘{x}学号:{s_id},姓名:{name},性别:{gender},年龄:{age},电话:{tel}’.format(x=i,**s))

n=input

(‘请输入需要删除的学生的标号(0~{}),q-返回:’.format(i))#使用变量i有潜在风险(i可能没有定义)

i 在运行时,会有多个下标,比如:0,1,2,3,……。可以通过第几个i,来得到第几个的长度。

运行结果:

请选择(1-3:1

请输入老师账号:jack

请输入密码:123456

欢迎 jact 老师进入到学生管理系统:

1.  添加学生

2.  查看学生

3.  修改学生信息

4.  删除学生

5.  返回

请选择(1-5:4

1.按名字删

2.按学号删

其他:返回

请选择:1

请输入要删除的学生名字:jimmy

0学号:stu0002,姓名:jimmy,性别:male,年龄:13,电话:113

1学号:stu0003,姓名:jimmy,性别:male,年龄:14,电话:117

请输入需要删除的学生的标号(0~1),q-返回:

(输入0~1就删,输入其他就返回)

如果合法就删掉,删掉就将 all_students 移掉,将 student 改成 all_students

分两个:一个是所有的学生,另一个是符合条件的学生。找到符合条件的学生。要从所有的学生删。根据名字或id找到符合条件的学生,然后在便利这些符合条件的学生。删的时候,不能从符合条件的学生里删,要从所有的数据里面删。

在这里删掉。不是从符合条件里删掉。

#将学生从 all_students 里删除

def delte_student( ):

y=file_manager.read_json(name+’.json’,{})

all_students=y.get(‘all_student’,[])

key=value=‘’

if not students:

print(‘该老师还没有学员,请添加学员’)

return

num = input('1.按姓名删\n2.按学号删\n其他:返回\n请选择:’)

if num ==’ 1’:

key=’name’

value=input(‘请输入要删除的学生名字:’)

elif num == '2 ':

key=’s_id’

value=input(‘请输入要删除的学生id’)

else:

return

students=filter(lambda s:s.get(key,’’)==valueall_students)

if not students:

print(‘没有找到对应的学生’)

return

for i s in enumerate(students):

print(‘{x}学号:{s_id},姓名:{name},性别:{gender},年龄:{age},电话:{tel}’.format(x=i,**s))

n=input(‘请输入需要删除的学生的标号(0~{}),q-返回:’.format(i))

if not n.isdigit() or 0 <=int<=i:(如果它不是个数字,或0 <=int<=i不满足,)

print(‘输入的内容不合法’)

return

0学号:stu0002,姓名:jimmy,性别:male,年龄:13,电话:113

1学号:stu0003,姓名:jimmy,性别:male,年龄:14,电话:117

请输入需要删除的学生的标号(0~1),q-返回:

注意不是从运行结果里面的删,是从大的列表里面的某一个地方里面删。

比如,将第一个删除,就是将003的删掉:

请输入需要删除的学生的标号(0~1),q-返回:1

既删掉

all_students.pop(n)不能这样删除,因为在 jimmy 里,要删除的序列号是1,但在整体里,可能序列号是2

所以要将数据找到,在 students 下标里找到。知道在 students 里是第 n 个。

比如:找出在过滤得到的 id 里找到,然后将对象取出,通过 remove 将它删掉。students 不是一个列表,students是一个 filter 对象,不能像列表一样直接获取。如果想用将它转成一个列表。先将元素从过滤后的下标里面取出,然后再从整个大的列表里面删掉。

删完后,需要从 y(y是刚读的文件)all_students 里面改,改成最新的 all_students。现从列表里将一学生删除,就将列表更新。

运行结果:

File "C: \Users\chris \Desktop\Python 基础 Day17-学生管理系统\01-代码\student manager.py”,line 135,in show_m
File "C: \Users\chris \Desktop\Python
基础 Day17-学生管理系统\01-代码\student manager.py”,line 135,in
delte_

all_students.remove(list(student[int(n)])

IndexError:list index out of range

Process finished with exit code 1

遇到报错,说明有地方出现失误。直接 Debuggerintn)的结果是1,在 Debugger 里可以看到,

students={filter}<filter object at 0x000002A89D856C08>

+,输入 list(students)={list:0}[],数据不见。

在再 for i, s in enumerate(students):前打断点,students 等于 filter 过滤完的,转成列表里没有数据。

for i s in enumerate(students):

print(‘{x}学号:{s_id},姓名:{name},性别:{gender},年龄:{age},电话:{tel}’.format(x=i,**s))

n=input(‘请输入需要删除的学生的标号(0~{}),q-返回:’.format(i))

if not n.isdigit() or 0 <=int<=i:(如果它不是个数字,或0 <=int<=i不满足,)

print(‘输入的内容不合法’)

return

all_students.remove(list(student[int(n)])

y[‘all_student’]=all_studentsy是读取整个文件加载出来的字典)

file_manager.write_json(name+’.json’,y)

if not students:前打断点,运行结果,students有数据为:

Students={list:2}[{‘s_id”:’stu_002’,’name’:’jimmy’,’age’:’14’,’gender’:’male’,

刚开始把它当做 filter 对象用,直接将它转成一个列表。迭代数据不会少:

def delte_student( ):

y=file_manager.read_json(name+’.json’,{})

all_students=y.get(‘all_student’,[])

key=value=‘’

if not students:

print(‘该老师还没有学员,请添加学员’)

return

num = input('1.按姓名删\n2.按学号删\n其他:返回\n请选择:’)

if num ==’ 1’:

key=’name’

value=input(‘请输入要删除的学生名字:’)

elif num == '2 ':

key=’s_id’

value=input(‘请输入要删除的学生id’)

else:

请输入要删除的学生名字:jimmy

0学号:stu0002,姓名:jimmy,性别:male,年龄:13,电话:113

1学号:stu0003,姓名:jimmy,性别:male,年龄:14,电话:117

请输入需要删除的学生的标号(0~1),q-返回:1

现在只有一个 jimmy,将学号:stu0003,姓名:jimmy,性别:male,年龄:14,电话:117删掉。

便利完后是一个可迭代对象,没有将它变成一个 listiter 是个迭代系,在 for i s in enumerate(students)里拿一个,不会少一个,就叫 next 方法,用完方法后,list 已经空了,说明已走完。可以理解为,迭代一个就少一个。现已将数据删除和改掉了。

加数据时是根据长度做的,就是拿到 num,其实 num 的值已变。应是拿到所有学生的 id,最大的数加1。以后在数据库里可以指定组件,组件是自增的。如果删掉一个数据也不会影响。


二、数据库的格式

将数据库想象成一个表格,数据库里面可以组件自增,组件可以一直让它自增。

如果指定它为组件,1,下面就会有2,3,4,5,6,如果将5删掉,下面的还是会按着原来的数出现,5的地方就空出。

不删出,默认都能看到。

s_ id": "stu_ 0006"
"name": "jerry" ,
"age": "23",
"gender": "male" ,

“tel”:”999”

“isshow”:false

在显示每一个学生时,在判断时,名字等等于id,将

students=list(filter(lambda s:s.get(key,’’)==value

all_students)改成students=list(filter(lambda

s:s.get(key,’’)==value and s.get(‘isshow’,False)==True

all_students)

,不删加个字段。等到删时,就将对应的 json 里的改成 isshow。所以可以直接不删。在用户操作里,好多时候删用户并不是真的删掉。

所以不用管重名。将 student 的信息当做常量,每次进入加1

也可将 n 当做常量。在添加时,用全局变量。加入 global count count+=1。(是有重复的问题,等讲到数据库在解答)

相关文章
|
网络协议 应用服务中间件 Linux
在Redhat 9部署nginx服务
Nginx是一个高性能、开源的HTTP和反向代理服务器,以其异步非阻塞模型处理高并发,并具有轻量级、高可靠性、良好扩展性和热部署特性。在Redhat 9.2上安装nginx-1.24.0涉及安装依赖、下载解压、源码编译、配置环境变量及启动服务。安装步骤包括:yum安装依赖包,下载解压Nginx,运行configure脚本预编译,make && make install编译安装,然后赋权、配置环境变量,关闭防火墙和SELinux,最后启动Nginx并进行浏览器测试。
882 93
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
AI在内容创作中的创新:开启智能创意的新时代
AI在内容创作中的创新:开启智能创意的新时代
1182 14
|
JavaScript 前端开发
JavaScript / TypeScript日期格式化(dateFormat)
这篇文章介绍了如何在TypeScript中创建和使用一个日期格式化函数`dateFormat`,支持多种日期格式的自定义,并提供了函数的实现代码和使用示例。
649 1
JavaScript / TypeScript日期格式化(dateFormat)
|
10月前
|
存储 监控 关系型数据库
MySQL自增ID耗尽解决方案:应对策略与实践技巧
在MySQL数据库中,自增ID(AUTO_INCREMENT)是一种特殊的属性,用于自动为新插入的行生成唯一的标识符。然而,当自增ID达到其最大值时,会发生什么?又该如何解决?本文将探讨MySQL自增ID耗尽的问题,并提供一些实用的解决方案。
340 1
Snipaste 截图悬浮工具【实用教程】
Snipaste 截图悬浮工具【实用教程】
586 0
|
11月前
|
机器学习/深度学习 数据可视化
混淆矩阵与 ROC 曲线:何时使用哪个进行模型评估
混淆矩阵与 ROC 曲线:何时使用哪个进行模型评估
242 11
|
Ubuntu Linux Windows
如何在WSL中的ubuntu编译Linux内核并且安装使用ebpf?
请注意,在WSL1中可能会由于内核架构限制而无法成功进行以上过程,WSL2对于Linux内核的完整支持更为合适。此外,部分步骤可能因不同的Linux发行版或内核版本而异。
520 4
|
Web App开发 人工智能 iOS开发
灵办AI助手Chrome插件全面评测:PC Web端的智能办公利器
《灵办AI助手:Mac OS下的高效办公利器》 灵办AI助手是一款专为提升工作效率而设计的浏览器插件,适用于Chrome、Edge等主流浏览器,在Mac OS系统中表现尤其出众。本文将深入评测其核心功能,包括网页翻译、AI对话、AI阅读及代码辅助等,展示如何在实际工作中运用这些功能来提升效率。此外,文中还提供了详细的安装与设置指南,帮助读者轻松上手这款办公神器。无论你是学生、职场人还是开发者,灵办AI助手都能成为你提高生产力的理想选择。
392 0
|
Shell Linux
Linux环境变量之shell中export定义全局变量和echo 变量的区别
Linux环境变量之shell中export定义全局变量和echo 变量的区别
|
Java 监控 安全
Java一分钟之-JMX:Java管理扩展
【6月更文挑战第3天】Java Management Extensions (JMX) 允许创建、注册和管理MBeans以监控和控制Java应用。本文关注JMX的基本概念、常见问题和易错点。关键点包括:正确实现MBean和使用`StandardMBean`,确保MBean注册时名称唯一,引用平台MBean Server,配置安全管理,以及处理MBean操作异常。理解这些概念和最佳实践对于有效利用JMX至关重要。记得在实际应用中测试管理接口并加强生产环境的安全性。
362 8