# coding: utf-8 """ 作业题目:股票信息查询程序 作业需求: 1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环) 2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来 3 允许按股票价格、涨跌幅、换手率这几列来筛选信息, 比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。 stock_data.txt 此文件请从课件中下载。 思路提示: 加载文件内容到内存,转成dict or list结构,然后对dict or list 进行查询等操作。 这样以后就不用每查一次就要打开一次文件了,效率会高。 重要收获: 作业中提到了一个思路,可以把文件内容全部读取出来并存储,再去对数据进行频繁读取和写入(有效避免了频繁读取),全部读写操作完成后,再统一写入到文件。 之前写的练习(用户登录),也可以按照该思路,重写一遍。 """ # 读取文件中存储的股票信息 with open("stock_data.txt", mode="r", encoding="utf-8") as f: # 存放读取到的股票信息(注意:字典的查询效率最高,建议优先使用,本次暂不用) stock_data_list = f.readlines() # 是否退出程序 is_not_exit = True # 取出标题行,并把标题行从列表中移除 title_list = stock_data_list.pop(0).split() # 列出标题,供用户选择 print(title_list) # 通过while循环执行逻辑 while is_not_exit: # 接收用户输入 user_input = input("股票查询接口>>") # 找到的记录条数 record_num = 0 # 循环取出每1行股票记录 for line in stock_data_list: # 把每行取出来的字符串,转为列表 line = line.split() # 通过股票名称模糊查询,比如输入“啤酒” if user_input in line[2]: print(line) record_num += 1 # 用户输入为>时,允许按 价格-3、涨跌幅-4、换手率-13 进行筛选 ,比如输入“价格>50”则把价格大于50的股票都打印 elif ">" in user_input: # 把用户输入的表达式,转为列表,如["价格","50"] user_input_list = user_input.split(">") # 用户输入的标题 user_input_title = user_input_list[0] # 用户输入的判断值 user_input_value = user_input_list[1] # 获得要检索的列索引 user_input_index = title_list.index(user_input_title) # 当前取出的所在行、对应标题列的值 line_value = line[user_input_index] # 把输入值中%去除 if "%" in user_input_value: user_input_value = user_input_value.replace("%", "") # 当前取出的所在行的值中%去除 if "%" in line_value: line_value = line_value.replace("%", "") # 判断筛选,并且打印记录,更新记录数 if float(line_value) > float(user_input_value): print(line) record_num += 1 # 用户输入为<时,允许按 价格-3、涨跌幅-4、换手率-13 ,比如输入“价格<50”则把价格小于50的股票都打印 elif "<" in user_input: # 把用户输入的表达式,转为列表,如["价格","50"] user_input_list = user_input.split("<") # 用户输入的标题 user_input_title = user_input_list[0] # 用户输入的判断值 user_input_value = user_input_list[1] # 获得要检索的列索引 user_input_index = title_list.index(user_input_title) # 当前取出的所在行的值 line_value = line[user_input_index] # 把输入值中%去除 if "%" in user_input_value: user_input_value = user_input_value.replace("%","") # 当前取出的所在行的值中%去除 if "%" in line_value: line_value = line_value.replace("%", "") # 判断筛选,并且打印记录,更新记录数 if float(line_value) < float(user_input_value): print(line) record_num += 1 # 退出,输入q elif user_input == "q": print("谢谢使用!") is_not_exit = False break # 打印找到记录条数 print("找到{0}条".format(record_num))