文件中最大的数字,不使用数组实现

时间:2013-03-31 23:48:01

标签: python-3.x

基本上,分配要求程序打开文件,找到最大的数字,并计算文件中的数字量。我们的讲师告诉我们不要使用数组实现,而且我不确定我的代码是否算作使用它。我不知道如何在不使用数组实现的情况下进行转换。

    def main():

        infile = open('numbers.dat', 'r')
        numbers = []
        for line in infile:
            numbers.append(int(line))
        infile.close()

        largest = max(numbers)
        print('The largest number in the file is: ',largest)

        count = len(numbers)
        print('The amount of numbers in the file is: ', count)
    main()

2 个答案:

答案 0 :(得分:0)

是的,我认为您的代码就像使用它一样。您的教练可能不希望您存储所有数字 - 幸运的是您没有。

由于这是一项评估练习,我不会为您编写代码,但我将解释基本方法。你需要保留两个整数来做到这一点 - 一个数字是你到目前为止在文件中看到的数字的数量,另一个是到目前为止最大的数字。对于您阅读的每个号码,您存储到目前为止最大的max(),然后存储您刚才看到的号码,然后只需将一个添加到计数器中。

一个问题 - 如果你在零处开始最大数字,那么如果文件中的所有数字都是负数,你将得到不正确的结果。您没有指定是否允许负数,但它可能有效。要避免这种情况,请先使用None初始化值,然后将其设置为您在文件中看到的第一个数字(如果值为None

答案 1 :(得分:0)

你没有使用数组,而是使用列表。这是低效的,因为您的程序需要按文件大小的顺序存储,但只需要少得多(即足够的内存来容纳最大的行数和行数)。

可以简单地在文件的元素上调用maxlen,如下所示:

def main():
    with open('numbers.dat', 'r') as infile:
        largest = max(map(int, infile))
        print('The largest number in the file is: ',largest)

    with open('numbers.dat', 'r') as infile:
        count = sum(1 for line in infile)
        print('The amount of numbers in the file is: ', count)
main()

但是,这两种变体显然都不是最理想的,因为您需要两次读取文件。相反,您可以修改for循环,如下所示:

def main():
    largest = float('-inf')
    count = 0
    with open('numbers.dat', 'r') as infile:
        for line in infile:
            v = int(line)
            # Left as homework: Update largest and count
    print('The largest number in the file is: ',largest)
    print('The amount of numbers in the file is: ', count)