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

Function that Receives and Rotates Characters in String - 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)

会 return:

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: bad input on line 21",但它也给了我一个"ParseError: bad input on line 17":return ''.join(encrypted):我试过前后移动缩进。

编辑 2:解决方案如下所示(固定缩进后):

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

编辑 3:如果要在旋转期间保留空格和特殊字符,则需要指定旋转功能仅在字母按字母顺序排列时运行,如下所示:

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:

#if it's a space, keep it a space
#if it's a special character, keep it a special character

        if letter.isalpha():

#use previous rotate function to rotate characters

            encrypted.append(rotate(letter,rot))

        else: 

            encrypted.append(letter)

        return ''.join(encrypted) 

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

print(encrypt(text,rot))

你有一个悬垂的冒号:

    return ''.join(encrypted):
                             ^

删除它。

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