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