在Python中实现Caesar密码算法

K. *_*ter 0 python iteration algorithm for-loop

所以我正在尝试做一个代码,将一个单词中的每个字母移回字母表中的一些字母(包围结尾).例如,如果我想换2并输入CBE,我应该得到AZC.或者约翰进入HMFL.我有一个代码只能用于一个字母,我想知道是否有办法为python做一个嵌套for循环(这有效吗?)

def move(word, shift):
  alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
  original = ""
  for letter in range(26, len(alphabet)):
    if alphabet[letter] == word: #this only works if len(word) is 0, I want to be able to iterate over the letters in word.
        original += alphabet[letter-shift]
  return original
Run Code Online (Sandbox Code Playgroud)

Tri*_*tan 5

你可以这样开始

def move(word, shift):
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    return "".join([alphabet[alphabet.find(i)-shift] for i in word])
Run Code Online (Sandbox Code Playgroud)

基本上,这个列表理解构造了单个字母的列表.然后,通过.find方法找到字母表中字母的索引.(索引 - 移位)是所需的新索引,它是从字母表中提取的.生成的列表再次连接并返回.

请注意,它显然不适用于小写输入字符串(如果您希望使用str.upper方法).实际上,这个词应该只包含字母表中的字母.对于句子,该方法需要以不同方式处理空格.