python 函数对象实现菜单功能
python 函数对象实现菜单功能
实现根据现有菜单功能提示,选择菜单实现功能。当然用shell的case+while也可以简单实现这样点单功能需求
python脚本
脚本一
实现初步菜单功能,判断编号是否存在
#vi r9.py #!/bin/python3 # -*- coding: utf-8 -*- def login(): print('登录功能') def transfer(): print('转账功能') def check_banlance(): print('查询余额') while True: print(""" 0 退出 1 登录 2 转账 3 查询余额 """) choice=input('请输入命令编号:').strip() if not choice.isdigit(): print('请输入编号!') continue if choice == '0': break if choice == '1': login() if choice == '2': transfer() if choice == '3': check_banlance() # python3 r9.py 0 退出 1 登录 2 转账 3 查询余额 请输入命令编号1 登录功能 0 退出 1 登录 2 转账 3 查询余额 请输入命令编号2 转账功能 0 退出 1 登录 2 转账 3 查询余额 请输入命令编号3 查询余额 0 退出 1 登录 2 转账 3 查询余额 请输入命令编号:asc 请输入编号! 0 退出 1 登录 2 转账 3 查询余额 请输入命令编号0
脚本二
添加菜单需求,需在添加菜单循环和打印,需要修改函数定义代码,打印代码和循环判断代码
# vim r9.py #!/bin/python3 # -*- coding: utf-8 -*- def login(): print('登录功能') def transfer(): print('转账功能') def check_banlance(): print('查询余额') def withdraw(): print('提现') while True: print(""" 0 退出 1 登录 2 转账 3 查询余额 4 提现 """) choice=input('请输入命令编号:').strip() if not choice.isdigit(): print('请输入编号!') continue if choice == '0': break if choice == '1': login() elif choice == '2': transfer() elif choice == '3': check_banlance() elif choice == '4': withdraw() else: print('输入指令不存在!') # python3 r9.py 0 退出 1 登录 2 转账 3 查询余额 4 提现 请输入命令编号:4 提现 0 退出 1 登录 2 转账 3 查询余额 4 提现 请输入命令编号:3 查询余额 0 退出 1 登录 2 转账 3 查询余额 4 提现 请输入命令编号:0
脚本三
此处优化为,添加新菜单功能时,将不需要在添加判断循环,减少重复代码,只需添加定义函数代码和打印即可
# cat r9_1.py #!/bin/python3 # -*- coding: utf-8 -*- def login(): print('登录功能') def transfer(): print('转账功能') def check_banlance(): print('查询余额') def withdraw(): print('提现') def register(): print('注册') func_dic={ '1':login, '2':transfer, '3':check_banlance, '4':withdraw, '5':register, 'name':'wei', 'age':22 } #func_dic['1']() 调用 #'5' in func_fic 判断序号是否存在 while True: print(""" 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 """) choice=input('请输入命令编号:').strip() if not choice.isdigit(): print('请输入编号!') continue if choice == '0': break if choice in func_dic: func_dic[choice]() else: print('输入的指令不存在!') # python3 r9_1.py 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:5 注册 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:4 提现 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:2 转账功能 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:0
脚本四
再次升级优化只需要添加函数定义和函数列表,循环体和打印内容无需调整即可
# cat r9_2.py #!/bin/python3 # -*- coding: utf-8 -*- def login(): print('登录功能') def transfer(): print('转账功能') def check_banlance(): print('查询余额') def withdraw(): print('提现') def register(): print('注册') func_dic={ '0':['退出',None], '1':['登录',login], '2':['转账',transfer], '3':['查询余额',check_banlance], '4':['提现',withdraw], '5':['注册',register] } while True: for i in func_dic: print(i,func_dic[i][0]) choice=input('请输入命令编号:').strip() if not choice.isdigit(): print('请输入编号!') continue if choice == '0': break if choice in func_dic: func_dic[choice][1]() else: print('输入的指令不存在!') # python3 r9_2.py 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:2 转账功能 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:3 查询余额 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:1 登录功能 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:4 提现 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:asd 请输入编号! 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:5 注册 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:0
脚本五
针对列表只有只读权限,修改为元组类型,最为严谨
#!/bin/python3 # -*- coding: utf-8 -*- def login(): print('登录功能') def transfer(): print('转账功能') def check_banlance(): print('查询余额') def withdraw(): print('提现') def register(): print('注册') func_dic={ '0':('退出',None), '1':('登录',login), '2':('转账',transfer), '3':('查询余额',check_banlance), '4':('提现',withdraw), '5':('注册',register), } while True: for i in func_dic: print(i,func_dic[i][0]) choice=input('请输入命令编号:').strip() if not choice.isdigit(): print('请输入编号!') continue if choice == '0': break if choice in func_dic: func_dic[choice][1]() else: print('输入的指令不存在!') # python3 r9_2.py 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:1 登录功能 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:3 查询余额 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:5 注册 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:asd 请输入编号! 0 退出 1 登录 2 转账 3 查询余额 4 提现 5 注册 请输入命令编号:0