我已经创建了代码,并将其输入到输出中。对于检查输入,我有2/3次运行正确,但是当我输入时我缺少输出的一部分
'你好,世界!'
一切运行正常。
plainText = input("Enter a message: ")
distance = int(input("Enter the distance value: "))
code = ""
for ch in plainText:
ordvalue = ord(ch)
cipherValue = ordvalue + distance
if cipherValue > ord ('z'):
cipherValue = ord('a') + distance - (ord('z') - ordvalue + 1)
code = code + chr(cipherValue)
print(code)
加密的输出应该是Lipps${svph%
,但是我得到Lipps$asvph%
。只是想在这里找到我所缺少的。
答案 0 :(得分:0)
凯撒密码只能更改a..z
范围内的字符。其他所有字符均保持不变。您的代码中缺少此限制。
if 'a' <= ch <= 'z':
cipherValue = ...
else:
cipherValue = ch
在> ord('z')
的情况下,您可以使代码更加简单:
cipherValue -= 26
或者,如果您不想写数字26,而是解释一下:
cipherValue -= 1 + ord('z') - ord('a')
答案 1 :(得分:0)
您希望'w'
(来自'Hello world!'
)应转换为'{'
-而不是'a'
。但是,事实并非如此。
从您的示例可以推断出distance
为4
:'H'
成为'L'
。然后,根据您的算法,'w'
将必然变为'a'
:ord('w') + 4
等于ord('z') + 1
,因为ord('w') == ord('z') - 3
。因此,将执行if
语句的子句。如果通过将ordvalue
替换为ord('z') - 3
来计算结果,则会看到结果为ord('a')
。
由于如注释中所述,您希望使代码将字符串'Hello World!'
转换为'Lipps${svph%'
,您可能只需要消除代码中“重叠”部分处理,即消除处理cipherValue > ord ('z')
情况的代码。
答案 2 :(得分:0)
对于那些想知道的人-这是一个语言问题。代替“ a”和“ z”,它必须是“〜”。
希望这对以后的人有所帮助。