python - 接收和旋转字符的函数 - Caesar Cipher

标签 python string function python-3.5 caesar-cipher

我正在尝试创建一个函数

rotate_character(char, rot)

接收一个字符“char”(长度为1的字符串)和一个整数“rot”。该函数应返回一个长度为 1 的新字符串,这是将 char 向右旋转 rot 位数的结果。

因此输入“A”代表 char 和“13”代表 rot

N

(A 的初始值为 0,B 的初始值为 1,等等)。轮换期间应保持资本化。

我已经创建了一个函数,它使用字典返回字母在字母表中的位置:

letter = input("Enter a letter: ")

def alphabet_position(letter):
    alphabet_pos = {'A':0, 'a':0, 'B':1, 'b':1, 'C':2, 'c':2, 'D':3,
                    'd':3, 'E':4, 'e':4, 'F':5, 'f':5, 'G':6, 'g':6,
                    'H':7, 'h':7, 'I':8, 'i':8, 'J':9, 'j':9, 'K':10,
                    'k':10, 'L':11, 'l':11, 'M':12, 'm':12, 'N': 13,
                    'n':13, 'O':14, 'o':14, 'P':15, 'p':15, 'Q':16,
                    'q':16, 'R':17, 'r':17, 'S':18, 's':18, 'T':19,
                    't':19, 'U':20, 'u':20, 'V':21, 'v':21, 'W':22,
                    'w':22, 'X':23, 'x':23, 'Y':24, 'y':24, 'Z':25, 'z':25 }
    pos = alphabet_pos[letter]
    return pos  

我想我可以使用这个函数在旋转之前获取 (char) 的初始值。

def rotate_character(char, rot)
    initial_char = alphabet_position(char)
    final_char = initial_char + rot

但我的问题是,如果 initial_char + rot 大于 25,我需要回到字母表的开头并继续计数。所以“w”的输入(初始值为 22)+ rot 的输入 8 应该返回

e

我怎么用 python 说这个?

if final_char > 25, start at the beginning of the list and continue counting

我是否一定需要使用我在 alphabet_position 函数中创建的字典? It was also suggested我通过使用 Python 的内置字母列表找到字符编号,如下所示:

import string

letter = input('enter a letter: ')

def alphabet_position(letter):
    letter = letter.lower()
    return list(string.ascii_lowercase).index(letter)

return(alphabet_position(letter))

当你在数数的时候不得不绕行时,我不确定哪一个是更好的选择。感谢您的帮助/建议!

编辑:

现在我的代码是这样的:

letter = input("enter a letter")
rotate = input("enter a number")

def rotate(letter, rotate):
    letter = letter.lower()
    return chr((ord(letter) + rotate - 97) % 26 + 97)

print(rotate(letter))

编辑 2:

def rotate(letter, number):
    letter = letter.lower()
    shift = 97 if letter.islower() else 65
    return chr((ord(letter) + number - shift) % 26 + shift)

letter = input('Enter a letter: ')
number = int(eval(input('Enter a number: ')
print(rotate(letter, number))

给我一​​个 ParseError: "ParseError: bad input on line 8"(the print line)

最佳答案

def rotate(letter, rot):
    shift = 97 if letter.islower() else 65
    return chr((ord(letter) + rot - shift) % 26 + shift)

letter = input('Enter a letter: ')
rot = int(input('Enter a number: '))
print(rotate(letter, rot))

关于python - 接收和旋转字符的函数 - Caesar Cipher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41009009/

相关文章:

python - 自动填充 python 列表列表

Python:最小最大缩放数组的快速方法

c - 为什么对数组使用 `(char *[])` 而不是 `(char [][7])` 有效?

JavaScript:单独声明和定义函数?

python - 从 PyTorch 中的 BiLSTM (BiGRU) 获取最后一个状态

c - C语言中使用字符串输入

php - 从php中的字符串中删除转义序列

安卓 SQLite fts3 : What should I insert: null values OR empty strings?

c++ - C++如何在内存中存储函数和对象?

python - Firefox 和 IE9 中的 Django POST 数据问题,但 Chrome 中没有