凯撒密码翻译错误



凯撒密码偏移量为21,字母表为"abcdefghijklmnopqrstuvxyz0123456789;

例如";Xvzcvb";应等于";Caesar";,而是输出为"0";CaeNaM";

ALPHABET = "abcdefghijklmnopqrstuvwxyz0123456789."
def decrpytstr(message):
#declare variables
newString = str()
ALPHABET = int()
oneLetter = str()
newAlphabetValue = int()
#loop to assign new alphabet value
for index in range(0, len(message)):
oneLetter = message[index]
ALPHABET = ord(oneLetter)
#assinging new alphabet value
newAlphabetValue = ALPHABET - 21
#creating the new string
newString = newString + chr(newAlphabetValue)

return newString

def main():
message = input("Enter text: ")
decrpytstr(message)
newString = decrpytstr(message)
print(newString)
input("Press ENTER to exit")
main()

有几个问题

  • 您实际上并没有使用您的原始ALPHABET值
  • 您不考虑大写字符
  • 当我们减去神奇的21步时,我们需要把它括起来,这样我们总能在字母表中找到一些东西

纠正这些错误会给我们带来这样的东西。。。

ALPHABET = "abcdefghijklmnopqrstuvwxyz0123456789."
def decrpytstr(message):
newString = ''
#loop to assign new alphabet value
for index in range(0, len(message)):
oneLetter = message[index]
#assinging new alphabet value
newAlphabetValue = (ALPHABET.find(oneLetter.lower()) - 21) % len(ALPHABET) + (ord('A') if oneLetter.isupper() else ord('a'))
#creating the new string
newString = newString + chr(newAlphabetValue)

return newString

def main():
message = input("Enter text: ")
decrpytstr(message)
newString = decrpytstr(message)
print(newString)
input("Press ENTER to exit")
main()

https://www.asciitable.com/正如我看到的ascii表,b98的值将是M77,递减21。我想你必须分别处理大写字母和小写字母。

[编辑]我不完全理解你想要实现什么,但这个怎么样?

ALPHABET = "abcdefghijklmnopqrstuvwxyz"
def decrpytstr(message):
new_string = ""
for i in range(len(message)):
character = message[i]
new_character = ALPHABET[ALPHABET.find(character) - 21 % 26]
new_string = new_string + new_character
return new_string

def main():
message = input("Enter text: ")
decrpytstr(message)
newString = decrpytstr(message)
print(newString)
input("Press ENTER to exit")
main()
Enter text: xvznvm
caesar
Press ENTER to exit

最新更新