#python #list #for-loop #if-statement #control-flow
#python #Список #для цикла #if-оператор #поток управления
Вопрос:
Учитывая список, верните сумму всех чисел в списке. Однако, если в списке появляется число 5, вы должны удвоить его, а число, которое сразу же появляется после 5, должно быть увеличено в четыре раза. Итак, следующий список [1, 2, 4, 1, 5, 2] должно вернуться 26, а [5, 1, 6] должно вернуть 20.
Это то, что у меня есть до сих пор:
def list_sum(x):
if len(x) == 0:
return 0
else:
sum2 = 0
for i in x:
if i == 5:
sum2 = 5*2
if x[i - 1] == 5:
sum2 = i * 4
else:
sum2 = i
return sum2
Я могу успешно выполнить первую часть задачи, в которой я умножаю любые 5 в списке на 2, но возникают проблемы со второй частью, где я должен попросить код увеличить число, которое идет после 5, в четыре раза. Я думал x[i - 1] == 5
, что в основном будет индексироваться элемент, который идет после 5, но после опробования нескольких операторов печати мне стало известно, что эта строка кода на самом деле ничего не делает… Итак, какие-нибудь советы?
Краткое примечание: для решения этой проблемы используются только циклы и операторы if
Комментарии:
1.
if x[i - 1] == 5:
это неправильно, вы перебираете элементы своего списка, а не индексы2. Вы проводили какую-либо отладку? Я бы рекомендовал прочитать ericlippert.com/2014/03/05/how-to-debug-small-programs .
3. Что делать, если в строке два
5
s? Что должно[1, 5, 5]
вернуться?51
?4. Вы пытались использовать отдельную переменную, чтобы запомнить, было ли предыдущее значение 5? Когда вы увидите 5, установите его так, чтобы вы могли проверить его на следующей итерации.
Ответ №1:
Попробуйте так (вместо этого выполните итерацию по диапазону длины входного списка:
mylist = [1, 2, 4, 1, 5, 2]
def list_sum(thelist):
sum2 = 0
for x in range(len(thelist)):
if thelist[x] == 5:
sum2 = 5*2
elif thelist[x-1] == 5:
sum2 = thelist[x]*4
else:
sum2 = thelist[x]
return sum2
print(list_sum(mylist))
Комментарии:
1. Я бы ожидал
mylist = [1, 5]
, что результат11
будет. Или я что-то упускаю?2. @MarkMeyer Я тоже это понимаю. При публикации я тестировал с примерами OP, и они работали. У вас есть какие-либо идеи в этом случае?
3. @Wasif Hasan Я отредактировал вашу
elif
строкуelif thelist[x-1] == 5 and not thelist[-1] == 5:
, и это устранило проблему. Итак, раньше, если 5 был последним элементом в списке, код будет считатьthelist[x-1]
, что это первый элемент списка, и он будет увеличен в четыре раза
Ответ №2:
Определите переменную и измените ее при появлении 5
def list_sum(x):
IfFive = False
if len(x) == 0:
return 0
else:
sum2 = 0
for i in x:
if i == 5:
sum2 = 5*2
IfFive = True
elif IfFive:
sum2 = i * 4
IfFive = False
else:
sum2 = i
return sum2
Результат:
print(list_sum([5, 1, 6]))
>>> 20