基本上,分配要求程序打开文件,找到最大的数字,并计算文件中的数字量。我们的讲师告诉我们不要使用数组实现,而且我不确定我的代码是否算作使用它。我不知道如何在不使用数组实现的情况下进行转换。
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()
答案 0 :(得分:0)
是的,我认为您的代码就像使用它一样。您的教练可能不希望您存储所有数字 - 幸运的是您没有。
由于这是一项评估练习,我不会为您编写代码,但我将解释基本方法。你需要保留两个整数来做到这一点 - 一个数字是你到目前为止在文件中看到的数字的数量,另一个是到目前为止最大的数字。对于您阅读的每个号码,您存储到目前为止最大的max()
,然后存储您刚才看到的号码,然后只需将一个添加到计数器中。
一个问题 - 如果你在零处开始最大数字,那么如果文件中的所有数字都是负数,你将得到不正确的结果。您没有指定是否允许负数,但它可能有效。要避免这种情况,请先使用None
初始化值,然后将其设置为您在文件中看到的第一个数字(如果值为None
。
答案 1 :(得分:0)
你没有使用数组,而是使用列表。这是低效的,因为您的程序需要按文件大小的顺序存储,但只需要少得多(即足够的内存来容纳最大的行数和行数)。
可以简单地在文件的元素上调用max
和len
,如下所示:
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)