使用Python计数文件中的偶数

问题描述

| 编写一个函数,该函数以要读取的文件名作为参数,返回文件中存在的偶数个数。 我已经尝试过,请尝试一些帮助。它不返回偶数。
def counteven(l):
    infile = open(\'even.txt\',\'r\')
    num = infile.read()
    for i in infile:
        if (i %2!=0):
            return i

    infile.close()

assertEqual(counteven(\'even.txt\'),2)
    

解决方法

@Ergwun已经指出了代码中的问题。这是另一个解决方案:
def counteven(integers):
    return sum(1 for n in integers if n % 2 == 0)

with open(\'even.txt\') as f:
    numbers = (int(line) for line in f)
    print(counteven(numbers))
    ,您没有说文件的格式是什么。根据您的尝试,我假设您的文件每行仅包含一个整数。 这是您的函数存在的一些问题: 您正在将参数传递给名为
l
的函数,但未使用它。您应该使用它作为要打开的文件的名称,而不是硬编码“ 3”。 您正在将整个文件读入一个名为
num
的变量,然后甚至不使用该变量。读完整个文件后,您的for循环中没有剩下要迭代的内容了。 您的“ 5”循环将文件的各行作为字符串进行迭代。您需要先将线转换为整数,然后再测试该线是否可被二整除。 在
for
循环内,您将返回找到的第一个偶数,而不是对所有偶数进行计数。您需要在循环之前创建一个计数变量,并在每次发现偶数时在循环中递增,然后在循环完成后返回计数。 如果您解决了这些问题,则函数应如下所示:
def counteven(filename):
  countOfEvenNumbers = 0
  infile = open(filename,\'r\')
  for line in infile:
    number = int(line)
    if (number %2 == 0):
      countOfEvenNumbers+= 1
  infile.close()
  return countOfEvenNumbers
... 更新(以解决您的评论):
assertEqual
unittest
模块提供的
TestCase
类的方法。 如果要编写单元测试,则应在测试用例中从
TestCase
派生的类中调用
assertEqual
。 如果您只想对单元测试进行断言,则可以编写:
assert counteven(\'even.txt\') == 2,\' Number of even numbers must be 2\'