Моя программа списка python по какой-то причине не работает - PullRequest
0 голосов
/ 03 апреля 2020
a = []
s = 0
k = 0
for i in range(20):
    x = int(input())
    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)
print(a)
input()

Задача: Значения одномерного списка из 20 элементов считываются из стандартного потока ввода данных. Преобразование исходного списка путем вычитания из значения каждого элемента списка среднего арифметического c среднего числа отрицательных элементов списка. Исходные данные - целые числа в диапазоне от -10 ^ 6 до 10 ^ 6.

1 Ответ

0 голосов
/ 03 апреля 2020

Это не ответ, но вы забыли, потому что ваш код нелегко проверить. Ваше описание проблемы расплывчато, и, поскольку ваш код содержит ошибки, мы не имеем четкого представления о том, что от него ожидать. Лучше всего дать образец ввода и вывода образца. И вы должны сделать это так, чтобы мы могли просто скопировать / вставить и запустить его.

Поскольку это то, что вы, как правило, должны делать с кодом в любом случае, вот пример того, как сделать ваш код тестируемым. Во-первых, не делайте ничего на уровне модуля. Поместите алгоритм в функцию

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, чтобы у вас был простой способ проверки кода при его написании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...