函数 rrot(rot, s) 以整数 rot 和字符串 s 以及 returns s 的副本作为输入,其中 s 被反转,然后被 rot 移位
Function rrot(rot, s) that takes as input an integer rot and a string s and returns a copy of s that s is reversed and then shifted by rot
我正在尝试对仅包含大写字母、下划线和句点的字符串实施与凯撒密码类似的编码方案。旋转将使用字母顺序执行:
ABCDEFGHIJKLMNOPQRSTUVWXYZ_。
到目前为止我的代码:
def rrot(rot, s):
'returns reverse rotation by rot of s'
res = ''
for c in s:
x = ord(c)
res += chr(x + rot)
copy = res[::-1]
return copy
输出的一些例子是:
>>> rrot(1, 'ABCD')
'EDCB'
>>> rrot(3, 'YO_THERE.')
'CHUHKWBR.'
>>> rrot(1, '.DOT')
'UPEA'
>>> rrot(1, 'SNQZDRQDUDQ')
'REVERSE_ROT'
但是当 运行 时,它围绕整个字母表运行,包括符号 {[/ 等。我得到了大多数字母的正确移位,但得到了不需要的符号。我的错误输出:
>>> rrot(3, 'YO_THERE.')
'1HUHKWbR\'
>>> rrot(1, 'SNQZDRQDUDQ')
'REVERSE[ROT'
但这是正确的:
>>> rrot(1, 'ABCD')
'EDCB'
如何让它只遵循字符的字母顺序 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_.'?
您的代码可以简单地修复:
def rrot(rot, s):
'returns reverse rotation by rot of s'
res = ''
for c in s:
x = ord(c)
res += chr(x + rot)
copy = res[::-1]
return copy
您可以修复它以使用另一个字符顺序替换:
x = ord(c)
res += chr(x + rot)
同说:
x = alphabet.index(c)
res += alphabet[(x + rot) % len(alphabet)]
考虑:
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_.'
def rrot(rot, s):
'returns reverse rotation by rot of s'
res = ''
for c in s:
x = alphabet.index(c)
res += alphabet[(x + rot) % len(alphabet)]
copy = res[::-1]
return copy
使用那些不好的例子:
>>> rrot(3, 'YO_THERE.')
'1HUHKWbR\'
>>> rrot(1, 'SNQZDRQDUDQ')
'REVERSE[ROT'
这里是这些例子的结果:
>>> rrot(3, 'YO_THERE.')
'CHUHKWBR.'
>>> rrot(1, 'SNQZDRQDUDQ')
'REVERSE_ROT'
另一种方法是构建翻译table,例如:
trans = dict(zip(alphabet, alphabet[rot:] + alphabet[:rot]))
在循环外然后使用:
res += trans[c]
像这样:
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_.'
def rrot(rot, s):
'returns reverse rotation by rot of s'
trans = dict(zip(alphabet, alphabet[rot:] + alphabet[:rot]))
res = ''
for c in s:
res += trans[c]
copy = res[::-1]
return copy
结果相同:
>>> rrot(3, 'YO_THERE.')
'CHUHKWBR.'
>>> rrot(1, 'SNQZDRQDUDQ')
'REVERSE_ROT'
我正在尝试对仅包含大写字母、下划线和句点的字符串实施与凯撒密码类似的编码方案。旋转将使用字母顺序执行: ABCDEFGHIJKLMNOPQRSTUVWXYZ_。
到目前为止我的代码:
def rrot(rot, s):
'returns reverse rotation by rot of s'
res = ''
for c in s:
x = ord(c)
res += chr(x + rot)
copy = res[::-1]
return copy
输出的一些例子是:
>>> rrot(1, 'ABCD')
'EDCB'
>>> rrot(3, 'YO_THERE.')
'CHUHKWBR.'
>>> rrot(1, '.DOT')
'UPEA'
>>> rrot(1, 'SNQZDRQDUDQ')
'REVERSE_ROT'
但是当 运行 时,它围绕整个字母表运行,包括符号 {[/ 等。我得到了大多数字母的正确移位,但得到了不需要的符号。我的错误输出:
>>> rrot(3, 'YO_THERE.')
'1HUHKWbR\'
>>> rrot(1, 'SNQZDRQDUDQ')
'REVERSE[ROT'
但这是正确的:
>>> rrot(1, 'ABCD')
'EDCB'
如何让它只遵循字符的字母顺序 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_.'?
您的代码可以简单地修复:
def rrot(rot, s):
'returns reverse rotation by rot of s'
res = ''
for c in s:
x = ord(c)
res += chr(x + rot)
copy = res[::-1]
return copy
您可以修复它以使用另一个字符顺序替换:
x = ord(c)
res += chr(x + rot)
同说:
x = alphabet.index(c)
res += alphabet[(x + rot) % len(alphabet)]
考虑:
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_.'
def rrot(rot, s):
'returns reverse rotation by rot of s'
res = ''
for c in s:
x = alphabet.index(c)
res += alphabet[(x + rot) % len(alphabet)]
copy = res[::-1]
return copy
使用那些不好的例子:
>>> rrot(3, 'YO_THERE.')
'1HUHKWbR\'
>>> rrot(1, 'SNQZDRQDUDQ')
'REVERSE[ROT'
这里是这些例子的结果:
>>> rrot(3, 'YO_THERE.')
'CHUHKWBR.'
>>> rrot(1, 'SNQZDRQDUDQ')
'REVERSE_ROT'
另一种方法是构建翻译table,例如:
trans = dict(zip(alphabet, alphabet[rot:] + alphabet[:rot]))
在循环外然后使用:
res += trans[c]
像这样:
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_.'
def rrot(rot, s):
'returns reverse rotation by rot of s'
trans = dict(zip(alphabet, alphabet[rot:] + alphabet[:rot]))
res = ''
for c in s:
res += trans[c]
copy = res[::-1]
return copy
结果相同:
>>> rrot(3, 'YO_THERE.')
'CHUHKWBR.'
>>> rrot(1, 'SNQZDRQDUDQ')
'REVERSE_ROT'