1

ノート。この質問は、最初に codereview に提出されたコードに関連しています

https://codereview.stackexchange.com/questions/101011/mengenlehreuhr-in-pythonの元のリンクを参照してください

だから私は時計を書いた。単なる時計ではありません。この時計の目的は、クリプトス セクション K4をクラックすることです。

アプリケーションの完全なソースは現在GitHubにありますが、私が経験している特定の問題は次の方法に関連しています。

    def _update(self):
        self.window.erase()
        self.window.box()
        self.window.addstr(0, 1, str(self.index).zfill(2) + ' - ' + TimeDecipher.ciphertext[0:self.index])
        self.window.addstr(1, self.cipher_offset, TimeDecipher.ciphertext[0:self.index-1], self.color)
        self.window.addstr(
            1,
            (self.cipher_offset + self.index-1),
            TimeDecipher.ciphertext[self.index-1:self.index],
            self.highlight
        )
        self.window.addstr(1,
            (self.cipher_offset + self.index),
            TimeDecipher.ciphertext[self.index:],
            self.color
        )
        self.window.addstr(2, 1, ''.join(['-' for i in range(self.width - 2)]))
        for i, item in enumerate(self.lines):
            self.window.addstr((i + 3), 1, str(item))
        self.window.refresh()

この問題は次のように説明されています。

self.index < len(self.time_decipher.ciphertext)(97 文字) の場合、強調表示は期待どおりに機能します。

OBKRUOX|O|GHULBSOLIFBBWFL...

ただし、self.index == ~96これを見ると:

|AR|OBKRUOX...

基本的に、印刷された文字列の末尾から最後の 2 文字が切り取られ、先頭にドロップされます。

なぜこれが起こっているのか、これを克服するために何ができるのかを誰かが説明できますか?

4

1 に答える 1

0

問題解決 - カウントに問題がありました。

設定したメソッドにself.indexは、別のメソッドからその情報が渡されていました。つまり、スプライシングに必要な値よりも常に 1 遅れており、97 (文字列の長さ) に達したときに 0 にリセットされます。

スライスは 1 から戻るように機能するため、96 に達したとき、インデックスは実際には -1 であり、97 は 0 でした。

Log::__add__インデックスを次のように設定するようにメソッドを更新しました。

    self.index = other.index if other.index > 0 else len(TimeDecipher.ciphertext) + other.index
于 2015-08-21T12:08:55.823 に答える