Просто напоследок, это не домашняя работа, это из прошлой статьи, которую я пытаюсь сделать, но у нас нет никаких ссылок на то, как «на самом деле» это сделать.
Нам была дана задача реализовать '+' вместе с 'Const' как набор классов, с идеей выяснить, следует ли заключать скобки вокруг выражения или нет - например:
EG1. Плюс (Плюс (Const (3), Const (4)), Const (5)) должен печатать 3 + 4 + 5
ЭГ2. Плюс (Const (3), Plus (Const (4), Const (5))) должен печатать 3 + (4 + 5)
Итак, я пришел к выводу, что мне нужно что-то в моем str методе, который проверяет, есть ли более одного «значения» в моем self.l или self.r, и если да, то печатать скобки вокруг self.l или self.r соответственно. Я полагаю, что это так, потому что в eg2 есть «плюс», который применяется к более чем одной константе. Пожалуйста, поправьте меня, если я ошибаюсь.
Я не ищу кого-то, чтобы дать мне ответ на этот вопрос, но скорее намек на то, с чего начать. Недавно я начал программировать, и мне трудно понять, как реализовать то, что я хочу сделать.
class Expr :
pass
class Plus(Expr) :
def __init__(self,l,r) :
self.l = l
self.r = r
def __str__(self):
return str(self.l)+ "+" +str(self.r) #I believe here is where I need to implement.
class Const(Expr) :
def __init__(self,v) :
self.v = v
def __str__(self):
return str(self.v)
Любая помощь будет принята с благодарностью.
Мой лектор дал ответ, но меня немного смутило значение «номинал» - может ли кто-нибудь помочь мне понять, почему значения bool используются для дифференциации?
class Expr :
def __str__(self) :
return self.str_aux(False)
class Plus(Expr) :
def str_aux(self,par) :
s =self.l.str_aux(False)+"+"+self.r.str_aux(True)
if par :
return "("+s+")"
else :
return s
class Const(Expr) :
def __init__(self,v) :
self.v = v
def str_aux(self,par) :
return str(self.v)