自学内容网 自学内容网

[Python学习日记-28] 开发基础练习1——股票查询程序

[Python学习日记-28] 开发基础练习1——股票查询程序

简介

题目及效果参考

源码与解析

简介

        该练习使用了列表、字典、字符串等之前学到的数据类型,用于巩固实践之前学习的内容,题目当中使用到的数据均摘录与东方财富网,最好在学习完前面的知识点之后花两天时间自己做一下,然后再看该篇文章中的答案。

题目及效果参考

一、题目

        以下为股票数据源,请把它存入 stock_data.txt 当中

序号  代码      名称  价格      涨跌幅 涨跌额 5分钟涨跌额  今开  昨收      最高      最低  成交量     成交额 换手率     量比    委比    振幅   市盈率    流通市值  总市值 每股收益    净利润 主营收
1    600199    金种子酒    6.48    10.02%    0.59    0.00%    5.91    5.89    6.48    5.88    25.68万    1.61亿    4.61%    6.78    100.00%    10.19%    1661.5    36.01亿    36.01亿    0.00    162.4万    7.98亿
2    000860    顺鑫农业    54.69    10.00%    4.97    0.00%    53.00    49.72    54.69    51.12    20.18万    10.78亿    3.54%    8.30    100.00%    7.18%    41.9    312.0亿    312.0亿    1.30    7.44亿    120.7亿
3    603589    口子窖    51.80    8.21%    3.93    1.02%    48.11    47.87    51.80    48.00    37304    1.88亿    0.62%    4.33    49.82%    7.69%    22.8    309.4亿    309.4亿    2.26    11.41亿    32.07亿
4    000596    古井贡酒    98.88    8.09%    7.40    0.78%    92.47    91.48    99.88    92.00    20075    1.94亿    0.52%    2.46    -66.85%    8.61%    31.0    379.3亿    497.9亿    3.19    12.56亿    67.62亿
5    603369    今世缘    27.88    8.06%    2.08    0.12%    25.80    25.80    28.08    25.80    10.59万    2.86亿    0.84%    2.90    -46.05%    8.84%    30.5    350.0亿    350.0亿    0.92    10.29亿    31.59亿
6    600559    老白干酒    18.28    7.59%    1.29    -0.29%    17.06    16.99    18.59    16.99    17.72万    3.16亿    2.87%    4.98    -61.26%    9.42%    38.1    112.2亿    126.3亿    0.48    2.44亿    24.31亿
7    000568    泸州老窖    57.10    7.19%    3.83    -0.47%    54.40    53.27    57.88    54.40    14.35万    8.11亿    0.98%    4.12    1.20%    6.53%    25.3    833.9亿    836.3亿    2.26    27.51亿    92.63亿
8    000799    酒鬼酒    21.82    6.86%    1.40    0.10%    21.10    20.42    22.05    21.10    18.65万    4.01亿    5.74%    5.88    72.10%    4.65%    32.1    70.90亿    70.90亿    0.68    1.61亿    7.60亿
9    600809    山西汾酒    58.39    6.14%    3.38    0.05%    55.50    55.01    58.54    55.15    72118    4.15亿    0.83%    4.00    35.20%    6.16%    36.1    506.3亿    506.3亿    1.62    12.64亿    69.15亿
10    603919    金徽酒    15.16    5.94%    0.85    -0.35%    14.32    14.31    15.55    14.20    55030    8229万    1.51%    4.20    -78.50%    9.43%    21.4    55.18亿    55.18亿    0.71    2.59亿    14.62亿
11    002461    珠江啤酒    5.96    5.49%    0.31    0.35%    5.69    5.65    6.00    5.69    10.57万    6202万    0.78%    4.55    -48.27%    5.49%    38.7    81.08亿    131.9亿    0.15    3.17亿    33.07亿
12    000858    五粮液    83.05    5.42%    4.27    -0.33%    78.68    78.78    83.38    78.50    28.78万    23.53亿    0.76%    3.31    -41.49%    6.19%    26.1    3152亿    3223亿    3.18    94.94亿    292.5亿
13    002304    洋河股份    117.19    4.33%    4.86    -0.06%    113.11    112.33    117.50    113.11    56404    6.54亿    0.45%    3.08    -35.91%    3.91%    21.8    1473亿    1766亿    5.37    70.39亿    209.6亿
14    603198    迎驾贡酒    17.85    4.32%    0.74    0.58%    17.12    17.11    18.06    17.08    68543    1.21亿    0.86%    3.75    12.86%    5.73%    19.4    142.8亿    142.8亿    0.92    4.98亿    24.37亿
15    002646    青青稞酒    13.00    4.25%    0.53    0.32%    12.48    12.47    13.09    12.48    40479    5203万    0.90%    3.84    40.55%    4.89%    -49.8    58.50亿    58.50亿    -0.26    8680万    9.52亿
16    200596    古井贡B    54.28    4.18%    2.18    0.15%    52.10    52.10    55.00    52.10    2166    1169万    0.06%    2.96    -16.18%    5.57%    17.0    208.2亿    273.3亿    3.19    12.56亿    67.62亿
17    600197    伊力特    19.49    4.11%    0.77    0.85%    18.67    18.72    19.72    18.50    12.59万    2.44亿    2.85%    3.55    -71.57%    6.52%    22.2    85.95亿    85.95亿    0.88    2.90亿    14.98亿
18    600702    舍得酒业    29.90    4.00%    1.15    -0.21%    28.81    28.75    30.30    28.81    13.12万    3.89亿    3.98%    4.22    -57.22%    5.18%    29.3    98.53亿    100.8亿    1.02    3.42亿    22.12亿
19    603711    香飘飘    27.15    3.78%    0.99    -0.76%    26.16    26.16    27.60    25.60    14216    3788万    3.05%    1.62    -49.38%    7.65%    37.7    12.57亿    113.9亿    0.72    8400万    16.80亿
20    600132    重庆啤酒    34.70    3.64%    1.22    0.93%    33.64    33.48    34.70    33.64    17215    5894万    0.36%    2.86    42.98%    3.17%    42.3    167.9亿    167.9亿    0.82    3.85亿    29.24亿
21    600300    维维股份    3.46    3.59%    0.12    0.00%    3.36    3.34    3.49    3.35    14.09万    4830万    0.84%    2.04    -22.22%    4.19%    63.3    57.85亿    57.85亿    0.05    9824万    37.28亿
22    600059    古越龙山    8.11    3.58%    0.28    -0.51%    7.85    7.83    8.20    7.80    46570    3742万    0.57%    2.95    10.46%    5.11%    38.6    65.57亿    65.57亿    0.21    1.15亿    12.75亿
23    600600    青岛啤酒    40.30    3.49%    1.36    0.03%    39.31    38.94    40.37    39.00    51910    2.08亿    0.73%    3.43    -77.14%    3.52%    36.4    280.2亿    544.0亿    1.10    21.00亿    236.4亿
24    000995    *ST皇台    4.57    3.39%    0.15    0.23%    4.47    4.42    4.57    4.41    26640    1196万    1.50%    2.13    -35.66%    3.62%    -5.0    8.11亿    8.11亿    -0.92    -4190万    950.4万
25    600616    金枫酒业    6.14    3.37%    0.20    0.00%    5.95    5.94    6.21    5.81    60674    3655万    1.18%    3.80    -5.79%    6.73%    87.6    31.55亿    31.55亿    0.07    2694万    5.81亿
26    000869    张裕A    30.18    3.18%    0.93    0.10%    29.28    29.25    30.25    29.26    25527    7642万    0.56%    4.26    -68.76%    3.38%    21.0    136.9亿    207.0亿    1.44    7.70亿    38.61亿
27    000752    西藏发展    7.79    3.04%    0.23    -0.40%    7.67    7.56    7.83    7.54    44459    3438万    1.67%    2.01    -16.35%    3.84%    -2888.9    20.57亿    20.57亿    -0.00    -54.36万    2.61亿
28    600779    水井坊    43.44    2.99%    1.26    -0.12%    42.30    42.18    44.15    41.89    74683    3.23亿    1.52%    5.69    3.15%    5.36%    38.2    211.8亿    211.8亿    1.14    4.63亿    21.39亿
29    000729    燕京啤酒    6.50    2.85%    0.18    0.47%    6.32    6.32    6.50    6.31    14.29万    9171万    0.55%    3.16    -27.34%    2.69%    113.7    162.6亿    182.6亿    0.06    6.11亿    102.3亿
30    603156    养元饮品    50.37    2.82%    1.38    0.39%    49.00    48.99    50.69    48.43    19029    9486万    0.41%    2.34    -39.61%    4.61%    13.1    229.9亿    379.2亿    3.84    17.41亿    57.57亿
31    600365    通葡股份    4.69    2.40%    0.11    -0.22%    4.58    4.58    4.72    4.58    64760    3022万    1.62%    2.11    -12.34%    3.06%    260.6    18.76亿    18.76亿    0.02    206.5万    6.68亿
32    600543    莫高股份    7.08    2.31%    0.16    0.14%    6.98    6.92    7.14    6.86    48127    3380万    1.47%    1.90    -38.43%    4.05%    118.0    22.74亿    22.74亿    0.06    2046万    1.39亿
33    603779    威龙股份    14.72    2.22%    0.32    0.00%    14.36    14.40    14.88    14.16    8443    1229万    0.81%    1.56    -19.41%    5.00%    50.7    15.17亿    33.76亿    0.29    3472万    5.54亿
34    600962    国投中鲁    9.91    2.16%    0.21    0.10%    9.80    9.70    9.97    9.71    27928    2761万    1.09%    1.83    -10.94%    2.68%    177.6    25.17亿    25.99亿    0.06    657.4万    5.90亿
35    600084    中葡股份    3.47    2.06%    0.07    -0.59%    3.40    3.40    3.55    3.30    14.16万    4862万    1.26%    1.44    -28.41%    7.35%    -38.8    39.11亿    39.11亿    -0.09    -8387万    2.84亿
36    601579    会稽山    9.92    1.95%    0.19    0.00%    9.77    9.73    10.03    9.70    22768    2248万    0.56%    2.53    7.02%    3.39%    26.5    39.64亿    49.29亿    0.37    1.02亿    7.80亿
37    600519    贵州茅台    791.86    1.87%    14.56    -0.22%    778.80    777.30    795.00    777.00    22723    17.92亿    0.18%    1.97    -49.84%    2.32%    31.3    9948亿    9948亿    25.34    247.3亿    522.4亿
38    000929    兰州黄河    7.82    1.56%    0.12    0.00%    7.70    7.70    7.87    7.65    9615    745.8万    0.50%    1.15    -13.31%    2.86%    -21.5    14.55亿    14.55亿    -0.36    -6755万    5.09亿
39    200869    张裕B    16.91    1.32%    0.22    0.00%    16.69    16.69    17.04    16.59    977        165.2万    0.02%    1.85    -8.02%    2.70%    11.7    76.68亿    115.9亿    1.44    7.70亿    38.61亿
40    600573    惠泉啤酒    8.34    0.97%    0.08    0.36%    8.29    8.26    8.38    8.15    15798    1303万    0.62%    1.51    16.27%    2.78%    50.5    20.95亿    20.95亿    0.17    2459万    4.96亿
41    600189    吉林森工    4.76    0.63%    0.03    -0.21%    4.76    4.73    4.79    4.71    14280    678.8万    0.30%    1.05    -1.09%    1.69%    12.6    22.09亿    34.19亿    0.38    3542万    10.46亿
42    000848    承德露露    9.17    0.44%    0.04    -0.33%    9.04    9.13    9.27    8.88    62919    5707万    0.64%    2.25    25.46%    4.27%    21.8    89.73亿    89.73亿    0.42    4.13亿    21.22亿
43    002568    百润股份    13.40    0.30%    0.04    0.52%    13.29    13.36    13.48    13.07    8835    1173万    0.17%    0.99    9.38%    3.07%    51.5    68.85亿    69.65亿    0.26    1.30亿    8.53亿
44    600238    *ST椰岛    9.85    -1.00%    -0.10    0.20%    9.85    9.95    10.03    9.71    15848    1561万    0.35%    1.47    80.97%    3.22%    -16.1    43.61亿    43.92亿    -0.61    -1.63亿    3.48亿

