我遇到了Python程序的问题。 我想从文件中获取一个列表并打印最低的数字。 例如
showFile = open("company.txt", 'r')
for line in showFile:
tokens = line.split(',')
minValue = min(tokens[:2])
print("the lowest is", minValue)
并输出 -
the lowest is 33
the lowest is 18.5
the lowest is 22
这是company.txt -
'Huggies', 33, 84
'Snugglers', 18.5, 72
'Baby Love', 22, 96
我很自信,所以任何帮助都会很棒。
答案 0 :(得分:1)
现在,您在每行中分别找到最小的数字。有点。如果你想要文件中最低的单个数字,你应该将每行中的数字或最小数字收集到一个列表中,并在for循环之外的那个列表上调用min()。
另一个问题是,您使用tokens[:2]
检查数字的方式。在此之后粘贴print tokens
语句,你会发现你正在切断每行的第二个数字。如果目标是切断公司名称,则使用[1:]。这是保留此tokens[:2]
行的其他答案的问题。它们似乎有效,但只是因为最低的数字恰好出现在第一列中。调用min(tokens[1:])
也会将数字评估为字符串,这可能会产生意外结果,并且仍然包含空格,如' 18.5\n'
。要将数字作为数字进行比较,请将它们包装在float()中。
总之,这样的事情:
showFile = open("company.txt", 'r')
numbers = []
for line in showFile:
tokens = line.split(',')
numbers.append(min(float(t) for t in tokens[1:]))
minValue = min(numbers)
print("the lowest is ", minValue)
答案 1 :(得分:0)
如果您要做的是获取整个文件的最低值,而不是每行,则只需执行以下操作:
myLowNumbers = []
showFile = open("company.txt", 'r')
for line in showFile:
tokens = line.split(',')
minValue = min(tokens[:2])
myLowNumbers.append(minValue)
print min(myLowNumbers)
这将继续将每行中的最小数字添加到列表中,然后在循环完成后从列表中返回最小值。当然有更优雅的方法,但在提供更多信息之前,这是我能提供的最佳方式。
顺便说一句,不要忘记致敬通过“投票”正确答案批准正确答案 - 欢迎来到SO。
答案 2 :(得分:0)
你并没有真正比较任何数字。
这不是超级优雅,但它有效。
showFile = open("company.txt", 'r')
lowest = None
for line in showFile:
tokens = line.split(',')
value = min(tokens[:2])
if lowest == None:
lowest = value #set lowest value to first number found
if value < lowest:
lowest = value
print("the lowest is", lowest)
(我也认为你使用的是Python 3.x,我使用的是2.6,只是提升了一些东西并不完全排队)