Это не ответ, но вы забыли, потому что ваш код нелегко проверить. Ваше описание проблемы расплывчато, и, поскольку ваш код содержит ошибки, мы не имеем четкого представления о том, что от него ожидать. Лучше всего дать образец ввода и вывода образца. И вы должны сделать это так, чтобы мы могли просто скопировать / вставить и запустить его.
Поскольку это то, что вы, как правило, должны делать с кодом в любом случае, вот пример того, как сделать ваш код тестируемым. Во-первых, не делайте ничего на уровне модуля. Поместите алгоритм в функцию
foo.py
import sys
def bar(input_sequence):
a = []
s = 0
k = 0
vals = iter(input_sequence)
for i in range(20):
x = next(vals)
if x<0:
s+=x
k+=1
a.append(x)
z = s/k
for i in range(20):
l = (a[i])-z
del a[i]
a.append(l)
if __name__ == "__main__":
a = foo(sys.stdin)
print(a)
Теперь вы можете вызывать foo()
со стандартным вводом, который вы уже знаете желаемый результат. Можно также включить это в python unittest framework, чтобы вы могли легко добавлять и запускать тесты по мере роста функциональности вашей программы.
testfoo.py
import unittest
import foo
class TestFoo(unittest.TestCase):
def test_bar_1():
test_data = ['todo: fill in here']
expected_result = ['todo: fill in here']
result = foo.bar(test_data)
self.assertEqual(expected_result, result)
if __name__ == "__main__":
unitttest.main()
теперь вы можете go в командной строке и набрать
python testfoo.py
Мы можем запустить этот код, и он точно скажет нам, что вы ожидаете от функции. В схеме «сначала тестируй» вы должны написать testfoo.py
до foo.py
, чтобы у вас был простой способ проверки кода при его написании.