1

そのため、スクランブルされたアルファベットを入力してから、そのアルファベットを使用して秘密のメッセージを入力する必要があります。私のプログラムは秘密のメッセージのスクランブルを解除する必要があります。私はこれまでこれを書いてきましたが、行き詰まっています。私は誰かが私を助けてくれることを望んでいました。これまでに試したのは、リスト内のすべてのインデックスをAZに変更することです。私の質問は、私が書いたものをどのように使用し、入力した秘密のメッセージでも機能させるかです。

s = ()

alphabet = input("Please input the scrambled alphabet in order: ")
message = input("Now input the scrambled message: ")
alphabet.upper()
s = dict(alphabet)
num = 1

while num < 2:
    s[0] = chr(65)
    s[1] = chr(66)
    s[2] = chr(67)
    s[3] = chr(68)
    s[4] = chr(69)
    s[5] = chr(70)
    s[6] = chr(71)
    s[7] = chr(72)
    s[8] = chr(73)
    s[9] = chr(74)
    s[10] = chr(75)
    s[11] = chr(76)
    s[12] = chr(77)
    s[13] = chr(78)
    s[14] = chr(79)
    s[15] = chr(80)
    s[16] = chr(81)
    s[17] = chr(82)
    s[18] = chr(83)
    s[19] = chr(84)
    s[20] = chr(85)
    s[21] = chr(86)
    s[22] = chr(87)
    s[23] = chr(88)
    s[24] = chr(89)
    s[25] = chr(90)
    num +=1
print (s)

for alpha in message.upper():
    if alpha < "A" or alpha > "Z":
        print(alpha,end="")
    else:
        print(s [ord(alpha) -65 ], end="")
4

6 に答える 6

4

まず、大きな辞書を作成するs必要はまったくありません。それは文字通り何もしません:行:

s [ord(alpha) -65 ]

文字を数字に変え、65を引いてから、65を足して数字に戻す辞書に入れます。

次に、この行alphabet.upper()は実際にはアルファベットを変更せず、大文字のバージョンを返すだけです。あなたがする必要があります

alphabet = alphabet.upper()

さて、肉の部分です。あなたがやろうとしていたのは、コードアルファベットの文字を実際のアルファベットの文字にマッピングする辞書を作成することでした。行dict(alphabet)はこれを行いません。代わりに、文字列内の文字を繰り返し処理し、それぞれを対応する文字に割り当てます。を使用して正しい方向chrに進んでいますが、作業が多すぎます。これはどう:

s = {}
for i in range(26):  # iterate from 0 to 25
    s[alphabet[i]] = chr(65 + i)

chr(65 + i)通常の順序付けられたアルファベットの文字でありalphabet[i]、スクランブルされたものです。

その辞書を手に入れたら、文字ごとに調べて変更するのは簡単なはずです(そしてそれはあなたに任されています)。

于 2012-08-10T22:01:32.920 に答える
2

文字列translate()メソッドを使用できます。

import string

intab   = 'abcdefghijklmnopqrstuvwxyz' # or string.ascii_lowercase
outtab  = 'xyzabcdefghijklmnopqrstuvw'
tab = string.maketrans(intab, outtab)
s = raw_input('Type some text: ').lower()
print s.translate(tab)

maketrans()両方のアルファベットでテーブルを作成しtranslate()、文字列の各文字をテーブル内のペアに置き換えるだけです。

于 2012-08-10T22:10:43.830 に答える
0

Pythonを知りません-これは擬似コードです

  1. スクランブルされたアルファベットの配列を作成する
  2. 「通常の」アルファベットの配列を作成する
  3. メッセージ内のforeachchar、スクランブルされた配列内のcharを検索し、対応する「通常の」charを出力します
于 2012-08-10T21:53:14.913 に答える
0

あなたは辞書を作ることができます:

alphabet({'a':'alpha', 'b':'bravo','c':'charlie', etc.}) 

したがって、abcはalphabravocharlieに変換されます

ここで、「a」、「b」、..はコード化された文字であり、「alpha」、「bravo」、...はそれらの実際の値です。これを逆にして「サイファー」を作ります。

辞書に関するオンラインチュートリアルのセクションを参照してください:http: //docs.python.org/dev/library/collections.html

于 2012-08-10T22:08:17.920 に答える
0

「文字列を入力する場合(区切り文字のない文字列を想定しています)、最初の文字がA、2番目の文字がBなどの辞書を作成するにはどうすればよいですか?」(これが間違った解釈である場合は申し訳ありません)。その場合は、次のようにすることができます(raw_input-の使用法inputはパラメーターを評価する組み込みであり、割り当てられないことに注意してください)。

alphabet = raw_input("Please input the scrambled alphabet in order: ")
message = raw_input("Now input the scrambled message: ")

secret_map = {}

# Step through the provided string, incrementing the character number by index.
# Index will start at 65 + 0 = A (change to 98 if you want lowercase)
for index, letter in enumerate(alphabet):
    secret_map[letter] = chr(65 + index)

# Now join the string together, mapping each letter to its corresponding value
new_str = ''.join([secret_map[char] for char in message])

# Print the resulting string
print new_str

これは宿題であるため(そしておそらくあなたは内包をリストすることができていない)、これは作成することと同等ですnew_str

new_str = ''
for letter in message:
    new_str += secret_map[letter]

これがあなたが探していたものではない場合は私に知らせてください。

于 2012-08-10T22:22:48.900 に答える
0

stummjrの答えを拡張して、エンコードとデコードの両方のよりPython的なバージョンを作成することに抵抗できませんでした(各ステップをより明確にするためにいくつかの変数を追加しました):

import random, string

cypher_list = list(string.ascii_lowercase)
random.shuffle(cypher_list)
cypher_text = ''.join(cypher_list)

encode_tab = string.maketrans(string.ascii_lowercase, cypher_text)
decode_tab = string.maketrans(cypher_text, string.ascii_lowercase)

orig_text = 'this means war'
crypt_text = orig_text.translate(encode_tab)
clear_text = crypt_text.translate(decode_tab)

print cypher_text
print crypt_text
print clear_text
assert(clear_text == orig_text)
于 2012-08-11T19:58:15.063 に答える