我是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 '
答案 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
,以便返回布尔值。然后,调用代码可以决定是否要根据结果打印出消息或执行其他操作。