-2

復号化されたメッセージを 10 回ループしようとしていますが、非常に異なる結果が得られます。理由はわかりません。以下は私のコードです。暗号化と復号化に同じコードを使用しました。を変更するだけで済みましたnewchar = newchar-shfit。ループに同じコードを使用すると、非常に異なる結果が得られます。

  num1=0
  shift=0

  print("Brute force")

  question=input(print("Please enter something to decrypt: "))
  decryptedword = ""
  while num1<10 and shift <10 :


      for character in question:
          newchar = ord(character)
          newchar = newchar - shift
      if newchar < 32:
         newchar = newchar + 95
      elif newchar > 126:
         newchar = newchar - 95
      decryptedword = decryptedword + chr(newchar)


      print(num1,"decrypted word: ",decryptedword)
      num1=num1+1
      shift=shift+1

たとえばasdasd、入力を入力すると、次のようになります。

1 復号化された単語: a

2 解読された単語: ar

3 解読された単語: arb

4 解読された単語: arb^

5 解読された単語: arb^o

6 解読された単語: arb^o_

OK、出力のサンプルです。 を入力すると、次のようdvgになります。

1 復号化された単語:fxi

2 復号化された単語:asd

3 解読された単語:ewh

等々..

4

2 に答える 2

2

shiftループの反復ごとに値を増やしているため、反復ごとにキーを変更しています。また、反復ごとにキー ( shift) をインクリメントしているため、復号化された結果も反復ごとに異なります。

この行を削除するshift=shift+1と、復号化されたメッセージはすべての繰り返しで同じになります。
(編集 3: テキストを「打ち消す」方法がわかりませんが、著者の問題を誤解していたので、上記の行は無視してください。)

編集:そして別の注意、あなたのインデントは間違っているようです。ステートメントは、ループの一部ではないかのif ; elifようにインデントされ、これも予期しない動作を引き起こします。
EDIT2:さらにdecryptedword = ""、ループ内にある必要があるため、反復ごとにリセットされます。

   num1=0
   shift=0


  print("Brute force")

  question=input(print("Please enter something to decrypt: "))
  while num1<10 and shift <10 :
      decryptedword = ""

      for character in question:
          newchar = ord(character)
          newchar = newchar - shift
          if newchar < 32:
             newchar = newchar + 95
          elif newchar > 126:
             newchar = newchar - 95
          decryptedword = decryptedword + chr(newchar)

      print(num1,"decrypted word: ",decryptedword)
      num1=num1+1
      shift=shift+1
于 2013-09-17T11:59:17.603 に答える
2

インデントがすべて間違っています - if ステートメントは for ループ内にある必要があります

print("Brute force")

question=input(print("Please enter something to decrypt: "))
decryptedword = ""
while num1 < 10 and shift < 10:

for character in question:
    newchar = ord(character)
    newchar = newchar - shift
    if newchar < ord(' '):
        newchar = newchar + 95
    elif newchar > ord('~'):
        newchar = newchar - 95
    decryptedword = decryptedword + chr(newchar)


print(num1, "decrypted word: ", decryptedword)
num1 = num1 + 1
shift = shift + 1
于 2013-09-17T12:10:11.900 に答える