为什么最大数字忽略两位数?

时间:2014-12-24 09:23:27

标签: list file python-3.x max

目前我正在将一组变量保存到文本文件中。我正在检查我的代码是否有效,但每当我使用两位数字(如10)时,它都不会将此数字作为最大数字打印出来。

如果我的文本文件看起来像这样。

tom:5
tom:10
tom:1

它将输出5作为最大数字。

name = input('name')
score = 4
if name == 'tom':
    fo= open('tom.txt','a')
    fo.write('Tom: ')
    fo.write(str(score ))
    fo.write("\n")
    fo.close()

if name == 'wood':
    fo= open('wood.txt','a')
    fo.write('Wood: ')
    fo.write(str(score ))
    fo.write("\n")
    fo.close()

tomL2 = []
woodL2 = []

fo = open('tom.txt','r')
tomL = fo.readlines()
tomLi = tomL2 + tomL
fo.close
tomLL=max(tomLi)
print(tomLL)


fo = open('wood.txt','r')
woodL = fo.readlines()
woodLi = woodL2 + woodL
fo.close
woodLL=max(woodLi)
print(woodLL)

1 个答案:

答案 0 :(得分:1)

您正在比较字符串,而不是数字。在使用max之前,您需要将它们转换为数字。例如,您有:

tomL = fo.readlines()

这包含一个字符串列表:

['tom:5\n', 'tom:10\n', 'tom:1\n']

字符串被排序lexicographically(非常类似于在英语词典中排序的单词)。如果要比较数字,则需要先将它们转换为数字:

tomL_scores = [int(s.split(':')[1]) for s in tomL]

解析按以下方式完成:

  • ….split(':')使用冒号作为分隔符将字符串分成几部分:

    'tom:5\n'变为['tom', '5\n']

  • …[1]从列表中选择第二个元素:

    ['tom', '5\n']变为'5\n'

  • int(…)将字符串转换为整数:

    '5\n'变为5

  • 列表推导[… for s in tomL]将此操作序列应用于列表的每个元素。

请注意int(或类似float)对它所接受的内容相当挑剔:它必须采用有效数字文字的形式,否则会被错误拒绝(尽管在允许尾随空格)。这就是为什么你需要….split(':')[1]将字符串按到一个它愿意接受的形式。

这将产生:

[5, 10, 1]

现在,您可以应用max来获得最高分。

作为附注,声明

fo.close

关闭文件,因为它实际上调用该函数。要调用该函数,必须将参数括在括号中,即使没有参数:

fo.close()