3

シーザー暗号を作成するのに十分な Python を学習したと思ったので、作成を開始しましたが、レンガの壁にぶつかりました。

これが私のコードです:

phrase = raw_input("Enter text to Cipher: ")
shift = int(raw_input("Please enter shift: "))
result = ("Encrypted text is: ")

for character in phrase:
    x = ord(character)

    x = x + shift


print chr(x)

現時点で、フレーズが 'hi' で shift が 1 の場合、for ループは文字 h ではなく文字 i をループするだけなので、結果は次のようになります: j

単語全体をループして、shift int 変数が何であれ、各文字をシフトしたいと考えています。

フレーズ変数をループするにはどうすればよいですか?

4

3 に答える 3

2

ループ文字の最後に と等しいため、コードはord()の値を出力しています。新しい文字をリストに保存し、ループの終了後にそれらを結合してから印刷する必要があります。'j''i'

new_strs = []
for character in phrase:
    x = ord(character)
    x = x + shift
    new_strs.append(chr(x))   #store the new shifted character to the list
    #use this if you want z to shift to 'a'
    #new_strs.append(chr(x if 97 <= x <= 122 else 96 + x % 122))
print "".join(new_strs)       #print the new string

デモ:

$ python so.py
Enter text to Cipher: hi
Please enter shift: 1
ij
于 2013-08-03T07:16:42.553 に答える
1

暗号化された各文字をresult文字列に追加します。

phrase = raw_input("Enter text to Cipher: ")
shift = int(raw_input("Please enter shift: "))
result = ""

for character in phrase:
    x = ord(character)
    result += chr(x + shift)

print result
于 2013-08-03T07:16:31.573 に答える
0

試す:

phrase = raw_input("Enter text to Cipher: ")
shift = int(raw_input("Please enter shift: "))
result = ("Encrypted text is: ")
import sys
for character in phrase:
  x = ord(character)
  x = x + shift
  sys.stdout.write(chr(x))
  sys.stdout.flush()
于 2013-08-03T07:39:18.787 に答える