python day5

1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)
2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来
3 允许按股票价格、涨跌幅、换手率这几列来筛选信息,
     比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。

思路提示:加载文件内容到内存,转成dict or list结构,然后对dict or list 进行查询等操作。 这样以后就不用每查一次就要打开一次文件了,效率会高。

#!/user/bin/env python
# -*- coding:utf-8 -*-

data_list = {} # 定义一个空字典存文件中的内容
f = open(file='stock_data.txt', encoding='UTF-8', mode='r')
data_title = f.readline().strip().split(',') # 将第一行设置为每次打印的标题行
for item in f:
item = item.strip().split(',') # 将每行数据处理成一个列表,以逗号分割
data_list[item[2]] = item # 将名称列作为字典的键,将每行数据作为值
f.close()
select_list = ['最新价', '涨跌幅', '换手率'] # 定义可查询范围
while True:
match_count = 0 # 定义一个计数字段记录匹配数
flag = True # 定义一个标识字段,控制匹配数的输出
input_content = input('股票查询接口:').strip()
if len(input_content) == 0: # 判断用户输入内容,若为空,跳出该次循环(解决空字符永远在任一字符串中的问题)
continue
print(data_title)
for i in data_list: # 进行模糊匹配查询
if input_content in i:
print(data_list[i])
match_count += 1
if '>' in input_content and '=' not in input_content: # 进行大于查询
input_name, input_value = input_content.strip().split('>')
input_name = input_name.strip()
input_value = float(input_value.strip())
if input_name in select_list:
input_index = data_title.index(input_name)
for v in data_list.values():
if float(v[input_index].strip('%')) > input_value:
print(v)
match_count += 1
else:
flag = False
elif '<' in input_content and '=' not in input_content: # 进行小于查询
input_name, input_value = input_content.strip().split('<')
input_name = input_name.strip()
input_value = float(input_value.strip())
if input_name in select_list:
input_index = data_title.index(input_name)
for v in data_list.values():
if float(v[input_index].strip('%')) < input_value:
print(v)
match_count += 1
else:
flag = False
elif '=' in input_content:
flag = False
if flag:
if match_count > 0:
print('找到%s条' % (match_count,))
else:
print('未找到符合查询条件的结果!')
else:
print('不在可查询范围内!')
posted @ 2019-11-19 21:02  nick_xm  阅读(205)  评论(0编辑  收藏  举报