Оценить выражение в скобках - PullRequest
0 голосов
/ 18 ноября 2018

Меня попросили определить функцию, которая принимает список следующего формата:

  • [2, "+", 5], 3, 5]

и возвращает список с оцененным выражением, таким как это

  • [7, 3, 5]

Это мой код:

def evalExpr(lst):
    """
    parameters : lst of type lst:
    returns : evaluation of the expression inside brackets;
    """
    for i in lst:
        if len(lst[i]) == 3:
            for j in lst[i]:
                if lst[i][j]== "+":
                    lst[i] = lst[i][j-1] + lst[i][j+1]
    return lst

print(evalExpr([[2, "+", 5], 3, 5]))

И это ошибка, которую я получаю:

<ipython-input-1-5c5345233e02> in evalExpr(lst)
      5     """
      6     for i in lst:
----> 7         if len(lst[i]) == 3:
      8             for j in lst[i]:
      9                 if lst[i][j]== "+":

TypeError: list indices must be integers or slices, not list

Что я должен сделать, чтобы получить правильный вывод?

1 Ответ

0 голосов
/ 18 ноября 2018

Когда я запускаю ваш код, я получаю исключение:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-1d51996f7143> in <module>
----> 1 evalExpr([[2, "+", 5], 3, 5])

<ipython-input-1-5c5345233e02> in evalExpr(lst)
      5     """
      6     for i in lst:
----> 7         if len(lst[i]) == 3:
      8             for j in lst[i]:
      9                 if lst[i][j]== "+":

TypeError: list indices must be integers or slices, not list

Выделенная строка показывает, что i не является целым числом (это, вероятно, объект списка), и вы пытаетесь использовать его в качестве индекса. Если вам нужны индексы, которые вы должны использовать в цикле for, функция Python enumerate. Тогда вы сможете одновременно работать с индексами, а также с текущим значением.

Вот пример того, как вы можете использовать эту полезную функцию Python:

def evalExpr(lst):
    """
    parameters : lst of type lst:
    returns : evaluation of the expression inside brackets;
    """
    for i, e in enumerate(lst): # i is the index and e the actual element in the iteration
        if isinstance(e, list) and len(e) == 3:
            lst[i] = eval(str(lst[i][0]) + lst[i][1] + str(lst[i][2]))
    return lst

new_list = evalExpr([[2, "+", 5], 3, 5, [2,'*', 4], [2,'**', 4]])

print(new_list)

Если вы выполните этот код, вы увидите этот результат на консоли:

[7, 3, 5, 8, 16]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...