Вы не указали формат файла. Основываясь на вашей попытке, я предполагаю, что ваш файл содержит только одно целое число в каждой строке.
Вот некоторые из проблем, связанных с вашей функции:
- Вы передаете аргумент для функции, вызываемой
l
, но не используется. Вы должны использовать его как имя файла для открытия, вместо жесткого кодирования 'even.txt'
.
- Вы просматриваете весь файл в переменной под названием
num
, а затем даже не используете эту переменную. Прочитав во всем файле, в вашем цикле for ничего не осталось.
- Ваша петля
for
выполняет итерации по строкам файла как строки. Вам нужно преобразовать строку в целое число перед тестированием, если оно делится на два.
- Внутри цикла
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
...
UPDATE (обратиться комментарий):
assertEqual
является метод класса TestCase
, предоставляемый модулем unittest
. Если вы пишете единичный тест, то assertEqual
следует вызывать в тестовом примере в классе, производном от TestCase
.
Если вы просто хотите, чтобы сделать утверждение о находящейся модульном тестировании вы можете написать:
assert counteven('even.txt') == 2, ' Number of even numbers must be 2'
спасибо, ребята, за помощь. – user493989
привет, я попытался сделать это до того, как предложил Ergwun, и assertEquals не работает должным образом, и я скопировал и вставил решения Ergwun. AssertEqual все еще не работает jst, как то, как я изначально сделал свое. – user493989
См. Мое обновление, адресованное assertEqual. – Ergwun