• 路飞学城系列:第2章 数据类型&文件操作-作业(2)【股票信息查询程序_列表版】


    # 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))
  • 相关阅读:
    open_basedir restriction in effect,解决php引入文件权限问题 解决方法
    Linux增加虚拟内存方法
    centos下kill、killall、pkill命令区别
    正则表达式全集
    Mysql中外键的 Cascade ,NO ACTION ,Restrict ,SET NULL
    配置frp实现内网穿透
    解决微信授权回调页面域名只能设置一个的问题 [php]
    高性能Mysql主从架构的复制原理及配置详解
    【Git】工作中99%能用到的git命令
    SVN服务器搭建和使用
  • 原文地址:https://www.cnblogs.com/lizhen416/p/13662203.html
Copyright © 2020-2023  润新知