python3 Переменная NameError не определена - PullRequest
0 голосов
/ 29 марта 2020

Я получаю ошибку ниже name i is not defined at line i += 1 Я попытался поставить на уровне решения класса. Получение той же ошибки

class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        i = 0
        def inOrder(root):
            global i
            if root == None:
                return
            inOrder(root.left)
            i += 1
            if i == k:
                return
            inOrder(root.right)

        inOrder(root)
        return i

Ответы [ 2 ]

1 голос
/ 29 марта 2020

Глобального i нет. Требуемая переменная находится в нелокальной ограждающей области.

class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        i = 0
        def inOrder(root):
            <b>nonlocal</b> i
            if root == None:
                return
            inOrder(root.left)
            i += 1
            if i == k:
                return
            inOrder(root.right)

        inOrder(root)
        return i
0 голосов
/ 29 марта 2020

Области применения kthSmallest и inOrder различны. Без указания i в качестве глобальной переменной в kthSmallest, i не будет известно внутри inOrder.

Области охвата вложенных функций

Для вложенных функций вам также необходимо объявить вашу глобальную переменную в области действия родительской функции.

    class Solution:

        def kthSmallest(self, root: TreeNode, k: int) -> int:
            global i
            i = 0

            def inOrder(root):
                global i
                if root is None:
                    return
                inOrder(root.left)
                i += 1
                if i == k:
                    return
                inOrder(root.right)

            inOrder(root)
            return i

Замечание 1

Похоже, вы используете класс в своем примере. Вы могли бы также сделать следующее:

    class Solution:
        self.i = 0
        def kthSmallest(self, root: TreeNode, k: int) -> int:
            self.i = 0 

            def inOrder(root):
                if root is None:
                    return
                inOrder(root.left)
                self.i += 1
                if self.i == k:
                    return
                inOrder(root.right)

            inOrder(root)
            return i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...