ROT 13密码:创建函数Python

时间:2017-09-06 16:33:39

标签: python-2.7 encryption caesar-cipher rot13

我需要创建一个函数,用字母替换字母后面的字母为13个字母(不使用编码)。我对Python比较陌生,所以我花了一段时间才想办法不使用Encode。

这是我到目前为止所拥有的。当我使用它输入一个正常的单词,如"你好"它有效但如果我通过一个带有特殊字符的句子,我就无法弄清楚如何 JUST 包含字母表中的字母并完全跳过数字,空格或特殊字符。

def rot13(b):
    b = b.lower()
    a = [chr(i) for i in range(ord('a'),ord('z')+1)]
    c = []
    d = []
    x = a[0:13]
    for i in b:
        c.append(a.index(i))
    for i in c:
        if i <= 13:
            d.append(a[i::13][1])
        elif i > 13:
            y = len(a[i:])
            z = len(x)- y
            d.append(a[z::13][0])
    e = ''.join(d)
    return e

修改

我尝试使用.isalpha()但这对我来说似乎没有用 - 当我使用它时,字符因某些原因而重复。以下格式是否正确:

def rot13(b):
    b1 = b.lower()
    a = [chr(i) for i in range(ord('a'),ord('z')+1)]
    c = []
    d = []
    x = a[0:13]
    for i in b1:
        if i.isalpha():
            c.append(a.index(i))
            for i in c:
                if i <= 12:
                    d.append(a[i::13][1])
                elif i > 12:
                    y = len(a[i:])
                    z = len(x)- y
                    d.append(a[z::13][0])
        else:
            d.append(i)
    if message[0].istitle() == True:
        d[0] = d[0].upper()
    e = ''.join(d)
    return e

1 个答案:

答案 0 :(得分:0)

继续发表评论。 OP被建议使用isalpha,并想知道为什么导致重复(参见OP编辑)

这与isalpha的使用无关,它与第二个for循环有关

for i in c:

是不必要的,并且正在导致重复。你应该删除它。相反,您只需使用index = a.index(i)即可。你已经这样做了,但由于某种原因而不是附加到列表而导致混淆

每次在index循环中使用i时,请使用for i in c变量。另外,在嵌套for循环中尽量不要重用相同的变量。它只会引起混淆......但这是代码审查的问题

假设你做的一切正常,它应该有效。