开发程序对stock_data.txt进行以下操作:

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

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

二、程序启动后执行效果参考

源码与解析

一、思路

模糊查询:

  1. 为了方便不用每次都从硬盘读取方便查询,需要把原数据加载到内存里,需要选择存储为 dict 或 list 结构
  2. 如果使用 list 来存储的话就使用 for 循环一行行的提取,然后搜索包含需要搜索字符的项,但这种结构不利于日后的表格增项
  3. 如果使用 dict 来存储的话就可以把名称作为 key 然后其他数据作为 value,模糊查询只需要查询 key 值就好了,而日后如果需要在表格中增项只需要替换 value 中的内容即可
  4. 经过上面的分析,明显的在这个要求下 dict 明显更加合适,所以我们选择用 dict 这种数据结构来存储数据

允许按股票价格、涨跌幅、换手率这几列来筛选信息,并且进行大于小于的判断:

  1. 接受用户指令,根据查询条件(股票价格、涨跌幅、换手率)去循环 dict,例如条件为“换手率>20”,每循环一次找到对应的值,然后跟用户输入的条件进行大于小于的判断
  2. 写出判断逻辑的伪代码

user_input = 换手率>10

q_name,q_val = user_input.split(">")

for k in stock_data:

        val = stock_data[k]

        if val[10] > q_val:匹配上了        # 假设换手率的下标是10

                print(val)

