• 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

Object Storage Arubacloud
0 głosów
212 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ź 124 wizyt
pytanie zadane 13 września 2018 w JavaScript przez Bakr Mądrala (6,850 p.)
0 głosów
1 odpowiedź 422 wizyt
pytanie zadane 12 kwietnia 2019 w Java przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
2 odpowiedzi 184 wizyt
pytanie zadane 10 czerwca 2018 w Java przez fallensmoke Nowicjusz (210 p.)

92,619 zapytań

141,468 odpowiedzi

319,786 komentarzy

62,001 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...