要求:
链接:https://pan.baidu.com/s/1VVLVrwLfHMuDCE8xLhHV8w 提取码:byhy
解压后得到的是一个股票代码文件,记录了中国所有的股票名称和代码。
请写一个股票信息查询程序,从文件加载数据, 可以让使用者 循环多次 查询股票信息。
每次查询时,提示 请输入要查询的股票名称或代码:
当用户输入股票代码(6位全是数字)时,打印出对应的 股票名称和代码
当用户输入股票名称(不全是数字)时,打印出对应的 股票名称和代码
学习总结:
1.# 把字典的key与val互换
new_listDic = {v : k for k, v in listDic.items()}
'''
每次查询时,提示 请输入要查询的股票名称或代码:
当用户输入股票代码(6位全是数字)时,打印出对应的 股票名称和代码
当用户输入股票名称(不全是数字)时,打印出对应的 股票名称和代码
'''
with open('stock.txt',encoding='utf8') as f:
infoList = f.read().splitlines()
listDic = {}
def getname(num):
for info in infoList:
# # 去除左右空格
# info = info.strip()
# 去除空行
if not info:
continue
# 切割
infoSp = info.split('|')
infoK = infoSp[0].strip()
infoV = infoSp[-1].strip()
# print(infoV)
# 将列表的值 加到 字典中
if infoK not in listDic:
listDic[infoK] = infoV
# print(listDic)
if num in listDic:
# print('不在')
print(f'{num}:{listDic[num]}')
elif num in listDic.values():
# 把字典的key与val互换
new_listDic = {v : k for k, v in listDic.items()}
print(f'{new_listDic[num]}:{num}')
else:
print('不在')
# print(f'{listDic[num]}:{infoV}')
while True:
num = input('请输入要查询的股票名称或代码:')
getname(num)
优化代码:提高效率
上面的代码的问题:查询字典中的数据,不应该去遍历它,遍历查询效率很低。
infoList = f.read().splitlines()
listDicName = {}
listDicCode = {}
def getname(num):
for info in infoList:
# # 去除左右空格
# info = info.strip()
# 去除空行
if not info:
continue
# 切割
infoSp = info.split('|')
'''
优化代码:提高效率
'''
infoKeys = infoSp[0].strip()
infoValues = infoSp[-1].strip()
listDicName[infoKeys] = f'{infoKeys}:{infoValues}'
listDicCode[infoValues] = f'{infoKeys}:{infoValues}'
if num.isdigit():
# 一定要写全6位股票代码
if len(num) < 6:
print('请写全6位股票代码')
# continue
elif num in listDicCode:
print(listDicCode[num])
else:
print('找不到该股票代码')
# 如果不全是数字,作为股票名称处理
else:
if num in listDicName:
print(listDicName[num])
else:
print('找不到该股票名称')
while True:
num = input('请输入要查询的股票名称或代码:')
num = num.strip()
getname(num)