Найти - Пользователи
Полная версия: Реализация стека, где я ошибаюсь ?
Начало » Python для новичков » Реализация стека, где я ошибаюсь ?
1
Anton--1978
Добрый день. Нужно продемонстрировать алгоритм стека.
Общая идея такова, создаем объект ОЧЕРЕДЬ , типа List , в него складываем то что надо, когда надо вытащить, пишем в консоль последний элемент списка и стираем.

Вообщем я написал на Python 2.6 такое

# -*- coding: cp1251 -*-
'''
Created on 12.06.2011

@author: я автор
'''
print "Программа стек"
class stec():
mystec = []
def __init__(self, name):
print "Создан стек" , name
def push(self):
n = raw_input ("Что кладем в стек ? :")
self.mystec.append(n)
def pop(self):
print "Достаем из стека последнее "
self.mystec(-1)
self.mystec.remove(-1)
def seeyuo(self):
print self.mystec()
"""
for i in self.mystec():
print i
"""

numberonestec = stec("Номер один")
numbertwostec = stec("Номер два")
numberonestec.push()
numberonestec.push()
numberonestec.push()
numberonestec.pop()
Начинаю выполнять, а мне пишет

Программа стек
Создан стек Номер один
Создан стек Номер два
Что кладем в стек ? :11111
Что кладем в стек ? :222
Что кладем в стек ? :33
Traceback (most recent call last):
File “C:\Users\Большой Кол\workspace\111111111111\src\Task1\Task1.py”, line 31, in <module>
numberonestec.pop()
File “C:\Users\Большой Кол\workspace\111111111111\src\Task1\Task1.py”, line 17, in pop
self.mystec(-1)
TypeError: ‘list’ object is not callable
Достаем из стека последнее



Вот почему объект list не вызываемый ? Я уже просто потерялся в догадках, почему так ?
Anton--1978
Ну у меня и каша в голове )) Вот как надо. Ghie прощения - закройте вопрос
# -*- coding: cp1251 -*-
'''
Created on 12.06.2011

@author: я автор
'''
print "Программа стек"
class stec():
mystec = []
numberofposition = -1
def __init__(self, name):
print "Создан стек" , name
def push(self):
n = raw_input ("Что кладем в стек ? :")
self.mystec.append(n)
self.numberofposition += 1
def pop(self):
print "Достаем из стека последнее "
print self.mystec[self.numberofposition]
self.mystec.pop(self.numberofposition)
self.numberofposition -=1
def seeyuo(self):
print "Теперь в стеке хранится"
for i in self.mystec : print i


numberonestec = stec("Номер один")
numbertwostec = stec("Номер два")
numberonestec.push()
numberonestec.push()
numberonestec.push()
numberonestec.pop()
numberonestec.seeyuo()
numberonestec.pop()
numberonestec.seeyuo()
numberonestec.pop()
numberonestec.seeyuo()
o7412369815963
доп переменную не обязательно, ошибочную строку надо было заменить на:
print self.mystec[-1]
а ещё лучше:
print self.mystec.pop()
Rodegast
Г. Россум, Ф.Л.Дж. Дрейк, Д.С. Откидач Язык программирования Python:

Методы, определенные для списков, позволяют использовать список в качестве стека, где последний добавленный элемент извлекается первым (LIFO, “last-in, first-out”). Для добавления элемента в стек, используйте метод append(), для извлечения элемента с вершины стека — метод pop() без явного указания индекса:
>>> stack =
>>> stack.append(6)
>>> stack.append(7)
>>> stack

>>> stack.pop()
7
>>> stack

>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
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