1

文字列内の文字の循環シフトとして「<<」および「>>」メソッドを実装する標準strタイプのサブクラスsstr。

 >>> s1 = sstr("abcde")
 >>> s1 << 0
'abcde'
 >>> s1 >> 0
'abcde'
 >>> s1 << 2
'cdeab'
>>> s1 >> 2
'deabc'
>>> s1 >> 5
 'abcde'

# my attempt:
import string
class sstr(str):
def __new__(self, other):
    return str.__new__(self, other.upper())
def __ilshift__(self, other):
    return str.__ilshift(other)
def __rshift__(self, other):
    return str.__rshift(other)    
4

2 に答える 2

0
s1 << 0

これは__lshift__、ではなく、を呼び出します__ilshift__。インプレースのi略です。とにかくその場で文字列を変更することはできず、ここで変更しようとはしていません(新しい値を作成しようとしています)。

str実際のコードの問題は、基本クラスのシフトを呼び出すだけでシフトを実装しようとしていることです。しかし、基本strクラスにはそのシフト操作がありません-それがこの演習を行う理由です!

ヒント:文字列の2つのスライスをまとめます。'foobar' << 2です'obar' + 'fo'。文字列をスライスしてそれらを取得する方法がわかりますか?スライスに使用する番号は、シフト用に指定された番号とどのように関連していますか?

于 2012-05-31T03:27:44.413 に答える