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

如何在循环执行结束后留存并访问循环内部生成的变量?

问题根因

  • 你代码里写反了赋值语句:RetailPrice = Retail_Prices 是把不存在的Retail_Prices赋值给RetailPrice,反过来才是把读取到的零售价存到目标变量里,而且你没有提前把Retail_Prices定义成存储容器(比如列表),循环外当然找不到这个变量。
  • 你在第4次循环(z==4的时候)就触发了input输入阻塞,程序会停在这里等用户输入,所以看起来只读取了一行就卡住了。
  • 原代码重复写了两次linesplit = line.split(',')属于冗余代码,且没有在循环末尾读取下一行,容易出现死循环问题。

解决步骤

  1. 循环开始前提前定义Retail_Prices为列表,用来存储所有读取到的零售价,同时初始化计数变量z、提前读取第一行表头赋值给headerItems。
  2. 修正赋值逻辑,把读取到的RetailPrice转成整数后追加到Retail_Prices列表里。
  3. 把用户输入、价格查询的逻辑挪到整个文件读取完成的循环外部,不要放在循环内部打断文件读取流程。

修正后参考代码

# 提前初始化全局变量
Retail_Prices = []
z = 0
# 先读取表头行(补充你原代码缺失的表头读取逻辑)
header_line = fh.readline().replace('"', '').replace(';', ',')
headerItems = header_line.split(',')
# 读取第一行内容
line = fh.readline()

while line != '':
    line = line.replace(',', '').replace('"', '').replace(';', ',')
    linesplit = line.split(',')
    dictionary = dict(zip(headerItems, linesplit))
    RetailPrice = dictionary.get('retailprice')
    print(RetailPrice)
    # 转成整数后存入全局列表,非空判断避免转换报错
    if RetailPrice and RetailPrice.isdigit():
        Retail_Prices.append(int(RetailPrice))
    z = z + 1
    # 读取下一行内容
    line = fh.readline()

# 整个文件读取完成后再处理用户交互逻辑
price = input('输入要查询的最高零售价,将返回所有低于该价格的商品,输入其他内容直接退出: ')
if price.isdigit():
    target_price = int(price)
    match_prices = [p for p in Retail_Prices if p < target_price]
    print(f"低于{target_price}的零售价列表:{match_prices}")
else:
    print('goodbye')
# 循环外可直接调用存储了所有值的Retail_Prices,不会报变量不存在错误
print("所有零售价列表:", Retail_Prices)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:24:01