0

while ループが実行されるたびに、文字列の文字を 1 ずつシフトしようとしています (したがって、「A」は「B」になり、「B」は「C」になり、毎回)。

それぞれの結果を表示して比較できるようにする必要があります。私がやりたくないことですが、方法を知っているのは、文字を 1 文字ずらす 26 の異なる関数を作成することですが、これは少しばかげているようです。

while ループが通過するたびに変数を ttk に割り当てるにはどうすればよいですか?

これにより、「ls」とカウントがオンになっているもの(ls1、ls2、ls3 ...)が各変数に割り当てられると思いましたが、そうではありません。毎回エラーになります。

def shift1(*args):
    s = code.get()
    storage = []
    count = 1
    while (count <= 26):
        l = [ord(i) for i in s]
        sh = ([chr(i + count) for i in l])
        storage.append(sh)
        ("ls"+str(count)).set(storage(count - 1))
        count += 1

それは私に言うエラーを与えます

AttributeError: 'str' オブジェクトには属性 'set' がありません

私が言ったように、diff ttk 変数を割り当てるたびに、この関数を 26 回使用することができます。

def shift1(*args):
    s = code.get()
    l = [ord(i) for i in s]
    sh1.set(''.join([chr(i + 1) for i in l]))

これは基本的にループをバイパスしますが、もっと良い方法があるはずです。python と ttk は非常に新しいので、助けていただければ幸いです。

4

2 に答える 2

1

文字列に A ~ Z の文字しかないと仮定して、文字列内の文字を回転させる方法を次に示します。

string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i in range(10):
    string = "".join([chr((ord(letter) - ord('A') + 1) % 26 + ord('A')) for letter in string])
    print string

それぞれの文字には文字 A との ASCII コードの違いがあるという考え方です。したがって、文字 A は 0、文字 B は 1 になります。文字 Z が前方にシフトされると、A に戻る必要があります。これがモジュロ (% ) が入ってくると、必要に応じて文字 Z を A に戻します。

出力:

BCDEFGHIJKLMNOPQRSTUVWXYZA
CDEFGHIJKLMNOPQRSTUVWXYZAB
DEFGHIJKLMNOPQRSTUVWXYZABC
EFGHIJKLMNOPQRSTUVWXYZABCD
FGHIJKLMNOPQRSTUVWXYZABCDE
GHIJKLMNOPQRSTUVWXYZABCDEF
HIJKLMNOPQRSTUVWXYZABCDEFG
IJKLMNOPQRSTUVWXYZABCDEFGH
JKLMNOPQRSTUVWXYZABCDEFGHI
KLMNOPQRSTUVWXYZABCDEFGHIJ
于 2013-09-05T01:19:33.023 に答える