Почему моя программа просит меня ввести значение для себя? - PullRequest
1 голос
/ 10 апреля 2019

Я делаю карточную игру на питоне. Я использовал код для класса стека, который нашел в Интернете:

class Stack:

  def __init__(self):
         self.items = []

  def isEmpty(self):
     return self.items == []

  def push(self, item):
     self.items.insert(0,item)

  def pop(self):
     return self.items.pop(0)

  def peek(self):
     return self.items[0]

Когда я запускаю это, все нормально, однако, когда я пытаюсь вызвать любое из поведений, моя программа просит меня передать значение для себя, как если бы это был параметр. Я чувствую, что схожу с ума ...

Когда этот код выполняется:

  Cards = []
  Cards = Stack()
  Cards = Stack.push(15)
  Cards = Stack.peek()
  Cards = Stack.pop()

При запуске 3-й строки отображается эта ошибка:

TypeError: push() missing 1 required positional argument: 'item'

Когда я передаю значение None, как это

Cards = Stack.push(None,15)

У меня осталась другая ошибка:

self.items.insert(0,item)
AttributeError: 'NoneType' object has no attribute 'items'

Ответы [ 2 ]

3 голосов
/ 10 апреля 2019

После объявления Cards экземпляром Stack вам больше не нужно ссылаться на Stack.Просто используйте Cards.

Cards = Stack()
Cards.push(15)
x = Cards.peek()
y = Cards.pop()

Кроме того, первая строка кода Cards = [] бесполезна, так как вы немедленно переназначаете Cards на что-то другое.

2 голосов
/ 10 апреля 2019

Не следует переназначать Cards в каждой строке.Cards - это Stack объект, он должен оставаться неизменным.Он должен использоваться как переменная, с которой вы вызываете все остальные методы.

Cards = Stack()
Cards.push(15)
item = Cards.peek()
item2 = Cards.pop() # item == item2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...