Форум сайта python.su
Программирую на Python всего лишь второй день.
Хочу реализовать стек с помощью соответвующего класса.
Вот код:
class Stack:
def __init__(self):
self.TopP=0
self.S = list()
def Push(self, x):
self.TopP=self.TopP+1
self.S.append(x)
def Pop(self):
if TopP>0:
c=self.S[TopP]
self.TopP=self.TopP-1
else:
c=int(c)
c=0
return c
def Top():
return self.S[TopP]
def IsEmpty():
return self.TopP==0
St=Stack()
St.Push(x[i])
Traceback (most recent call last):
File "C:\PythonTProg\Stack.py", line 71, in <module>
c=Polish(X)
File "C:\PythonTProg\Stack.py", line 42, in Polish
St.Push(X[i])
TypeError: unbound method Push() must be called with Stack instance as first argument (got str instance instead)
Офлайн
У меня этот код работает. Наверное будет лучше привести и код и вызов как он есть, а не “примерно так”.
Офлайн
половина класса робит:
# coding: utf8
# ...
s = 'hello'
st = Stack()
st.Push(s[1])
print st.S
# ['e']
Отредактировано (Ноя. 19, 2010 20:48:49)
Офлайн
Soteric
def Polish(X):
St=Stack
for i in range(0,len(X)):
if (X[i]>='0')or(X[i]<='9'):
St.Push(X[i])
elif X[i]=='+':
a=St.Pop()
b=St.Pop()
St.Push(int(a)+int(b))
elif X[i]=='-':
a=St.Pop()
b=St.Pop()
St.Push(int(a)-int(b))
elif X[i]=='*':
a=St.Pop()
b=St.Pop()
St.Push(int(a)*int(b))
return St.Top
Офлайн
St=Stack
Stack()
Офлайн
SotericСпасибо.
Отредактировано (Ноя. 20, 2010 11:28:57)
Офлайн
Советую почитать Style Guide, чтобы со второго же дня отучаться писать названия функций/переменных капсом.
Отредактировано (Ноя. 20, 2010 12:01:23)
Офлайн
Brauny74А чем не устраивает list?
Хочу реализовать стек с помощью соответвующего класса.
>>> a = []
>>> a.append(1)
>>> a.append(2)
>>> a.pop()
2
>>> a.pop()
1
Офлайн
Это для демонстрации синтаксиса определения класса в Python. Выбрал структуру с не очень сложной реализацией.
Офлайн