2017-11-07 3 views
-2

저는 간단한 파이썬 드롬 프로그램으로 파이썬과 직면 한 문제에 익숙합니다. 클래스와 정의를 사용하고 싶습니다.(Palindrome) Python 클래스와 인스턴스를 사용하여

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

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

오류 : - 회선 8 : 형식 오류 : 'INT'개체가 어떤 속성이없는 '의 getItem을'

+0

여기에 오류 메시지가 꽤 분명해 보입니다. – miradulo

+0

이것이 의미하는 것은 @miradulo가 가능하면 초등 언어로 약간 설명 할 수 있다는 것입니다. 내가 말했듯이 나는 코딩에 어려움을 겪고있다. 감사합니다 –

+0

들여 쓰기와 조심해, 함수 호출은 실제로 함수 안에 있습니다. 또한 자기를 논증으로 제공 할 필요가 없습니다. 또한 x와 같은지 검사하기 전에 y를 정의하지 마십시오. 너는 멀지 않은데, 조각들을 올바른 순서로 놓아야 만한다. – FlorianGD

답변

2

귀하의 문제는 아주 간단합니다, 그리고 당신이 보여준 기능을 함께 할 수 없다 (이 함수에는 몇 가지 문제가 있지만 아래에서 다룰 것입니다). 문제는이 라인이다 : 여기

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

당신이 그 다음 줄에, 그것을 슬라이스하려고 s의 정수를 지정합니다. 슬라이싱은 목록 유형 (예 : 목록, 튜플 및 문자열)에 대해서만 정의되므로 작동하지 않습니다. 다른 유형의 색인 생성을 지원하지 않는 유형 (예 : 1[0])으로 시도한 경우 정확하게 동일한 오류가 발생합니다. 오류 메시지에 언급 된 __getitem__ 특성은 인덱싱 및 조각화를 구현하는 특수 메서드입니다. int의 인스턴스에는 이러한 조작을 구현하지 않으므로 인스턴스가 없습니다.

정수 자체가 아닌 정수의 문자열 표현을 다루고 싶습니다. 다른 프로그래밍 언어와 달리 Python은 정수와 숫자 문자열을 암시 적으로 변환하지 않으므로 각 작업에 올바른 유형을 사용해야하고 필요할 때 명시 적으로 변환해야합니다. 이 경우 문자열 리터럴 ("99")을 사용하거나 정수 리터럴 (str(99))에 str을 호출 할 수 있습니다. 둘 다 똑같은 결과를 줄 것입니다.

귀하의 기능은 여러 가지 문제가 있습니다. 클래스의 메서드처럼 작성한 것 같습니다. 적어도 표시된 코드 조각에는 클래스가 없습니다. 변수 y을 언급하고 있는데, 이는 일반적으로 함수 설계에 매우 나쁜 접근법입니다. 대신, 위의 기능에 라인의 고정 된 버전을 이동 좋을 것 : 당신은 isPalindrome(99) 같은 뭔가이 전화 것

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" 

. 원래 함수처럼,이 것은 return이 아닙니다 (이것은 파이썬에서 None을 반환하는 것과 같습니다). palindrome 상태를 출력하는 대신 반환 값을 얻으려면 함수의 ifreturn s == r으로 바꾸어 부울 값을 반환해야합니다. 그런 다음 호출 코드가 메시지를 인쇄할지 아니면 결과에 따라 다른 작업을 수행할지 결정할 수 있습니다.