-1

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

    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()
4

2 回答 2

0

是的,我认为您的代码算作使用它。您的讲师可能不希望您存储所有数字 - 幸运的是您不必这样做。

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

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

于 2013-03-31T23:54:00.547 回答
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)
于 2013-03-31T23:56:58.200 回答