我有一个文本文件,其中包含一些股票及其价格,但没有,我试图打印出价值最低的股票以及公司名称,这是我的代码。
stocks = open("P:\COM661\stocks.txt")
name_lowest = ""
price_lowest = 0
for line in stocks:
rows = line.split("\t")
price = float(rows[2])
if price>price_lowest:
price_lowest = price
name_lowest = rows[1]
print(name_lowest + "\t" + str(price_lowest))
我正在尝试浏览文件,并将每个数值与它之前的数值进行比较,看它是高还是低,然后最后它应该保存最低的价格并与名称一起打印公司。 而是打印文件中最后一家公司的名称及其名称。
我该如何解决?
答案 0 :(得分:2)
您犯了2个错误。 首先被初始化为初始值0 您应该将初始值初始化为python float中的最大可用数字。
import sys
price_lowest = sys.float_info.max
否则,您可以将其初始化为第一个元素
第二您的if语句应为
if price<price_lowest:
答案 1 :(得分:1)
初始化:
price_lowest = 999999 # start with absurdly high value, or take first one
加上您的if
支票是相反的。
应该是:
if price < price_lowest
答案 2 :(得分:1)
其他人已经提出了解决您当前代码的解决方案。但是,使用Python可以有一个较短的解决方案:
with open('file') as f:
print min(
[(i.split('\t')[0], float(i.split('\t')[1])) for i in f.readlines()],
key=lambda t: t[1]
)
答案 3 :(得分:0)
您的“如果”逻辑倒退,应为price<lowest_pre
。
答案 4 :(得分:0)
只需稍作调整,就可以将price_lowest
从None
开始,然后将其设置为您的第一次遇到,然后从那里进行比较
stocks = open("P:\COM661\stocks.txt")
name_lowest = ""
price_lowest = None
for line in stocks:
rows = line.split("\t")
price = float(rows[2])
if price_lowest = None:
price = price_lowest
name_lowest = rows[1]
elif price < price_lowest:
price_lowest = price
name_lowest = rows[1]
print(name_lowest + "\t" + str(price_lowest))