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

时间:2016-12-08 23:06:03

标签: python function join append caesar-cipher

早些时候我们创建了一个函数,它接收并旋转单个字符“rot”金额:

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))

现在我需要创建一个函数,将字符串中的所有字符旋转“rot”(向右)。例如,

encrypt(text, rot)

输入

(Hello World, 1)

将返回:

Ifmmp Xpsme

这就是我到目前为止所做的:

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

def encrypt(text, rot):
    encrypted = []
    for letter in text:

#use previous rotate function to rotate characters

        encrypted.append(rotate(letter,rot))

        return ''.join(encrypted)

text = input("Enter some text")
rot = int(input("Enter a number"))
print(encrypt(text,rot))

但是我在第20行得到了一个ParseError:print(encrypt(text,rot))。我不知道我是否正确使用这两个函数 - 旋转函数是否应该在加密函数内部?还有另一个原因导致我发现ParseError吗?如果可以的话,请告诉我我是否在正确的轨道/帮助。谢谢。

编辑:缩进print(encrypt(text,rot))摆脱了“ParseError:第21行的错误输入”,但它也给了我一个“ParseError:第17行的错误输入”:{{ 1}}我试过向前和向后移动缩进。

编辑2 :解决方案看起来像这样(固定缩进后):

return ''.join(encrypted):

编辑3 :如果要在旋转期间保留空格和特殊字符,则需要指定仅在字母为字母时才运行rotate函数,如下所示:

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))

def encrypt(text, rot):
    encrypted = []
    for letter in text:

#use previous rotate function to rotate characters

        encrypted.append(rotate(letter,rot))

    return ''.join(encrypted)

text = input("Enter some text")
rot = int(input("Enter a number"))

print(encrypt(text,rot))

1 个答案:

答案 0 :(得分:2)

你有一个悬垂的冒号:

    return ''.join(encrypted):
                             ^

删除它。

顺便说一下,你的return在你的for循环中,这会导致函数在第一次迭代时退出。