2012-10-15 2 views
4

홀수의 중간 3 자리 또는 짝수 중 4 자리를 차지하는 "중간"이라는 함수를 작성하려고합니다. . 숫자가 5 자리 미만이면 전체 숫자 만 반환합니다. 여기에 내 작품 :파이썬 3 : 타입 가져 오기 오류 : 슬라이스는 정수 여야합니다 ...하지만 그들은 믿습니다.

def middle(x): 
    mystring=str(x) 
    length=len(mystring) 
    if len(mystring)<=5: 
     return(x) 
    elif len(mystring)%2==0: 
     return (mystring[((length/2)-1):((length/2)+3)]) 
    else: 
     return (mystring[(length//2):((length//2)+3)]) 
middle (1234567890) 

내가 점점 계속 "유형 오류 : 슬라이스 지수는 정수 또는 없음이거나 an_index_method이 있어야합니다"나는 이해가 안 돼요.

+0

'와 __future__ 수입 division'에서; 그 미래 진술 없이는 효과가 있습니다. – user9876

답변

12

당신은 파이썬 3을 사용하고 있습니다. [당신은 - 난 그냥 태그이 두 번째를 발견했습니다.] length/2은 플로트 될 것입니다 : 대신에 걸쳐

return (mystring[((length/2)-1):((length/2)+3)]) 

사용 length//2.

참고이 경우에도 length이 일어날 것인가는 짝수 : 파이썬 2.7에 재현 또한

>>> s = 'abcd' 
>>> len(s) 
4 
>>> len(s)/2 
2.0 
>>> s[len(s)/2:] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: slice indices must be integers or None or have an __index__ method 
>>> s[len(s)//2:] 
'cd' 
+0

음 정수가 그렇다고해도 단 하나의 슬래시 만 사용하므로 생각하지 않아도됩니다. 나는 그것을 시험해 보았고, 그것을 실행했을 때, 그것은 (나는 pyscripter를 사용하고있다) 놀랐다. ... 빨간 텍스트가 인터프리터에서 흘러 나오기 시작했다. 그리고 "줄이 닫혔다"는 몇 줄마다 흘러 나오기 시작했다. Ehhh ... It 이제 멈추지 않을 것입니다 – JackD

+0

소리가 고쳐지고 다음 버그를 발견했습니다 :-) – user9876

+0

프로그램을 종료 한 다음 다시 시작하면 제대로 작동합니다. 고마워. (현재 : P) – JackD

관련 문제