귀하의 문제는 아주 간단합니다, 그리고 당신이 보여준 기능을 함께 할 수 없다 (이 함수에는 몇 가지 문제가 있지만 아래에서 다룰 것입니다). 문제는이 라인이다 : 여기
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 상태를 출력하는 대신 반환 값을 얻으려면 함수의 if
을 return s == r
으로 바꾸어 부울 값을 반환해야합니다. 그런 다음 호출 코드가 메시지를 인쇄할지 아니면 결과에 따라 다른 작업을 수행할지 결정할 수 있습니다.
여기에 오류 메시지가 꽤 분명해 보입니다. – miradulo
이것이 의미하는 것은 @miradulo가 가능하면 초등 언어로 약간 설명 할 수 있다는 것입니다. 내가 말했듯이 나는 코딩에 어려움을 겪고있다. 감사합니다 –
들여 쓰기와 조심해, 함수 호출은 실제로 함수 안에 있습니다. 또한 자기를 논증으로 제공 할 필요가 없습니다. 또한 x와 같은지 검사하기 전에 y를 정의하지 마십시오. 너는 멀지 않은데, 조각들을 올바른 순서로 놓아야 만한다. – FlorianGD