Страницы

Поиск по вопросам

понедельник, 3 февраля 2020 г.

Цикл while «Сумма последовательности чисел»

#python #python_3x


Здравствуйте. 
Начал изучать питон, иногда нападают жуткие тупняки. Ряд задач с этим циклом, вроде,
решен и понятен, тут не могу никак понять, как формулировать решение.
Определите сумму всех элементов последовательности, завершающейся числом 0. В этой
и во всех следующих задачах числа, следующие за первым нулем, учитывать не нужно.
def по этому курсу еще не было, не знаю, что это. Т.е. задачу нужно решить, исходя
из того, что материал был по
Занятие 1. Ввод-вывод, арифметические операции
Занятие 2. Условная инструкция
Занятие 3. Операции с целыми и вещественными числами
Занятие 4. Цикл for
Занятие 5. Строки
Занятие 6. Цикл while
Вот просто чего не понял.
i = 0
while int(input()) > 0:
    i += int(input())
print(i)

Но в этом случае суммируются элементы без первого, т.е. в том порядке, как входят,
если делаю
i = 0
a = 0
while int(input()) >0:
    i += 1 
for j in range(0:a):
    a += int(input())
print(a)

то говорит, что закончились числа для ввода. Т.е. в целом я понимаю, что вообще что-то
не то делаю.    


Ответы

Ответ 1



Ошибка в том, что функция input() вызывается в двух местах, нужно вызывать её только в одном месте и использовать одно и то же возвращаемое значение как для проверки на ноль, так и для суммирования: total = 0 # общая сумма while True: # бесконечный цикл n = int(input()) # каждая строка содержит целое число if n == 0: # нашли нуль break # выходим из цикла total += n # суммируем print(total) # печатаем результат Код предполагает, что каждая последовательность завершается нулём. В противном случае нужно ловить EOFError исключение и обрабатывать возвращаемую пустую строку. Чтобы самостоятельно найти ошибку в своём коде, в таких простых случаях, полезно выписать словами, что код делает строчка за строчкой (отладка методом утёнка). Другие способы выразить то же самое для тестов (и для улучшения понимания задачи людьми, которые уже знают Питон, не для прямого использования): import sys from itertools import takewhile print(sum(takewhile(lambda n: n != 0, map(int, sys.stdin)))) Не нулевые целые числа являются истиной в булевом контексте в Питоне, поэтому вместо lambda n: n != 0 можно использовать просто bool (менее читаемый (явный) вариант). Или даже (если каждая строчка содержит только числа, без пробелов): print(sum(map(int, iter(input, '0'))))

Ответ 2



Как-то так (проверял только глазами, вроде все правильно, в любом случае главное - принцип): def sum0(lst): if 0 in lst: return sum(lst[:lst.index(0)]) else: return sum(lst)

Ответ 3



Ну, насколько я понимаю, проходить в цикле элементы, суммируя их, пока значение элемента не будет 0. Если 0 - покидаем цикл.

Комментариев нет:

Отправить комментарий