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


    # coding: utf-8
    
    """
    
    作业题目:股票信息查询程序
        作业需求:
        1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)
        2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来
        3 允许按股票价格、涨跌幅、换手率这几列来筛选信息,
             比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。
        stock_data.txt 此文件请从课件中下载。
    
    思路提示:
    加载文件内容到内存,转成dict or list结构,然后对dict or list 进行查询等操作。 这样以后就不用每查一次就要打开一次文件了,效率会高。
    
    知识点:
    ",".join(str.split()) 把列表转为字符串。由于空格做分隔,可能会受到文字中包含空格的影响,建议把空格转换为逗号,通过逗号做分隔,
    str.strip() 把字符串中的特殊字符(比如
    换行给去除)
    exit("程序退出,谢谢使用!")  可以直接退出程序(break是退出当前循环)
    
    """
    
    # 首先处理文本文件,把空格转换为逗号
    """
    
    # 读取文件
    with open("stock_data_dict_空格改逗号分隔.txt", mode="r", encoding="utf-8") as f:
        # 设置开始读取位置的下标为0
        f.seek(0)
        # 读取原文件的信息,list列表
        read_stock_data = f.readlines()
        # 存放修改后的信息
        modified_stock_data = ""
        # 修改信息,循环列表每1行
        for line in read_stock_data:
            # 把该行空格转换为逗号,并赋值(注意保留换行)
            modified_stock_data += ",".join(line.split()) + "
    "
    
    # 写入文件
    with open("stock_data_dict_空格改逗号分隔.txt", mode="w", encoding="utf-8") as f:
        # 把前边修改后的信息,写入文件
        f.write(modified_stock_data)
    
    """
    
    # 定义变量
    # 通过字典存放股票信息
    stock_data_dict = {}
    # # 判断是否退出循环
    # is_not_exit = True
    
    # 读取文件
    with open("stock_data_dict_空格改逗号分隔.txt", mode="r", encoding="utf-8") as f:
        # 把首行标题单独取出,放入list列表
        stock_data_title = f.readline().strip().split(",")
        # 读取文件中的股票信息(不含标题),并存入字典
        for line in f.readlines():
            # 把取出的字符串转为列表
            line = line.strip().split(",")
            # 把该行添加到字典,列表中的“名称”为key,列表为value
            stock_data_dict[line[2]] = line
    
    # while循环实现股票查询逻辑
    while True:
        # 查询到的股票记录数
        record_num = 0
        # 打印标题,供用户选择
        print(stock_data_title)
        # 接收用户输入条件:模糊查询-股票名称,表达式-价格>50,表达式-市盈率<50,注意百分号%处理
        user_input = input("股票查询接口>>")
    
        # for循环遍历所有股票信息
        for stock_key,stock_value in stock_data_dict.items():
            # 模糊查询-股票名称,存在则打印(title已单独取出,dict.keys()中存的是股票名称)
            if user_input in stock_key:
                print(stock_value)
                record_num += 1
    
            # 如果用户输入条件,包含>,则按照表达式处理
            elif ">" in user_input:
                # 把用户输入转为列表
                user_input_list = user_input.strip().split(">")
                # 用户输入的标题
                user_input_title = user_input_list[0]
                # 用户输入的值,如果存在百分号%则去除
                user_input_value = user_input_list[1].strip("%")
                # 用户输入的列索引
                user_input_index = stock_data_title.index(user_input_title)
                # 当前遍历所在行,对应列的值,如果存在百分号%则去除
                column_value = stock_value[user_input_index].strip("%")
                # 判断用户输入,符合条件则打印
                if float(column_value) > float(user_input_value):
                    print(stock_value)
                    record_num += 1
    
            # 如果用户输入条件,包含<,则按照表达式处理
            elif "<" in user_input:
                # 把用户输入转为列表
                user_input_list = user_input.strip().split("<")
                # 用户输入的标题
                user_input_title = user_input_list[0]
                # 用户输入的值,如果存在百分号%则去除
                user_input_value = user_input_list[1].strip("%")
                # 用户输入的列索引
                user_input_index = stock_data_title.index(user_input_title)
                # 当前遍历所在行,对应列的值,如果存在百分号%则去除
                column_value = stock_value[user_input_index].strip("%")
                # 判断用户输入,符合条件则打印
                if float(column_value) < float(user_input_value):
                    print(stock_value)
                    record_num += 1
    
            # 退出,输入q
            elif user_input == "q":
                # is_not_exit = False
                exit("程序退出,谢谢使用!")
    
        # 打印找到的股票记录条数
        print("找到{0}条".format(record_num))
  • 相关阅读:
    .net core使用 AutoMapper
    使用 ASP.NET Core 和 Entity Framework Core 入门
    使用vue-quill-editor图片上传
    使用NPOI 做Excel导出
    利用SmtpClient类发送邮件
    使用Area(区域)会遇到的问题
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器
    MySQL的内存都用在了哪里
    (转载)MySQL buffer pool中三种page以及链表
    MySQL8.0备份工具之Xtrabackup
  • 原文地址:https://www.cnblogs.com/lizhen416/p/13662208.html
Copyright © 2020-2023  润新知