使用max函数时返回的值不正确

时间:2014-11-27 18:07:34

标签: python python-3.x max

以下代码返回不正确的最大值:

maximum = 0
f =open("data.dat", "r")

for line in f:
    global maximum
    fields = line.split()
    classcode = fields[0]
    name = fields[1]
    scr = fields[2]

    maximum=max(scr)
    print(classcode, name, scr)

f.close()
print("maximum=", maximum)

数据文件是

1 test2 100
1 test1 100
1 test3 20
1 test4 60
1 test5 33

我得到的结果是

1 test2 100
1 test1 100
1 test3 20
1 test4 60
1 test5 33
maximum= 3

任何想法为什么我得到错误的价值将不胜感激

2 个答案:

答案 0 :(得分:1)

您正在将max()应用于每个值; max()无法将该值与之比较。实际上,它从scr中找到一个具有最高值字符,它只是一个字符串(一系列字符)。在您的上一个scr值,字符串'33'中,两个字符都具有相同的值,因此它选择了一个'3'

收集列表中的值(首先转换为整数后),然后在该列表上调用max()会更有效。然后它可以与之比较:

scores = []

for line in f:
    fields = line.split()
    classcode = fields[0]
    name = fields[1]
    scr = int(fields[2])
    scores.append(scr)
    print(classcode, name, scr)

maximum = max(scores)
print("maximum=", maximum)

答案 1 :(得分:1)

maximum=max(scr)行没有按照您的想法行事。它会比较字符串scr中的字符值。

我认为你想要的是maximum = max(int(scr), maximum)。这将选择较大的当前值或旧的最大值,并处理整数而不是字符串。