首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Python计算文件中的偶数

使用Python计算文件中的偶数
EN

Stack Overflow用户
提问于 2011-04-14 08:10:52
回答 2查看 4.8K关注 0票数 0

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

我试了又试,请帮帮忙。它不返回偶数。

代码语言:javascript
运行
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2011-04-14 11:05:29

@Ergwun pointed out已经指出了你代码中的问题。这里有另一个解决方案:

代码语言:javascript
运行
复制
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))
票数 3
EN

Stack Overflow用户

发布于 2011-04-14 08:45:48

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

以下是您的函数的一些问题:

  • 您正在向名为l的函数传递参数,但没有使用它。您应该使用它作为要打开的文件的名称,而不是硬编码'even.txt'.
  • You将整个文件读取到一个名为num的变量中,然后甚至不使用该变量。读取完整个文件后,在

循环中就没有什么可迭代的了。

  • for循环以字符串的形式遍历文件的各行。在测试它是否能被2整除之前,你需要将它转换成一个整数。
  • for循环中,你将返回找到的第一个偶数,而不是计算所有的偶数。您需要在循环之前创建一个计数变量,并在每次找到偶数时在循环中递增,然后在循环完成后返回计数。

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

代码语言:javascript
运行
复制
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

..。

更新(回复您的评论):

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

如果你只是想在单元测试之外创建一个断言,你可以这样写:

代码语言:javascript
运行
复制
assert counteven('even.txt') == 2, ' Number of even numbers must be 2'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5657154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档