二、答案

# 1.打开文件,加载内容,把内容转换成dict
# 2.while,

f = open('stock_data', 'r', encoding='utf-8')
stock_data = {
    # 'N德恩':['1','300780','N德恩'...]
    # '德国大众':['2','300781','德国大众'...]
}
query_columns = ["最新价", "涨跌幅", "换手率"]

# 先把第一行存读出来,存下来,变成列表
columns = f.readline().strip().split()

for line in f:
    line = line.strip().split()
    stock_data[line[2]] = line

while True:
    match_count = 0
    cmd = input("输入查询指令>:").strip()
    if len(cmd) == 0:    # 排除空值,因为 '' in 'Jove' ——> True
        continue
    print(columns)
    for s_name in stock_data:
        if cmd in s_name:   # 模糊匹配
            print(stock_data[s_name])
            match_count += 1
    # 输入,最新价、涨跌、换手率 ; 换手率>20
    # 要确保用户输入的要查的列是可允许。
    # 只支持 > and <
    if ">" in cmd:
        q_name, q_val = cmd.split(">")   # 换手率>20 拆分后q_name='换手率' q_val='20'
        q_name = q_name.strip()
        q_val = float(q_val)
        if q_name in query_columns:     # 代表 这是支持的可进行查询的列
            q_name_index = columns.index(q_name)    # 取到这一列的下标
            for s_name, s_vals in stock_data.items():
                # 不知道 用户输入的是["最新价","涨跌幅","换手率"]里面的那个值
                # 解决方案:拿q_name去到文件 第一行的列名里,去找对应的列的下标。拿到这个下标后,再循环去到每行去取对应的值
                if float(s_vals[q_name_index].strip("%")) > q_val:  # 用户输入和数据进行对比
                    print(s_vals)   # 打印符合条件的
                    match_count += 1
    elif "<" in cmd:
        q_name, q_val = cmd.split("<")  # 换手率<20 拆分后q_name='换手率' q_val='20'
        q_name = q_name.strip()
        q_val = float(q_val)
        if q_name in query_columns:  # 代表 这是支持的可进行查询的列
            q_name_index = columns.index(q_name)  # 取到这一列的下标
            for s_name, s_vals in stock_data.items():
                # 不知道 用户输入的是["最新价","涨跌幅","换手率"]里面的那个值
                # 解决方案:拿q_name去到文件 第一行的列名里,去找对应的列的下标。拿到这个下标后,再循环去到每行去取对应的值
                if float(s_vals[q_name_index].strip("%")) < q_val:  # 用户输入和数据进行对比
                    print(s_vals)  # 打印符合条件的
                    match_count += 1

    if match_count > 0:
        print("匹配到%s条" % match_count)
    else:
        print("无效指令...")

原文地址:https://blog.csdn.net/zjw529507929/article/details/142372874

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!