2

メッセージ内の各文字を、アルファベットのさらに k 番目の位置の文字に置き換えてエンコードするにはどうすればよいですか? たとえば、k=3 の場合、「a」は「d」に置き換えられ、「b」は「e」に置き換えられます。アルファベットがぐるぐる回ります。「w」は「z」に、「x」は「a」に、「y」は「b」に、「z」は「c」に置き換えられます。エンコードされるメッセージは空ではなく、小文字とスペースのみが含まれていると想定できます。スペースはスペースとしてエンコードされます。これは私が試したものですが、必要なように機能しません。スキップする文字数を入力できるようにする必要があります。

def encode(string,keyletter):
  alpha="abcdefghijklmnopqrstuvwxyz"
  secret = ""
  for letter in string:
    index = alpha.find(letter)
    secret = secret+keyletter[index]
  print secret
4

2 に答える 2

0

これは、アルファ文字列の再配置を必要としない単純なバージョンです。これは、ローテーションの数字の代わりに単語を入力するなど、間違ったユーザー入力を考慮していないことに注意してください。

while 1:
    rot = int(raw_input("Enter Rotation: "))
    cipher = raw_input("Enter String: ")
    secret,alpha = '', 'abcdefghijklmnopqrstuvwxyz'

    for i in cipher.lower():   #Loop through the original string 
        if i not in alpha:     #If the character in the original string is not in the alphabet just add it to the secret word
            secret += i
        else:
            x = alpha.index(i)   #Get index of letter in alphabet
            x = (x+rot)%26  #Find the index of the rotated letter
            secret += alpha[x]   #Add the new letter to the secret word
    print f

for ループ内のすべてを 1 行にまとめることができますが、そのように読むのはそれほどきれいではありません。

f += i if i not in s else s[(s.index(i)+rot)%26]

Caesar Cipher を使いこなしたい場合は、鍵付きの Caesar Cipher を調べて、そのオプションも追加してください。ただし、アルファ文字列を操作する必要があります。

于 2015-10-02T13:55:36.450 に答える