Я попытался изменить интервал во всем файле, чтобы каждый отступ состоял из 4 пробелов, а не табуляции, но я все равно получаю недопустимую синтаксическую ошибку в инструкции else в push (). В случае необходимости я использую возвышенный текст 3 для разработки. Любые предложения будут оценены, спасибо.
from Stack import Stack
class stackOfPlates:
cap = 4
def _init_(self):
self.plates = []
def isEmpty(self):
return self.plates == []
def push(self, item):
p = Stack()
if ((self.isEmpty()) or (self.plates[len(self.plates)-1].size() == cap)):
p.push(item)
self.plates.append(p)
else:
self.plates[len(self.plates)-1].push(item)
def pop(self):
temp = self.plates[len(self.plates)-1].pop()
if (self.plates[len(self.plates)-1].isEmpty()): self.plates.pop()
return temp
def peek(self):
return self.plates[len(self.plates)-1].peek()
def size(self):
return len(self.plates)
Спасибо @OdatNurd, что решил мою проблему, должно быть, что-то мне не хватало.
Я копирую и вставляю этот код, и у меня нет синтаксической ошибки, может быть, в вашем источнике есть скрытый символ? попробовать открыть в vim?
вкладки и четыре пробела взаимозаменяемы, любой из них работает, просто убедитесь, что вы сохраняете его согласованность во всей программе
Возможный дубликат Что делать с «неожиданным отступом» в Python?
Кажется, для меня компилируется нормально; поскольку вы используете Sublime, я предлагаю щелкнуть строку состояния, где написано Spaces: 4, и выбрать опцию Convert indentation to Spaces.
@chepner, я думаю, он пытается вручную реализовать мультистек, в котором каждый стек компонентов имеет максимальный размер (cap). Ожидается, что класс предоставит требуемую абстракцию - это может быть популярный вопрос на собеседовании Cracking the Coding Interview.
Для меня тоже нет ошибок.
Поскольку вы решили свою проблему после преобразования отступов в пробелы, похоже, что у вас были смешанные пробелы и вкладки. В Sublime Text вы можете легко обнаружить это, выделив весь код и наблюдая, есть ли в отступе 4 точки (т.е. 4 пробела) или сплошная линия (например, табуляция).
Магический метод класса init использует только один _, тогда как их должно быть два. Итак, _init_ должен быть __init__
@MustacheMoses большое спасибо, я получил сообщение об ошибке после исправления проблемы с отступом, и это, в дополнение к перемещению емкости в конструктор, исправило это для меня






Почему вы выделяете новый стек каждый раз, когда вызываете
push? (И почему вы вообще определяетеstackOfPlates, а не просто используетеStack.Stack? Кажется, вы реализуете стек стеков.