反向类方法不起作用

时间:2015-01-31 18:17:59

标签: python python-3.x

所以我创建了一个简单的类方法来反转一个字符串然后它又返回给我原始的?我创建的方法在类之外工作,但由于某种原因,当我尝试实现它时它不会。

请参阅下面的代码:

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())

1 个答案:

答案 0 :(得分:3)

您需要撤消self.__items而不是self.__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)