2015-01-31 63 views
-1

所以我創建了一個簡單的類方法來反轉一個字符串,但它返回給我的原始?我創建的方法在類之外工作,但由於某種原因,我沒有嘗試實現它。反向類方法不工作

見下面我的代碼:

class Stack: 

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

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

    def pop(self): 
     return self.__items.pop() 

    def peek(self): 
     return self.__items[len(self.__items)-1] 

    def is_empty(self): 
     return len(self.__items) == 0 

    def size(self): 
     return len(self.__items) 

    def reverse(self): 
     if len(self.__items) <= 1: 
      return self.__items 

     return self.__items.reverse(self.__items[1:]) + self.__items[0]   


s=Stack() 
rev=input("Enter string to reverse; ") 
s.push(rev) 
print(s.reverse()) 
+0

什麼是反向該怎麼辦? – 2015-01-31 18:20:17

+0

反轉一個字符串。例如Hello -----> olleH – 2015-01-31 18:21:56

+3

len(self .__ items)對於單個字符串總是爲1 – 2015-01-31 18:23:58

回答

3

你需要扭轉每個字符串中self.__itemsself.__items本身:

def reverse(self): 
     if not self.__items: # if items is empty return empty string 
      return "" 
     return " ".join(s[::-1] for s in self.__items) 

self.__items[::-1]將扭轉列表項不是字符串/字符串內。

如果你想做到這一點不切片:

def reverse(self): 
     if not self.__items: 
      return "" 
     out = "" 
     for item in self.__items: 
      temp = "" 
      for i in range(len(item)-1, -1, -1): 
       temp += item[i] 
      out += temp 
     return out 

或者遞歸:

def reverse(self): 
    if not self.__items: 
     return "" 

    def recur(s): 
     if not s: 
      return "" 
     return s[-1] + recur(s[:-1]) 
    return " ".join(recur(w) for w in self.__items) 
+0

鑑於字符串總是在第一個位置,有什麼方法可以利用它嗎? (我想不出一個) – 2015-01-31 18:29:36

+0

@BhargavRao,你可以使用'self .__ items [0]'因爲我們已經檢查了一個空的列表,但迭代至少會給你提供一個添加更多字符串的機會 – 2015-01-31 18:31:05

+0

你能做嗎它沒有利用'[:: - 1]'?只是問... – 2015-01-31 18:40:42