牛刀小试

王者荣耀英雄助手工具开发

用函数实现一个英雄属性查询系统
源数据文件在当前目录下: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")     

你可能感兴趣的:(牛刀小试)