• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Parsowanie równania ze stringa i operacja na drzewie binarnym

VPS Starter Arubacloud
0 głosów
228 wizyt
pytanie zadane 16 grudnia 2015 w Python przez Igor Adam Andrejew Nowicjusz (120 p.)

 



Witam,

jestem świeży na forum . Chciałbym zadać Wam pytanie(nie znalazłem odpowiedzi tutaj, na innych forach, ani u kolegów z grupy): Co jest nie tak z moim kodem i dlaczego nie mogę wyświetlić preorderem drzewa, ani dokonać obliczeń?

 

class BinaryTree:
    def __init__(self):
        self.root = None
    def preorder_walk(self, node = None):
        def walk(node):
            if node is not None:
                print node.key
                walk(node.left)
                walk(node.right)
        if node is None:
            walk(self.root)
        else:
            walk(node)
    def operacja(self, node):
        if(node.key == '+'):
            return self.operacja(node.left) + self.operacja(node.right)
        if(node.key == '-'):
            return self.operacja(node.left) - self.operacja(node.right)
        if(node.key == '*'):
            return self.operacja(node.left) * self.operacja(node.right)
        if(node.key == '/'):
            return self.operacja(node.left) / self.operacja(node.right)
        else:
            return node.key
class Node:
    def __init__(self, key):
        self.key = key
        self.parent = None
        self.left = None
        self.right = None
#Metoda dodaje nowe elementy do drzewa
def Mutuj(left, right):
    wezel = Node('+')
    wezel.Left = left
    wezel.Right = right
    return wezel
#Metoda czyta rownanie ze stringa do drzewa
def Parse(str):
    try:
        value = int(str)
        return Node(value)
    except:
        idx = str.find('+')
        left = str[:idx]
        right = str[idx+1:]
        potomek_l = Parse(left)
        potomek_p = Parse(right)
        return Mutuj(potomek_l, potomek_p)

BT = BinaryTree()
BT.drzewo = (Parse("123+5+7"))

print BT.drzewo.operacja()
# W tym momencie dostaje błąd o treści: AttributeError: Node instance has no attribute 'operacja'

1 odpowiedź

0 głosów
odpowiedź 26 stycznia 2016 przez Marcinx Nowicjusz (140 p.)
Hej,

BT.drzewo jest instancją klasy Node, utworzoną poprzez funkcję Parse.

BT.drzewo to zupełnie nowa zmienna, nie mająca nic wspólnego z instancją BT.

Pozdrawiam.

Podobne pytania

0 głosów
1 odpowiedź 128 wizyt
pytanie zadane 13 września 2018 w JavaScript przez Bakr Mądrala (6,850 p.)
0 głosów
1 odpowiedź 457 wizyt
pytanie zadane 12 kwietnia 2019 w Java przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
2 odpowiedzi 209 wizyt
pytanie zadane 10 czerwca 2018 w Java przez fallensmoke Nowicjusz (210 p.)

92,973 zapytań

141,937 odpowiedzi

321,172 komentarzy

62,301 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...