【发布时间】:2014-11-27 21:13:29
【问题描述】:
我正在尝试编写一个函数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). -
你到底是什么意思。
-
他的意思是,那行错了。
-
来吧,试着解决它:假设 ord('a') 是 97,ord('z') 是 122,假设 n 是 2,那么 ord('z') + 2 - 2 * 2 给你?考虑到预期的输出是 ord('b'),实际需要什么计算?如果你想学习,你必须通过铁环。
-
以
rot('y', 2)为例。最初,new_ord是比z多一个字母的任何字符。if new_ord > ord('z'):行检测到这一点,并说“从值中减去 2*n”。所以这封信将四个字符回拨到 w。