<p>在你做的时候</p>
<pre><code> elif charvalue == 32:
decryptString += " "
</code></pre>
<p>您已经将charvalue设置为</p>
<pre><code> charvalue = ord(i) - key
</code></pre>
<p>但是看看你原来的编码字符串:空间在编码时变成了空间,但此时你已经“解码”了一个空间,然后才检查它是什么。你知道吗</p>
<p>你必须这样做:</p>
<pre><code>def cipherDecrypt(word, key):
decryptString = ""
for i in word:
charvalue = ord(i) - key
if i == 32: # Check if the character is a space BEFORE decoding it
decryptString += " "
elif charvalue < 97:
charvalue = ord("z") - (96-charvalue)
decryptString += chr(charvalue)
else:
decryptString += chr(charvalue)
return decryptString
</code></pre>
<hr/>
<p>但是,仍然存在一些细微的错误;更好的检查是验证每个字符是否可以在继续之前解码:</p>
<pre><code>def cipherEncrypt(word, key):
cipher = ''
for char in string:
if char.isupper():
cipher += chr((ord(char) + shift - 65) % 26 + 65)
elif char.islower():
cipher += chr((ord(char) + shift - 97) % 26 + 97)
else:
cipher += char
return cipher
</code></pre>
<p>这样,你就可以对字母进行加密并传递其他信息。你知道吗</p>
<p>另外,考虑到凯撒密码的性质,<code>cipherDecrypt</code>的定义很简单:</p>
<pre><code>def cipherDecrypt(word, key):
return cipherEncrypt(word, -key)
</code></pre>