2016-09-13 39 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