早些时候我们创建了一个函数,它接收并旋转单个字符“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))
答案 0 :(得分:2)
你有一个悬垂的冒号:
return ''.join(encrypted):
^
删除它。
顺便说一下,你的return
在你的for循环中,这会导致函数在第一次迭代时退出。