1.需求:

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

2.股票数据stock_data.txt(部分):

股票代码,股票名称,当前价,涨跌额,涨跌幅,年初至今,成交量,成交额,换手率,市盈率(TTM),股息率,市值
SH601778,N晶科,6.29,+1.92,+43.94%,+43.94%,259.66万,1625.52万,0.44%,亏损,-,173.95亿
SH688566,吉贝尔,52.66,+6.96,+15.23%,+122.29%,1626.58万,8.09亿,42.29%,89.34,-,98.44亿
SH688268,华特气体,88.80,+11.72,+15.20%,+102.51%,622.60万,5.13亿,22.87%,150.47,-,106.56亿
SH600734,实达集团,2.60,+0.24,+10.17%,-61.71%,1340.27万,3391.14万,2.58%,亏损,0.00%,16.18亿
SH900957,凌云B股,0.36,+0.033,+10.09%,-35.25%,119.15万,42.10万,0.65%,44.65,0.00%,1.26亿

2020-09-15

结尾更新了课上老师讲的优化代码


3.用到一个正则化查找字符串中的数字

既然是提取数字,那么数字的形式一般是:整数,小数,整数加小数;
所以一般是形如:———.————;
根据上述正则表达式的含义,可写出如下的表达式:”\d+.?\d*”;
·\d+ 匹配1次或者多次数字,注意这里不要写成*,因为即便是小数,小数点之前也得有一个数字;
·\.? 这个是匹配小数点的,可能有,也可能没有;
·\d* 这个是匹配小数点之后的数字的,所以是0个或者多个。
re.findall(r"\d+.?\d*")最后得到的是一个list。

4.代码部分(还待修改)

