You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何根据输入的产品名从txt文件提取对应商品价格?

问题原因

你的代码有3个核心逻辑错误,直接导致运行异常:

  1. 文件对象只能单次遍历:第一次用列表推导式遍历text_file生成p_name列表时,文件读取指针已经移动到文件末尾,第二次再遍历text_file生成p_price时读不到任何内容,所以p_price从一开始就是空列表,这是所有场景下都输出[]的根本原因。
  2. 循环逻辑完全无效:你写的while True块里,p_name == product_name_input只是做了一次无任何赋值、无结果存储的相等判断,没有做任何价格匹配操作,执行完判断就直接打印整个p_price列表然后跳出循环,完全没有实现“根据输入找对应价格”的逻辑。
  3. 数据结构选型不合理:把商品名和价格拆成两个独立列表存储,即使文件读取正常,也需要额外做索引对齐才能匹配到对应价格,很容易出现错位问题,用字典做键值对映射是更简单可靠的方案。
修复方案
  • 读取文件时只做一次遍历,逐行解析同时提取商品名和价格,避免重复遍历文件导致读空
  • 删除无意义的while True死循环,不需要在这里套循环逻辑
  • 用字典存储「商品名: 价格」的映射关系,查找时直接判断键是否存在即可,不需要做列表遍历匹配
  • 读取每行内容时先去掉首尾的换行符、空格,避免因为隐藏字符导致商品名匹配失败
修复后完整代码

假设你的products.txt每行格式为编号, 商品名, 价格(比如1, shirt, 99),可直接运行以下代码:

# 获取用户输入,自动去掉首尾多余空格
product_name_input = input("Please enter products name: ").strip()
product_map = {}

# 单次遍历文件,构建商品-价格映射
with open("products.txt", "r", encoding="utf-8") as text_file:
    for line in text_file:
        # 去掉每行首尾空白、换行符后按分隔符拆分
        line_items = line.strip().split(", ")
        # 跳过格式不符合要求的空行、坏行,避免报错
        if len(line_items) < 3:
            continue
        name = line_items[1].strip()
        price = float(line_items[2].strip())
        product_map[name] = price

# 匹配查询逻辑
if product_name_input in product_map:
    print(f"The price of {product_name_input} is {product_map[product_name_input]}")
else:
    print("That product does not exist")
原异常场景对应说明
  • 输入存在的商品输出空列表:是因为p_price本身就是二次遍历文件得到的空列表,无效循环直接打印了这个空列表,根本没有执行匹配价格的逻辑
  • 输入不存在的商品先输出空列表再提示不存在:是因为你的打印空列表的逻辑写在了商品存在性判断的前面,不管商品是否存在都会先执行打印空列表的操作,才会走到不存在的提示分支

内容的提问来源于stack exchange,提问作者NMGITV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:49:15