编写一个函数,该函数以要读取的文件名作为参数,返回文件中存在的偶数的个数。
我试了又试,请帮帮忙。它不返回偶数。
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)发布于 2011-04-14 11:05:29
@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))发布于 2011-04-14 08:45:48
你没有说文件的格式是什么。根据您的尝试,我假设您的文件每行只包含一个整数。
以下是您的函数的一些问题:
l的函数传递参数,但没有使用它。您应该使用它作为要打开的文件的名称,而不是硬编码'even.txt'.num的变量中,然后甚至不使用该变量。读取完整个文件后,在循环中就没有什么可迭代的了。
for循环以字符串的形式遍历文件的各行。在测试它是否能被2整除之前,你需要将它转换成一个整数。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'https://stackoverflow.com/questions/5657154
复制相似问题