python - 在 Python 中实现凯撒密码算法

标签 python algorithm for-loop iteration

所以我正在尝试编写一个代码,将单词中的每个字母按字母表中的多个字母后移(环绕到末尾)。例如,如果我想平移 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

最佳答案

你可以这样开始

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

基本上,这个列表推导式构建了一个由单个字母组成的列表。然后,通过 .find 方法找到字母在字母表中的索引。 (index - shift) 是所需的新索引,它是从字母表中提取的。结果列表再次加入并返回。

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

关于python - 在 Python 中实现凯撒密码算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42013270/

相关文章:

javascript - 根据用户输入显示 n 次表格,然后具有根据单击的行显示/隐藏表格的功能

java - java 如何退出for循环?

java基本数组问题

坐标之间的Python转换

python - 在 Python 中连续迭代两个或多个容器的优雅而快速的方法?

python - 如何删除数组中的 ' ' [ ] (python)

java - 在一个范围内随机选择 k 个不同的数字

algorithm - 切换除最高设置位之后的所有位

c# - gridview 列的总和,跳过重复项

python - 有效合并 Pandas 中的多个数据框