使用Python计算文件中的偶数

时间:2011-04-14 00:10:52

标签: python-3.x

编写一个以参数为参数的函数,一个要读取的文件名,返回文件中存在的偶数个数。

我试过请尝试一些帮助。它没有返回偶数。

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)

2 个答案:

答案 0 :(得分:3)

@Ergwun pointed out已经存在代码中的问题。这是另一个解决方案:

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

答案 1 :(得分:1)

您没有说明文件的格式是什么。根据您的尝试,我假设您的文件每行只包含一个整数。

以下是您的功能的一些问题:

  • 您正在将参数传递给名为l的函数,但不使用它。您应该将其用作要打开的文件的名称,而不是硬编码'even.txt'
  • 您正在将整个文件读入名为num的变量中,然后甚至不使用该变量。读完整个文件后,你的for循环中没有任何内容可以迭代。
  • 您的for循环遍历文件的行作为字符串。如果它可以被2整除,则需要在测试之前将该行转换为整数。
  • for循环中,您将返回找到的第一个偶数,而不是计算所有偶数。你需要在循环之前创建一个count变量,并在每次找到偶数时在循环中递增,然后在循环完成后返回计数。

如果你解决了这些问题,你的功能应该是这样的:

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

...

更新(以解决您的评论):

assertEqualTestCase模块提供的unittest类的方法。 如果您正在编写单元测试,则应在从assertEqual派生的类中的测试用例中调用TestCase

如果你只是想做一个单元测试的断言,你可以写:

assert counteven('even.txt') == 2, ' Number of even numbers must be 2'