# 第一次尝试
import redef LoopSerchName(dict, cls, index):count = 0for k, v in dict.items():  # 循环股票字典if cls in v[index + 1]:print(stoct_dict[k])count += 1print(f"找到{count}条")def LoopSerchUpper(dict, index, thread):count = 0for k, v in dict.items():  # 循环股票字典if len(re.findall(r"\d+\.?\d*", v[index])) == 0:  # 如果发现没有数字指标,就认为是负值value = float(-99)else:value = float(re.findall(r"\d+\.?\d*", v[index])[0])  # 知识点1if value > thread:print(stoct_dict[k])count += 1print(f"找到{count}条")def LoopSerchLower(dict, index, thread):count = 0for k, v in dict.items():  # 循环股票字典if len(re.findall(r"\d+\.?\d*", v[index])) == 0:  # 如果发现没有数字指标,就认为是负值value = float(-99)else:value = float(re.findall(r"\d+\.?\d*", v[index])[0])  # 知识点1if value < thread:print(stoct_dict[k])count += 1print(f"找到{count}条")if __name__ == '__main__':stoct_list = []stoct_dict = {}f = open("stock_data", 'r', encoding='utf-8')stoct_list = f.readline()stoct_list = stoct_list.strip().split(',')  ## print(stoct_list)num = 0for line in f:line = line.strip().split(',')stoct_dict[num] = line  # 把字典的键值设置为序号num += 1# print(stoct_dict)while True:serch_info = input("股票查询接口>>:")serch_name = serch_info.split('<')[0].split('>')[0]  # 获取输入信息最前面的名字serch_index = 0for i in range(len(stoct_list)):if serch_name  in stoct_list[i]:serch_index = i  # 获取查询的信息在哪一列breakif ">" in serch_info:thread = serch_info.split('>')[-1]  # 两次过滤获取阈值,此时是str格式thread = float(re.findall(r"\d+\.?\d*", thread)[0])  # 正则化查找数字部分,转为float数字格式LoopSerchUpper(stoct_dict, serch_index, thread)print()elif "<" in serch_info:thread = serch_info.split('>')[-1]  # 两次过滤获取阈值,此时是str格式thread = float(re.findall(r"\d+\.?\d*", thread)[0])  # 正则化查找数字部分,转为float数字格式LoopSerchLower(stoct_dict, serch_index, thread)print()else:LoopSerchName(stoct_dict, serch_name, serch_index)"""
遗留问题:
1.成交额单位有万,亿,在计算thread的时候还需要具体细分.
2.市盈率和股息率中有些是“亏损”“-”,没有数值,需要具体区分是否有数字,这里我判断如果亏损的时候就是负值.
3..."""

5.推荐一首姐姐的《あの微笑みを忘れないで》,忘记发生在自己身上的挫折,微笑着迎接新的一天吧,我可以的!


优化后的代码

import re
'''
官方思路
1.把股票存到内存
2.实现模糊查询
3.处理复杂查询3.1进行语法的合法性验证验证名称合法性,验证符号合法性,验证数值合法性
'''
f = open("stock_data",encoding="UTF-8")
headers = f.readline().strip().split(',')
stock_dict = {}for line in f:line = line.strip().split(',')stock_dict[line[0]] = linewhile True:cmd = input("股票查询接口>>").strip()if not cmd:continue'''# 2.模糊查询'''print(headers)for sid,s_data in stock_dict.items():s_name = s_data[1]if cmd in s_name:print(s_data)'''# 3.复杂公式处理, a = 当前价>50#验证列名合法,符号合法性,数值合法性1.验证公式基本合法2.验证列名合法3.验证符号合法4.验证右边值合法'''valid_cols = ["当前价","涨跌幅","换手率"]syntax_parser = re.split("[<>]",cmd)if len(syntax_parser) == 2:  # 3.1公式基本合法filter_column, filter_val = syntax_parserif filter_column in valid_cols:  # 3.2try:filter_val = float(filter_val) # 3.4有可能报错filter_col_index = headers.index(filter_column)  # 4.取到列名下标for sid,s_data in stock_dict.items():rel_filter_col_val = float(s_data[filter_col_index].strip('%'))  # 取梅列的实际值if ">" in cmd:if rel_filter_col_val > filter_val: # 匹配上了print(s_data)if "<" in cmd:if rel_filter_col_val < filter_val: # 匹配上了print(s_data)except ValueError as e:print("出错了:",e)

alex股票查询小程序练习相关推荐

  1. 股票查询小程序_以龙虎榜数据为例

    功能需求 1.程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环) 2.允许用户通过模糊查询股票名,比如输入"生物",就把所有股票名称中包含"生物&qu ...

  2. 一个“股票查询小程序”作业

    我是一个刚学Python的小白,刚好在网上看到一个Python的小作业,需求如下 : 1.程序启动后,给用户提供接口,允许用户重复查询股票行情(利用循环) 2.允许用户通过模糊查新股票名.如输入&qu ...

  3. 用python做一个数据查询软件_使用Python实现NBA球员数据查询小程序功能

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于早起Python ,作者投稿君 一.前言 有时将代码转成带有界面的程序,会极大地方便 ...

  4. 王者荣耀战力查询小程序源码下载-支持安卓ios微信和QQ战力查询支持打包成APP

    王者荣耀战力查询小程序源码下载-支持安卓ios微信和QQ战力查询支持打包成APP 该源码没有后台的也无需后台的,所以也就没有什么服务器和域名的烦恼和费用了 使用方法用HBuilder X软件打开文件然 ...

  5. python进行数据查询_使用Python实现NBA球员数据查询小程序功能

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于早起Python ,作者投稿君 一.前言 有时将代码转成带有界面的程序,会极大地方便 ...

  6. 查分吧(chafenba)万用考试成绩查询小程序源码

    查分吧(chafenba)万用考试成绩查询小程序源码 小程序演示:查分吧 小程序源码:http://mabida.cn/chafenba.zip 可以快速应用于保密性不高且修改不频繁的成绩.工资.证书 ...

  7. 垃圾分类查询+小程序源码

    老规矩先上演示图片 垃圾分类查询PC端 垃圾分类查询小程序端 小程序截图.jpg 源码地址 链接:https://pan.baidu.com/s/1DrYxx5k8n7I4r5TMr7SYzg 提取码 ...

  8. 公交车查询小程序开发应具备哪些功能

    ​​ 随着社会以及互联网的不断发展,乘坐公交车是我们出行的工具之一了,在我们乘坐公交车之前一般都会查询我们出行的路线,查询我们要乘坐的公交车还有多久到达该站点,一般我们都是使用公交车查询小程序去查询这 ...

  9. 微信小程序云开发成绩查询小程序的制作过程。

    微信小程序云开发成绩查询小程序的制作过程. 如果觉得我讲的好可以点个关注. 明确自己的目的,到底要做一个怎么样的小程序. 我先上效果图: 确定后就可以开始自己布局.主要是用css 1.先看首页,首页主 ...

最新文章

  1. Revising Aggregations - The Count Function(集合函数-count)
  2. go数组详解:数组的定义、遍历、使用细节、二维数组的定义及其遍历
  3. 有问有答 | 算法和数据结构精华问答
  4. P1403 [AHOI2005]约数研究--100分(python3实现)
  5. (27)css3 2D转换综合案例—卡包效果
  6. java 数据验证_Java 数据验证
  7. php mysql_fetch_array($result)_PHP mysqli_free_result()与mysqli_fetch_array()函数
  8. c11 语言,语言学C11-1.ppt
  9. 代理模式和php实现
  10. 无标度网络的C++代码实现
  11. IPv4和IPv6、局域网和广域网、网关、公网IP和私有IP、IP地址、子网掩码、网段、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?
  12. java关于时间的换算
  13. 渗透工具-TrustedSec 公司的渗透测试框架 (PTF)
  14. Azido-PEG8-TFP ester,1818294-49-3
  15. 群发“站内信”的实现
  16. 获取所有打印机,设置默认打印机,获取默认打印机
  17. jQuery实现平年闰年判断
  18. python人民币美元汇率双向兑换计算
  19. SSM-页面无法显示图片,样式等静态资源
  20. 《VR/AR技术与应用》笔记 002

热门文章

  1. QT多个ui界面设计
  2. EasyPlayer RTSP Android安卓播放器实现视频源快速切换
  3. ICLOUD储存空间要升级吗_有人像我一样需要恢复苹果手机icloud空间ios备份时 微信卡住不动了吗(已解决)...
  4. midi是音乐与计算机相结合的产物,2008年江苏省“专转本”计算机应用基础真题与解答.doc...
  5. 解决android代码编译时内存不足
  6. hololens入门环境配置及加速开发
  7. 手机与计算机无线连接的方法,电脑和手机手动添加无线连接的方法
  8. python ccf题解 201812-1 小明上学
  9. 图片翻译软件哪个好用?这些软件值得收藏
  10. 关于聚类算法Kmeans/K-mediods/层次聚类/OPTICS较为详细的介绍