(Palindrome)python使用类和实例

时间:2017-11-07 20:34:34

标签: python python-2.7 palindrome

我是python的新手,面对一个简单的回文程序问题。     我想利用类和定义。

def isPalindrome(self,x):
        self.x=x     
        if ( x== y):
            print "palindrome"

 s=99
 y=s[::-1]
 d=isPalindrome(s)

错误:-Line 8:TypeError:' int'对象没有属性' getitem '

1 个答案:

答案 0 :(得分:2)

你的问题非常简单,它与你所展示的功能无关(尽管该功能有几个问题,我将在下面讨论)。问题出在这些方面:

s=99
y=s[::-1]

在这里你给s分配一个整数,然后在下一行,尝试切片。这不起作用,因为切片仅为序列类型(例如列表,元组和字符串)定义。如果您尝试对不支持该类型的类型执行任何其他类型的索引(例如1[0]),则会收到完全相同的错误。错误消息中提到的__getitem__属性是实现索引和切片的特殊方法。 int的实例没有,因为他们没有实施这些操作。

我怀疑你想要处理整数的字符串表示,而不是整数本身。与其他一些编程语言不同,Python不会在整数和数字字符串之间进行隐式转换,您需要为每个操作使用正确的类型,并在必要时进行显式转换。在这种情况下,您可以使用字符串文字("99"),也可以在整数文字(str)上调用str(99)。两者都会给出完全相同的结果。

至于你的功能,它有很多问题。你似乎已经把它写成了一个类的方法,但至少在你已经显示的代码片段中,没有涉及到类。您还指的是全局y变量,这通常是功能设计的一种非常糟糕的方法。相反,我建议将上面这些行的固定版本移到函数中:

def isPalindrome(n): # n is a number, no self argument
    s = str(n)    # convert the number into a string
    r = s[::-1]   # get a reversed copy of the string (as a local variable)
    if (s == r):  # compare them (as before, just with new variable names)
        print "palindrome"

您可以使用isPalindrome(99)之类的内容来调用它。与原始函数一样,这个函数不会return任何东西(与Python中返回None相同)。如果要获得返回值而不是仅打印回文状态,则应将函数中的if替换为return s == r,以便返回布尔值。然后,调用代码可以决定是否要根据结果打印出消息或执行其他操作。