2016-09-13 41 views
0

我正在学习python,并有一个任务,以更好地理解“class”并使用“stack”。Python堆栈没有使用弹出功能

的要求如下:

- 定义这对于数值实现堆栈的类。

-Cannot使用内置弹出功能

- 功能推应该检查是否值数值

- 功能print_stack应该在栈打印值,最近(顶部)第一

- 功能的IsEmpty应该返回true,如果堆栈是空的,否则为false

这里是我的工作至今:

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

    def push(self, item): 
     self.items.append(item) 

    def isEmpty(self): 
     return (self.items == []) #can also use return not self i think? 

    def print_stack(self): 
     print self.items 

这是我编程的第一堂课,所以如果我的理解很差,我很抱歉。我不想找任何人直接为我写这篇文章。我真的很想理解如何去做这件事,并且得到一些关于我需要做什么的指示,以及我不了解它是否明显。

我的问题如下:

1)我如何测试,如果我推的数值?首先想到,我可以使用try/except吗?

2)什么是最好的方式去创建一个弹出功能,而不使用内置的?这真的让我很难过。从我的理解,我需要写一些东西,将检索列表中的最后一项并返回它。

3)测试我的代码我会做这样的事情吗?

test = stack() 
test.push(1) 
test.print_stack() 
test.pop() #whenever I learn how to make a pop function 
test.isEmpty 

回答

1

我该如何测试如果我推数值?首先想到,我可以使用try/except吗?

你不需要测试它。只需将其转换为int或您正在处理的任何数据类型即可。例如, 如果您正在使用int

def push(self, item): 
    self.items.append(int(item)) 

工作,如果你是float

def push(self, item): 
    self.items.append(float(item)) 

工作,如果你是string

def push(self, item): 
    self.items.append(str(item)) 


什么是最好的方式去工作关于不使用usin创建pop函数g内置的那个?这真的让我很难过。从我的理解,我需要写一些东西,将检索列表中的最后一项并返回它。

有多种方式,

  1. 使用del

    def pop(self): 
        n = self.items[0] 
        del self.items[0] 
        return n 
    
  2. 使用切片

    def pop(self): 
        n = self.items[0] 
        self.items = self.items[1:] 
        return n 
    

    注意,这将返回原来的一个子集,但不能修改它。

  3. 使用popleft()

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

一个建议 您还可以使用len()检查列表的长度,并用它来检查堆栈是否为空,

def isEmpty(self): 
    return (len(self.items) == 0) 

注意:在弹出之前使用你的isEmpty()函数来检查堆栈是否为空。


测试我的代码我会做这样的事情吗?

只是尝试执行每个功能,如果您认为有问题,那么每次操作后都要打印堆栈。你会看到堆栈中的值是如何更新的。

+1

如果它回答您的问题,请接受并提出答案... – Ani

+0

由于某种原因,我忘记了upvote并接受它。对不起@Ani – DudeWah

+0

我很高兴我能回答你的问题:) – Ani