【问题标题】:My python list program doesn't work for some reason我的 python 列表程序由于某种原因无法运行
【发布时间】:2020-04-03 19:15:09
【问题描述】:
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 个元素的一维列表的值。通过从列表中每个元素的值中减去列表中负元素的算术平均值来转换原始列表。源数据是-10^6到10^6的整数。

【问题讨论】:

  • 请重复介绍导览,尤其是how to askMRE。 “不起作用”不是问题规范。您发布的代码挂起等待输入 - 我们不应该提供 - 并且您没有显示任何输出。
  • “不起作用”告诉我们很少。相反,请告诉我们程序实际做了什么,并说明它与您的预期有何不同。
  • 在第二个 for 循环中,您正在修改要循环的表,这样只会造成疯狂和悲伤。
  • 所以我做了一些测试,但程序给了我错误的输出数据:[-30, -43, 26, 88, -10, 2, -14, 6, 1, 120, 43.5, 20.5, 31.5, 35.5, 1.5, 92.0, 64.0, 73.5, 54.5, 121.5] (the right is: 32.5 -9.5 43.5 -22.5 71.5 46.5 20.5 108.5 39.5 10.5 31.5 22.5 43.5 6.5 35.5 26.5 13.5 21.5 1.5 140.5).该程序在减去算术平均值时完全是错误的。输入数据为:12 -30 23 -43 51 26 0 88 19 -10 11 2 23 -14 15 6 -7 1 -19 120

标签: python python-3.x list


【解决方案1】:

这不是答案,但你被叮了,因为你的代码不容易测试。您对问题的描述含糊不清,并且由于您的代码有问题,我们不知道会发生什么。最好给出样本输入和样本输出。你应该这样做,这样我们就可以复制/粘贴并运行它。

由于这是您通常应该对代码执行的操作,因此这里有一个示例,说明如何使您的代码可测试。首先,不要在模块级别做任何事情。把算法放在一个函数中

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 框架中,这样您就可以随着程序功能的增长轻松添加和运行测试。

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()

现在您可以进入命令提示符并键入

python testfoo.py

我们可以运行这段代码,它会准确地告诉我们您希望该函数做什么。在“测试优先”设计中,您应在 foo.py 之前编写 testfoo.py,以便在编写代码时轻松验证代码。

【讨论】:

  • 是的,很抱歉没有提供输入和输出数据。所以输入数据为 12, -30, 23, -43, 51, 26, 0, 88, 19, -10, 11, 2, 23, -14, 15, 6, -7, 1, -19, 120 . 输出数据应该是:32.5 -9.5 43.5 -22.5 71.5 46.5 20.5 108.5 39.5 10.5 31.5 22.5 43.5 6.5 35.5 26.5 13.5 21.5 1.5 140.5
猜你喜欢
  • 2020-11-28
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多