4

奇数の真ん中の 3 桁、または偶数の真ん中の 4 桁を取る "middle" という関数を書こうとしています。数値が 5 桁未満の場合は、整数のみを返します。これが私の仕事です:

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 でなければなりません」というメッセージが表示され続け、理解できません。

4

2 に答える 2

13

Python 3 を使用しているはずです。[そして、あなたは -- 私はこのタグに今気づきました。] length/2フロートになります:

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

代わりに全体で使用length//2します。

が偶数の場合でも、これが発生することに注意してくださいlength

>>> 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'
于 2012-10-15T01:56:11.583 に答える