0

私は Caesar 暗号プログラムを作成していますが、それ自体を暗号化するときに、値を 32 から 126 (印刷可能な ascii セット) の範囲内に保つ必要があります。126 になると 32 にループバックします。

ここにコードがあります

print("enter sentence to encrypt:")
string = input()
print("Please enter positive offset value:")
value = int(input())
finalstring = [ord(c) for c in string]
finalstring[:] = [c + value for c in finalstring]
finalstring = ''.join(chr(i) for i in finalstring)
4

1 に答える 1

3

v追加したい変数があり、aそれを範囲内に制限していると仮定すると、次のように32..126なります。

v = (v - 32 + a) % (127 - 32) + 32

たとえば、125 に 3 を足すと、次のようになります。

v = (125 - 32 + 3) % (127 - 32) + 32
  =       96       %    95      + 32
  =                1            + 32
  =                       33

より一般的に:

def addWithConstraint (loval, hival, val, plus):
    return (val - loval + plus) % (hival + 1 - loval) + loval

ただし、一部のモジュロ演算は負の数に対して期待どおりに動作しない場合がありますが、常に正の数を追加していることを確認することで回避できます。たとえば、その関数の先頭に次のように挿入できます。

while plus < 0:
    plus = plus + hival + 1 - loval
于 2013-04-23T07:54:25.953 に答える