Внесены изменения в ваш код, чтобы он работал.
Поместил 'Мод' в местах, где я изменил код.
Код
import numpy as np
class WrongStack:
def __init__(self):
self.__items = np.array([])
def push(self, item):
# Mod--concatenate takes list contains items to concatenate
self.__items = np.concatenate([self.__items,item])
def pop(self):
# Mod--np.delete returns a new array
# also retrieve last element before delete
last = self.__items[-1]
self.__items = np.delete(self.__items,-1, 0)
return last
def peek(self):
return self.__items[len(self.__list) - 1]
def is_empty(self):
# Mod--use function size
return self.size() == 0
def size(self):
return len(self.__items)
def __str__(self):
# Mod--added for display the array
return str(self.__items)
s = WrongStack()
number = input('Choose a number, 0 to finish: ')
while len(number) > 0 and number != '0': #Mod done if no input or '0' entered
# Mod--convert numer to integer
s.push(np.array([number], dtype=np.int32)) # specify type (i.e. int32)
number = input('Choose a number, 0 to finish: ')
# Mod--print array created
print('Array created:', s)
while not s.is_empty():
number = s.pop()
print('number: ', number)
Тест
Choose a number, 0 to finish: 1
Choose a number, 0 to finish: 2
Choose a number, 0 to finish: 3
Choose a number, 0 to finish: 4
Choose a number, 0 to finish: 5
Choose a number, 0 to finish: 0
Array created: [1. 2. 3. 4. 5.]
number: 5.0
number: 4.0
number: 3.0
number: 2.0
number: 1.0
Альтернатива
Используется массив Numpy с фиксированным размером. Использует ломтики и проверку диапазона, чтобы убедиться, что мы остаемся в пределах выделенного размера.
import numpy as np
class WrongStack:
def __init__(self, maxlen=100):
self.__items = np.array([0]*maxlen) # Fixed size Numpy array
self._count = 0
self._maxlen = maxlen
def push(self, item):
# Mod--concatenate takes list contains items to concatenate
if self._count < self._maxlen:
self.__items[self._count] = item
self._count += 1
else:
print('push: no more space')
def pop(self):
# Mod--np.delete returns a new array
# also retrieve last element before delete
if self._count > 0:
last = self.__items[self._count-1]
self._count -= 1
return last
else:
return None
def peek(self):
if self._count > 0:
return self.__items[self._count-1]
else:
return None
def is_empty(self):
# Mod--use function size
return self.size() == 0
def size(self):
return self._count
def __str__(self):
# Mod--added for display the array
return str(self.__items[:self._count])
s = WrongStack(10) # will handle stack with up to 10 elements
number = input('Choose a number, 0 to finish: ')
while len(number) > 0 and number != '0': #Mod done if no input or '0' entered
# Mod--convert numer to integer
s.push(number) # specify type (i.e. int32)
number = input('Choose a number, 0 to finish: ')
# Mod--print array created
print('Array created:', s)
while not s.is_empty():
number = s.pop()
print('number: ', number)