Программа курса:
Разбор задачи: Бейсбольный матч
Предложенный нами код решения:
def calPoints(operations):
"""
:param operations: Список строк, представляющих операции.
:return: Сумма всех очков, записанных в записи после выполнения всех операций.
"""
record = []
for op in operations:
if op == '+':
if len(record) >= 2:
record.append(record[-1] + record[-2])
elif op == 'D':
if record:
record.append(2 * record[-1])
elif op == 'C':
if record:
record.pop()
else:
record.append(int(op))
return sum(record)
Пошаговый разбор
Инициализация записи:
record = []Создаётся пустой список
record, который будет содержать результаты всех операций.Перебор операций:
for op in operations:Для каждой операции из списка
operationsвыполняется одно из следующих действий в зависимости от значенияop.Операция
'+':if op == '+': if len(record) >= 2: record.append(record[-1] + record[-2])- Проверяется, что в списке
recordесть хотя бы два последних значения. - Если условие выполнено, добавляется сумма двух последних значений записи.
- Проверяется, что в списке
Операция
'D':elif op == 'D': if record: record.append(2 * record[-1])- Проверяется, что в списке
recordесть хотя бы одно значение. - Если условие выполнено, добавляется удвоенное значение последнего элемента записи.
- Проверяется, что в списке
Операция
'C':elif op == 'C': if record: record.pop()- Проверяется, что список
recordне пустой. - Если условие выполнено, удаляется последнее значение из записи.
- Проверяется, что список
Обычное число:
else: record.append(int(op))- Если операция не является
'+','D', или'C', то она интерпретируется как число. - Это число преобразуется в целое и добавляется в список
record.
- Если операция не является
Вычисление результата:
return sum(record)- После выполнения всех операций возвращается сумма всех элементов в списке
record.
- После выполнения всех операций возвращается сумма всех элементов в списке
Пример выполнения
Вход:
operations = ["5", "2", "C", "D", "+"]
Шаги выполнения:
op = "5"- Число
5добавляется в запись:record = [5].
- Число
op = "2"- Число
2добавляется в запись:record = [5, 2].
- Число
op = "C"- Последнее значение удаляется:
record = [5].
- Последнее значение удаляется:
op = "D"- Удвоенное значение последнего элемента (
5 * 2 = 10) добавляется:record = [5, 10].
- Удвоенное значение последнего элемента (
op = "+"- Сумма двух последних элементов (
5 + 10 = 15) добавляется:record = [5, 10, 15].
- Сумма двух последних элементов (
Итоговая запись: [5, 10, 15]
Результат: sum(record) = 5 + 10 + 15 = 30
xsnm
,ops = ["5", "2", "k", "C", "D", "+"]
ValueError: invalid literal for int() with base 10: 'k'