编写一个以参数为参数的函数,一个要读取的文件名,返回文件中存在的偶数个数。
我试过请尝试一些帮助。它没有返回偶数。
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)
答案 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
...
更新(以解决您的评论):
assertEqual
是TestCase
模块提供的unittest
类的方法。
如果您正在编写单元测试,则应在从assertEqual
派生的类中的测试用例中调用TestCase
。
如果你只是想做一个单元测试的断言,你可以写:
assert counteven('even.txt') == 2, ' Number of even numbers must be 2'