Нужна помощь в устранении неверных подсчетов
Мой Python код работает, но работает некорректно. Я выяснил, в каком месте, сейчас попытаюсь все изложить. Код:
def score(arr):
line = 0
total = 0
level = 0
for i in arr:
line += i
if line > 10:
level += 1
line = 0
if i == 0:
total += 0
print(total)
elif i == 1:
total += (40 * (level + 1))
print(total)
elif i == 2:
total += (100 * (level + 1))
print(total)
elif i == 3:
total += (300 * (level + 1))
print(total)
elif i == 4:
total += (1200 * (level + 1))
print(total)
Задача этого кода: подсчет очков. На вход массив с любым кол-вом элементов 0~4. Затем идет 'пробежка' по всем элементам массива, это все можно понять в коде. Вся проблема в переменных line и level. Я покажу. Есть массив:
[2, 1, 0, 2, 1, 3, 0, 4]
Если применить функцию к этому массиву, то результатом должно будет быть число 1780, но у меня вышло число 2980. Вот мой вывод:
100
140
140
240
280
580
580
2980
Как мы видим, все, что после цифры 4 имеет level равный 1, следовательно, цифра 4 приносит 2400 очков, но мне надо, чтобы цифра 4 приносила по прежнему 1200 очков, потому что сумма всех элементов этого массива ([2, 1, 0, 2, 1, 3, 0, 4]) БЕЗ последней цифры 4 равна 9, а согласно условию переменная level повышается на 1 ТОЛЬКО когда line больше 10, а на данный момент line равна 9, следовательно кол-во очков, которые приносит цифра 4 умножается на 1, а не на 2:
elif i == 4:
total += (1200 * (level + 1)) # 1200 * 1 (Не на 2, т.к. line = 9, а уровень повышается только тогда, когда line > 10, следовательно, на данный момент level = 0)
Значение переменной line и level повышается сразу же, как только прибавляется цифра 4, но мне надо, чтобы как только прибавилась цифра 4, значение level по прежнему оставалось 0.
Мне нужна Ваша помощь, может, порекомендуете полезные модули для решения этой проблемы, а если Вы собрались написать решение моей проблемы, то пожалуйста, пишите с объяснением. Спасибо!
Если Вы что-то не поняли, то напишите, пожалуйста. Я объяснил, как смог...
Ответы (1 шт):
сумма всех элементов этого массива ([2, 1, 0, 2, 1, 3, 0, 4]) БЕЗ последней цифры 4 равна 9, а согласно условию переменная level повышается на 1 ТОЛЬКО когда line больше 10, а на данный момент line равна 9,
Когда мы проходим по последнему элементу - четверке:
for i in arr:
line += i // 9 += 4 и вот здесь line уже будет равен 13
if line > 10: // соотв. этот if выполнится и level будет равен 1
level += 1
line = 0
Как решение, складывайте цифры в конце цикла, а не в самом начале