我正在尝试写一个函数rot(c,n)
将字母表中的单个字符 c 向前旋转 n 个位置。
def rot(c,n):
""" rotate c forward by n characters,
wrapping as needed; only letters change
"""
if 'a' <= c <= 'z': # lower-case
new_ord = ord(c) + n
if new_ord > ord('z'):
new_ord = new_ord - (2*n)
elif 'A' <= c <= 'Z': # upper-case
new_ord = ord(c) + n
if new_ord > ord('Z'):
new_ord = new_ord - (2*n)
else: # non-alpha
new_ord = ord(c)
return chr(new_ord)
然而我想要的输出如下:
>>> rot('a', 2)
'c'
>>> rot('y', 2)
'a'
>>> rot('A', 3)
'D'
>>> rot('Y', 3)
'B'
>>> rot('!', 4)
'!'
我不断得到错误的输出。有人可以告诉我我做错了什么吗?
你的问题在这里:
new_ord = new_ord - (2*n)
这个想法是,当你超过 z 时,你必须完全删除整个字母表,而不是删除刚刚添加的两倍。
Try:
new_ord = new_ord - 26
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)