接收和旋转字符串中字符的函数 - 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 循环中,这将导致函数在第一次迭代时退出。
之前我们创建了一个接收单个字符并将其旋转 "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 循环中,这将导致函数在第一次迭代时退出。