本帖最后由 yezhuxing 于 2024-11-16 13:14 编辑
开发程序对stock_data.txt进⾏行行以下操作:
程序启动后,给⽤用户提供查询接⼝口,允许⽤用户重复查股票⾏行行情信息(⽤用到循环)
允许⽤用户通过模糊查询股票名,⽐比如输⼊入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来
允许按股票价格、涨跌幅、换⼿手率这⼏几列列来筛选信息,⽐比如输⼊入“价格>50”则把价格⼤大于50的股票
都打印,输⼊入“市盈率<50“,则把市盈率⼩小于50的股票都打印,不不⽤用判断等于。
思路路提示:加载⽂文件内容到内存,转成dict or list结构,然后对dict or list 进⾏行行查询等操作。 这样以后
就不不⽤用每查⼀一次就要打开⼀一次⽂文件了了,效率会⾼
分为三个部分:
第一个部分是数据转化部分,首先要把数据转化为好处理得列表
这里要用到strip()和split(),去掉换行符并且以逗号分割列表里每个元素
第二个部分是最复杂的数据筛选部分,观察需要筛选的数据的特点:
比如4,5,6,8,10,元素末尾都有符号,比较数字时得去掉;
比如7,11元素末尾是单位不一样,为方便比较,在比较时约定单位为亿,故遇到"万"时,限定值应*10000
比如2,3,没啥特殊的,可以直接比较
第三部分是模糊查询部分
对于每一行数据,如果该行第二列含有这个词,则输出该行
数据集在附件中,修改文件名以及文件类型即可运行
************************************************************
#装转化后的数据
list_data=[]
#选出是以相同字符结尾的列。
q_list=[4,5,6,8,10]
#选出以不同字符结尾的列
d_list=[7,11]
#将数据转化成一个列表
f=open('stock_data.csv','r',encoding='utf-8')
#股票参数名列表
list_name=f.readline().strip('\n').split(',')
for line in f:
line = line.strip('\n')
list_data.append(line.split(','))
"""
print(list_name)
print(list_data)
"""
while True:
s= input("股票查询接口>>").strip()
print(list_name)
if '>' in s:
#分割命令
index= s.index('>')
name=s[0:index]
data=s[index+1:]
l_index=list_name.index(name)
#处理以相同字符结尾的情况
if l_index in q_list:
for l in list_data:
try:
if float(l[l_index][0:-1]) > float(data):
print(l)
except ValueError as e:
continue
#处理以不同字符结尾的情况
elif l_index in d_list:
for l in list_data:
if '亿' in l[l_index]:
if float(l[l_index][0:-1]) > float(data):
print(l)
if '万' in l[l_index]:
if float(l[l_index][0:-1]) > float(data)*10000:
print(l)
else:
for l in list_data:
try:
if float(l[l_index]) > float(data):
print(l)
except ValueError as e:
continue
#处理小于情况
elif '<' in s:
index = s.index('<')
name = s[0:index]
data = s[index + 1:]
# 获取所查的列数
l_index = list_name.index(name)
# 处理以相同字符结尾的情况
if l_index in q_list:
for l in list_data:
try:
if float(l[l_index][0:-1]) < float(data):
print(l)
except ValueError as e:
continue
# 处理以不同字符结尾的情况
elif l_index in d_list:
for l in list_data:
if '亿' in l[l_index]:
if float(l[l_index][0:-1]) < float(data):
print(l)
if '万' in l[l_index]:
if float(l[l_index][0:-1]) < float(data)*10000:
print(l)
else:
for l in list_data:
try:
if float(l[l_index]) < float(data):
print(l)
except ValueError as e:
print(l)
# 模糊查询
else:
for l in list_data:
if s in l[1]:
print(l)
|