我通过了测试用例,但未能验证,为什么?

时间:2017-05-14 06:24:30

标签: python

我遇到的问题与Will Njundong的帖子Why could this code possibly be failing a test case?类似,我在5个案例中失败了两个

foobar:~/power_hungry user$ verify solution.py 
Verifying solution...

Test 1 passed!
Test 2 passed!
Test 3 failed.
Test 4 failed.
Test 5 passed! 

无法弄清楚我的代码失败的原因,请参阅下文:

def answer(xs):
    negArr = 0
    product = 1
    for number in xs:
        if number < 0:
            negArr += 1
    xs.sort()
    while 0 in xs: xs.remove(0)
    if negArr % 2 != 0:
        xs.pop(negArr-1)
    for x in xs:
        product *= x
    return product

我的代码通过了给出的两个测试用例(见下文)我错过了什么?请指教

测试用例

输入:     (int list)xs = [2,0,2,2,0] 输出:     (字符串)“8”

输入:     (int list)xs = [-2,-3,4,-5] 输出:     (字符串)“60”

Power Hungry

指挥官Lambda的空间站是巨大的。巨大的空间站占据了很大的力量。拥有世界末日设备的巨大空间站需要更多电力。为了满足火车站的电力需求,Commander Lambda在火车站的外表面安装了太阳能电池板。但该站位于类星体量子通量场的中间,这对太阳能电池板造成严重破坏。你和你的心腹团队已被指派修理太阳能电池板,但你不能在不关闭空间站(以及所有那些讨厌的生命支持系统!)的情况下立刻将它们全部拆除。

您需要确定任何给定阵列中哪些面板可以离线修复,同时仍然保持每个阵列的最大功率输出量,并且要做到这一点,您首先需要弄清楚最大值实际上每个数组的输出。编写一个函数答案(xs),它取一个表示数组中每个面板的功率输出电平的整数列表,并返回这些数字的某些非空子集的最大乘积。因此,例如,如果一个数组包含功率输出电平为[2,-3,1,0,-5]的面板,则可以通过获取子集找到最大乘积:xs [0] = 2,xs [1 ] = -3,xs [4] = -5,得到乘积2 *( - 3)*( - 5)= 30.所以答案([2,-3,1,0,-5])将是“ 30" 。

每个太阳能电池板阵列包含至少1个且不超过50个电池板,每个电池板的功率输出电平绝对值不大于1000(某些电池板故障严重,导致能量消耗,但你知道面板的波形稳定器可以让你结合两个负输出面板来产生多个功率值的正输出。最终产品可能非常大,因此请将答案作为数字的字符串表示。

测试用例

输入:     (int list)xs = [2,0,2,2,0] 输出:     (字符串)“8”

输入:     (int list)xs = [-2,-3,4,-5] 输出:     (字符串)“60”

修订代码2

会计单负数&amp;返回字符串

def answer(xs):
    negArr = 0
    product = 1
    for number in xs:
        if number < 0:
            negArr += 1
    xs.sort()
    while 0 in xs: xs.remove(0)
    print(xs)
    if not xs:
        return 0
    if len(xs) == 1:
        if xs[0] < 0:
            return 0
    elif negArr % 2 != 0:
        xs.pop(negArr-1)
    for x in xs:
        product *= x
    return str(product)

2 个答案:

答案 0 :(得分:1)

你不能解决一些边缘案例:

  1. 单个负数[-8]
  2. 0&1;和1个负数[0,0,-8,0]
  3. 0&#39; s [0,0,0]

答案 1 :(得分:0)

这是中奖票:

def answer(xs):
    negArr = 0
    product = 1
    for number in xs:
        if number < 0:
            negArr += 1
    xs.sort()
    if not xs:
        return 0
    if len(xs) == 1:
        return xs[0]
    while 0 in xs: xs.remove(0)
    if negArr % 2 != 0:
        xs.pop(negArr-1)
    for x in xs:
        product *= x
    print(xs)
    if len(xs) == 0:
        return str(0)
    else:
        return str(product)