王者荣耀英雄助手工具开发
用函数实现一个英雄属性查询系统
源数据文件在当前目录下:hero.db
要求实现的功能
根据用户输入的英雄中文名或拼音的首字母简写查询出英雄的信息
原文件数据结构为:
数据: 钟馗|zk|680|120|60
对应含义: 英雄的中文名|简写|生命值|攻击力|消耗(法力值之类)
查询处理之后进行简单的格式化输出
格式:
名称:钟馗 简称:zk
初始生命值:680
初始攻击力:120
消耗: 60
修改根据用户的输入:英雄 类型 值
对 对应的英雄进行属性的修改,并实现持久化存储
修改的时候需要验证用户是否是登录状态
这个用户名和密码你可以任意定义
heor.db 文件内容如下
钟馗|zk|1000|120|60
孙悟空|swk|900|110|10
刘邦|lb|780|135|0
李白大侠|lb|560|135|32
阿轲|ak|780|115|0
小乔|xq|780|115|0
import os, sys
"""
名称:钟馗 简称:zk
初始生命值:680
初始攻击力:120
消耗: 60
"""
# {'short_name': 'zk', 'health': '680', 'attack': '120', 'consum': '60'}
# {('钟馗', 'zk'): 'short_name': 'zk', 'health': '680', 'attack': '120', 'consum': '60'}}
info = {}
def create_info():
"""创建英雄数据字典"""
with open('/root/clone/pythoncode/day6/hero.db', 'r', encoding='utf-8') as f:
for line in f:
name, short_name, health, attack, consum = line.split('|')
info[(name, short_name)] = {
'short_name': short_name,
'health': health,
'attack': attack,
'consum': consum
}
return info
def display(data_dict):
"""
按照格式显示数据
:param data_dict: 具体英雄的数据,是字典类型
:return:
"""
if type(data_dict) is dict:
print("""
名称:{name} 简称:{short_name}
初始生命值:{health}
初始攻击力:{attack}
消耗: {consum}
""".format(**data_dict))
else:
print("需要是 dict 类型,不是{}".format(type(data_dict)))
def search(heros_info,search_name):
info_data = ''
for item in heros_info:
if search_name in item:
info_data = heros_info[item]
info_data.update({'name': item[0]})
return info_data
def edit_info(info_list):
"""
修改英雄属性
:param info_list: ['xq', 'attack', '190']
:return:
"""
map_info = {
'health': 2,
'attack': 3,
'consum': 4
}
with open('/root/clone/pythoncode/day6/hero.db') as rf, open(
'/root/clone/pythoncode/day6/hero.db.swap', 'w', encoding='utf-8'
) as wf:
for line in rf:
old_info_list = line.split('|')
if info_list[0] in old_info_list:
idx = map_info.get(info_list[1])
if not idx:
return "属性有误"
else:
print(idx)
old_info_list[idx] = info_list[-1]
line = '|'.join(old_info_list)
if not line.endswith('\n'):
line = line + '\n'
wf.write(line)
os.remove('/root/clone/pythoncode/day6/hero.db')
os.rename('/root/clone/pythoncode/day6/hero.db.swap','/root/clone/pythoncode/day6/hero.db')
# map_dic = {
# '1': search,
# '2': edit_info
# }
def pwds():
user_info={
'user':'wgy',
'pwd':'123456'
}
inp1 = input("用户名:>>:")
inp2 = input("密码:>>:")
v = user_info.values()
if inp1 in v :
if inp2 in v :
t=True
else:
t=False
else:
t=False
return t
a = pwds()
print(a)
while True:
heros_info = create_info()
inp = input("请选择:\n 1. 查询\n 2. 修改英雄属性\n:")
if inp == '1':
while True:
inp_name = input("请输入英雄名称>:")
if inp_name == 'q':
sys.exit("系统退出")
elif inp_name == 'b':
break
elif inp_name:
r = search(heros_info,inp_name)
if not r:
print('错误的英雄名称')
else:
display(r)
elif inp == '2':
while True:
inp_info = input("输入修改信息\n【生命值: health】\n【攻击力: attack】\n【消耗: consumb】\n【生命值: health】\n 格式:【英雄名称 属性 值】\n》")
info_list = inp_info.split()
if inp_info == 'b':
break
elif inp_info == 'q':
sys.exit("系统退出..")
if len(info_list) == 3:
if not info_list[-1].isdigit():
print("输入有误")
continue
edit_info(info_list)
elif inp == 'q':
break
else:
print("输入错误")
多级菜单使用
def get_cpu():
print("This is cpu info")
def get_mem():
print("This is mem info")
def get_disk():
print("This is disk info")
def get_second_1():
print("这是 2 级菜单的第 1 项")
def get_second_2():
print("这是 2 级菜单的第 2 项")
def get_third_1():
print("这是 3 级菜单的第 1 项")
def get_third_2():
print("这是 3 级菜单的第 2 项")
third = {
'1': ['3 级菜单第 1 项', get_third_1,''],
'2': ['3 级菜单第 2 项', get_third_2,'']
}
second = {
'1': ['2 级菜单第 1 项', get_second_1,''],
'2': ['2 级菜单第 2 项', get_second_2,''],
'3': ['3级菜单','',third ]
}
menu = {
'1': ["cup info",get_cpu, ''],
'2': ["meme info",get_mem,''],
'3': ["disk info",get_disk,''],
'4': ['我有二级菜单', '', second ]
}
current_menu = menu #定义一个中间变量,防止变量污染
menu_level=[]
while True:
for key,val in current_menu.items():
print(key, val[0]) #取到菜单选项
inp = input("请选择>:")
if inp in current_menu:
f = current_menu[inp][1] #取到方法函数
if f:
f() #执行方法函数
else:
#有下级菜单
menu_level.append(current_menu)
current_menu=current_menu[inp][2] #进入到4选项中的second
elif inp == 'b':
if menu_level:
current_menu=menu_level.pop()
数据分组
数据源
symbol=BCHBTC;baseCoin=BCH;quoteCoin=BTC;baseAccountNormal=201104;baseAccountLock=202104;quoteAccountNormal=201101;quoteAccountLock=202101;sysUid=1;sysBaseAccount=101015;sysQuoteAccount=101016;feeCoin=YLB;useFeeCoin=false;feeAccountNormal=201109;sysFeeAccount=101025;useFeeByAward=false;feeAccountAward=206109-symbol=QTUMUSDT;baseCoin=QTUM;quoteCoin=USDT;baseAccountNormal=201143;baseAccountLock=202143;quoteAccountNormal=201106;quoteAccountLock=202106;sysUid=1;sysBaseAccount=101360;sysQuoteAccount=101361;feeCoin=YLB;useFeeCoin=false;feeAccountNormal=201109;sysFeeAccount=101362;useFeeByAward=false;feeAccountAward=206109-symbol=BCHUSDT;baseCoin=BCH;quoteCoin=USDT;baseAccountNormal=201104;baseAccountLock=202104;quoteAccountNormal=201106;quoteAccountLock=202106;sysUid=1;sysBaseAccount=101015;sysQuoteAccount=101016;feeCoin=YLB;useFeeCoin=false;feeAccountNormal=201109;sysFeeAccount=101025;useFeeByAward=false;feeAccountAward=206109-symbol=BOTBTC;baseCoin=BOT;quoteCoin=BTC;baseAccountNormal=201145;baseAccountLock=202145;quoteAccountNormal=201101;quoteAccountLock=202101;sysUid=1;sysBaseAccount=101121;sysQuoteAccount=101122;feeCoin=YLB;useFeeCoin=false;feeAccountNormal=201109;sysFeeAccount=101123;useFeeByAward=false;feeAccountAward=206109-symbol=ETHBTC;baseCoin=ETH;quoteCoin=BTC;baseAccountNormal=201102;baseAccountLock=202102;quoteAccountNormal=201101;quoteAccountLock=202101;sysUid=1;sysBaseAccount=101011;sysQuoteAccount=101012;feeCoin=YLB;useFeeCoin=false;feeAccountNormal=201109;sysFeeAccount=101023;useFeeByAward=false;feeAccountAward=206109
解答
file="/root/clone/pythoncode/day5/zuoye.txt"
with open (file, 'r' ,encoding='utf-8') as f:
for line in f:
fenzu=line.split('-')
for yuansu in fenzu:
fendanzhu=yuansu.split(';')
name = fendanzhu[0].split('=')[1]
with open(file.replace('zuoye.txt',name)+'.yml','w') as wf:
for n in fendanzhu:
d=n.replace('=',':')
wf.write(d+'\n')
print("这真的是一天比一天牛逼阿!")
# li = s.replace('=', ': ').split('-')
# wf = False
# for line in li:
# for i in line.split(';'):
# if 'symbol' in i:
# # 若果为真,说明这是上一个内容的文件对象
# if wf:
# # 打印出文件名
# print(wf.name)
# wf.close()
# # 打印出文件对象是否已经关闭,True 表示已经关闭
# print(wf.closed)
# # 到这一步,写的文件总会是新的,而上次的文件对象会被正常关闭
# name=i.split(': ')[-1]+'.yml'
# wf=open(name,'w')
# # 无论怎样,这里都会把内容写到文件中
# wf.write(f"{i}\n")