如何在循环执行结束后留存并访问循环内部生成的变量?
问题根因
- 你代码里写反了赋值语句:
RetailPrice = Retail_Prices是把不存在的Retail_Prices赋值给RetailPrice,反过来才是把读取到的零售价存到目标变量里,而且你没有提前把Retail_Prices定义成存储容器(比如列表),循环外当然找不到这个变量。 - 你在第4次循环(
z==4的时候)就触发了input输入阻塞,程序会停在这里等用户输入,所以看起来只读取了一行就卡住了。 - 原代码重复写了两次
linesplit = line.split(',')属于冗余代码,且没有在循环末尾读取下一行,容易出现死循环问题。
解决步骤
- 循环开始前提前定义
Retail_Prices为列表,用来存储所有读取到的零售价,同时初始化计数变量z、提前读取第一行表头赋值给headerItems。 - 修正赋值逻辑,把读取到的
RetailPrice转成整数后追加到Retail_Prices列表里。 - 把用户输入、价格查询的逻辑挪到整个文件读取完成的循环外部,不要放在循环内部打断文件读取流程。
修正后参考代码
# 提前初始化全局变量 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
相关产品推荐
相关产品推荐

