我正在尝试用Python编写一个程序,它使用递归函数将字符串中的所有小写字符转换为下一个字符。这是我的尝试:
def convert(s):
if len(s) < 1:
return ""
else:
return convert(chr(ord(s[0+1])))
print(convert("hello"))
当我尝试运行该程序时,它给出错误:字符串索引超出范围。有人可以帮我纠正这个问题吗?我什至不确定我的程序是否正确编码以提供所需的输出:/
最佳答案
您想要返回移位后的字符,然后对字符串的其余部分调用 convert
函数。如果必须使用递归,则需要检查字符串是否耗尽(if not s
与这里的 if len(s) == 0
相同,因为 ''
相当于 False
) 和保释:
def convert(s):
if not s:
return ''
c = s[0]
i = ord(c)
if 96 < i < 123:
# for lower-case characters permute a->b, b->c, ... y->z, z->a
c = chr(((i-97)+1)%26 + 97)
return c + convert(s[1:])
print(convert('hello'))
print(convert('abcdefghijklmnopqrstuvwxyz'))
输出:
ifmmp
bcdefghijklmnopqrstuvwxyza
“a”和“z”的 ASCII 代码分别为 97 和 122,因此我们仅将移位应用于代码 i
在此范围内的字符。如果字符是 z
,请不要忘记换行:您可以使用模算术来完成此操作:((i-97)+1)%26 + 97
。
编辑说明:减去 97,使代码变为 0
到 25
,然后添加 1
mod 26,使 0+ 1 = 1
、1+1 = 2
、...、24+1 = 25
、25+1=0
。然后添加回 97
,以便该代码代表 a
和 z
之间的字母。这样你的字母就会循环
关于python - 递归函数转换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30102343/