mko77
mko77

Reputation: 25

Finding fault in this recursive list addition in python

I need to create a program that takes in an array of numbers, check if each number is greater than the sum of all previous numbers, and output true if the condition is met, and false, if not. My trial is presented below:

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

My program works for half of the test cases but fails for the other test. Could you please help me figure out what i am doing wrongly. Many thanks for your assistance.

Upvotes: 0

Views: 32

Answers (1)

user2390182
user2390182

Reputation: 73460

You are breaking too early in the true case. Only because the first element checks, doesn't mean all others will, too:

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

Only once the loop has finished without finding a counter example, you can be sure that it holds for the entire list.

A more concise of writing this, would be:

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

Upvotes: 1

Related Questions