0

我正在编写一个凯撒密码程序,当它加密自己时,我需要将我的值保持在 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

因此,例如,将 3 添加到 125 时:

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 回答