0

我的 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

我很nooby,所以任何帮助都会很棒。

4

3 回答 3

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)
于 2013-05-09T16:30:49.720 回答
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。

于 2013-05-09T16:10:35.987 回答
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,只是提醒一下,以防有些东西不太一致)

于 2013-05-09T16:15:20.390 回答