Форум программистов, компьютерный форум CyberForum.ru

Объяснить ошибку - Python

Восстановить пароль Регистрация
 
dencil
10 / 10 / 12
Регистрация: 23.09.2013
Сообщений: 145
02.11.2016, 22:37     Объяснить ошибку #1
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def Evaltree(tree):
        if(tree.getRoot() not in ['*','+','-','/']):
            return tree.getRoot()
        else:
            currentTree=tree
            stack=currentTree
            while(currentTree.left.getRoot() in ['*','+','-','/']):
                currentTree=currentTree.left
            a=currentTree.left.getRoot()
            b=currentTree.right.getRoot()
            if(b in ['*','+','-','/']):
                Evaltree(currentTree.right)
            a=int(a)+int(b)
            currentTree.setRoot(a)
            currentTree.left.setRoot(None)
            currentTree.right.setRoot(None)
            Evaltree(stack)
Объясните пожалуйста, почему в последней строке выдается ошибка "NameError: name 'Evaltree' is not defined", а на 12 строчку не ругается.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2016, 22:37     Объяснить ошибку
Посмотрите здесь:

Объяснить ошибку в программе 20wmr Delphi
Turbo Pascal дана программа нужно найти и объяснить ошибку...
по моему ошибка в типе, не знаю как нормально объяснить ошибку Delphi
Исправить ошибку в приведенном коде и объяснить ее происхождение Java SE
С# исправить ошибку и объяснить алгоритм нахождения седловых точек C#
Нужно объяснить ошибку C++
Pascal ABC Найти ошибку в коде и объяснить природу ее возникновения
При установке numpy через pip выдаёт ошибку Python
C++ Отладить программу в VS 2012 (объяснить ошибку в примере из книжки)
не мог бы кто нибудь объяснить ошибку с темплейтами C++
Кто может объяснить ошибку? C#
Включение заголовочного файла с классом, определяемым пользователем(объяснить ошибку в программе) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vrm2
109 / 87 / 15
Регистрация: 03.12.2015
Сообщений: 132
Завершенные тесты: 1
03.11.2016, 00:13     Объяснить ошибку #2
Что-то не воспроизводится ошибка. Есть пример вызова данной функции, которая приводит к ошибке?
dencil
10 / 10 / 12
Регистрация: 23.09.2013
Сообщений: 145
03.11.2016, 10:36  [ТС]     Объяснить ошибку #3
vrm2, вызываю из другого файла
Python
1
2
3
4
5
import BinaryTreeLib
 
BTL=BinaryTreeLib
t=BTL.BinaryTree.buildTree("( ( ( 1 + 2 ) + ( 3 + 4 ) ) + ( 5 + 6 ) )")
BTL.BinaryTree.Evaltree(t)
vrm2
109 / 87 / 15
Регистрация: 03.12.2015
Сообщений: 132
Завершенные тесты: 1
03.11.2016, 16:24     Объяснить ошибку #4
Похоже, что Evaltree это метод в классе BinaryTree. Поэтому его надо пометить как @staticmethod и вызывать как BinaryTree.Evaltree(), а не просто как Evaltree()

Т.е. как-то так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@staticmethod # исправлено
def Evaltree(tree):
        if(tree.getRoot() not in ['*','+','-','/']):
            return tree.getRoot()
        else:
            currentTree=tree
            stack=currentTree
            while(currentTree.left.getRoot() in ['*','+','-','/']):
                currentTree=currentTree.left
            a=currentTree.left.getRoot()
            b=currentTree.right.getRoot()
            if(b in ['*','+','-','/']):
                BinaryTree.Evaltree(currentTree.right) # исправлено
            a=int(a)+int(b)
            currentTree.setRoot(a)
            currentTree.left.setRoot(None)
            currentTree.right.setRoot(None)
            BinaryTree.Evaltree(stack) # исправлено
Yandex
Объявления
03.11.2016, 16:24     Объяснить ошибку
Ответ Создать тему
Опции темы

Текущее время: 05:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru