python - 递归函数转换字符

标签 python recursion

我正在尝试用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,使代码变为 025,然后添加 1 mod 26,使 0+ 1 = 11+1 = 2、...、24+1 = 2525+1=0 。然后添加回 97,以便该代码代表 az 之间的字母。这样你的字母就会循环

关于python - 递归函数转换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30102343/

相关文章:

python - python中的慢递归

python - 在不使用经典 RPyC 的情况下将 RPyC 的标准输出重定向到本地客户端

python - 使用正则表达式python对字符串中的数字进行多次替换

Microsoft Azure 上的 Python FastCGI 错误

python - 在Python中递归打印对象的所有属性、列表、字典等

Javascript 回调函数和递归

Java 递归优化

python - 通过在单个记录中多次出现嵌套键进行分组

mysql - mysql中的递归slug url

string - 递归+回溯。返回什么?