Найти - Пользователи
Полная версия: Реализация стека
Начало » Python для новичков » Реализация стека
1
Brauny74
Программирую на 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
В коде программы вызываю метод Push, примерно так (X = строковая переменная):
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)
Такое чувство, что я где-то протупил. Объясните, где?
Soteric
У меня этот код работает. Наверное будет лучше привести и код и вызов как он есть, а не “примерно так”.
o7412369815963
половина класса робит:
# coding: utf8

# ...

s = 'hello'
st = Stack()
st.Push(s[1])

print st.S
# ['e']
Brauny74
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
Вот, вы просили. Да, расчёт в польской записи.
Soteric
St=Stack
В конце не хватает скобок
Stack()
поэтому переменная St в данном случае выступает не объектом класса Stack, а ссылкой на сам класс. Соответственно попытка St.Push() воспринимается здесь как попытка вызвать метод класса (classmethod), который не помечен таковым.
Brauny74
Soteric
Спасибо.
fata1ex
Советую почитать Style Guide, чтобы со второго же дня отучаться писать названия функций/переменных капсом.
ZAN
Brauny74
Хочу реализовать стек с помощью соответвующего класса.
А чем не устраивает list?
>>> a = []
>>> a.append(1)
>>> a.append(2)
>>> a.pop()
2
>>> a.pop()
1
Brauny74
Это для демонстрации синтаксиса определения класса в Python. Выбрал структуру с не очень сложной реализацией.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB