在python中此递归列表添加中发现错误

问题描述 投票:0回答:1

我需要创建一个包含数字数组的程序,检查每个数字是否大于所有先前数字的总和,如果满足条件,则输出true,否则输出false。我的审判如下:

import fileinput
a0 = [int(i) for i in fileinput.input()]
a = a0[1:]
b=[]
for i in range(1, a0[0]+1):
  b.append(a[i])
  if (a[i+1] > sum(b)):
    print("true")
    break
  else:
    print ("false")
    break

我的程序可用于一半的测试用例,但不能用于其他测试。你能帮我弄清楚我做错了什么吗?非常感谢您的协助。

python list testing recursion addition
1个回答
1
投票

在真实情况下,您为时过早。仅因为第一个元素检查,并不意味着所有其他元素也将检查:

for i in range(1, a0[0]+1):
    b.append(a[i])
    if (a[i+1] <= sum(b)):
        print ("false")
        break
else:  # for-else: else is executed only if loop isn't `break`ed out of
    print("true")

仅在循环结束后没有找到反例,您才能确保它对整个列表都适用。

更简洁的写法是:

import fileinput

_, *a = (int(i) for i in fileinput.input())
s = 0  # just keep track of total 
for num in a:
    if (num <= s):
        print("false")
        break
    s += num
else:
    print("true")
© www.soinside.com 2019 - 2024. All rights reserved.