Обнаружение ошибки в добавлении этого рекурсивного списка в python - PullRequest
0 голосов
/ 24 марта 2020

Мне нужно создать программу, которая принимает массив чисел, проверяет, больше ли каждое число, чем сумма всех предыдущих чисел, и выводит 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

Моя программа работает для половины тестовых случаев, но не работает для другого теста. Не могли бы вы помочь мне понять, что я делаю неправильно. Большое спасибо за вашу помощь.

1 Ответ

1 голос
/ 24 марта 2020

В настоящем деле ты слишком рано ломаешься. Только то, что первый элемент проверяет, не означает, что все остальные тоже будут:

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

Только после того, как l oop завершится, не найдя контрпример, вы можете быть уверены, что он справедлив для весь список

Более кратким написанием этого будет:

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...