Python中的值替换递归

时间:2019-02-27 08:23:59

标签: python

嗨,我对我的作业使用python编程有疑问

任务是以递归方式替换给定值中出现的数字,并且最终输出必须为整数

即digit_swap(521,1,3)-> 523,其中1换成3

下面是我的代码,如果最终答案以字符串形式输出,则对于s = 0-9效果很好

def digit_swap(n, d, s):
    result = ""
    if len(str(n)) == 1:
        if str(n) == str(d):
            return str(s)
        else:
            return str(n)
    elif str(n)[0] == str(d):
        result = result + str(s) + str(digit_swap(str(n)[1:], d, s))
        return result
    else:
        result = result + str(n)[0] + str(digit_swap(str(n)[1:], d, s))
        return result

但是,我很难将最终输出设置为Integer s = 0时代码崩溃 即digit_swap(65132,1,0)-> 6532而不是65032

我的代码是否有修复程序?

def digit_swap(n, d, s):
    result = ""
    if len(str(n)) == 1:
        if str(n) == str(d):
            return str(s)
        else:
            return str(n)
    elif str(n)[0] == str(d):
        result = result + str(s) + str(digit_swap(str(n)[1:], d, s))
        return int(result) # Changes
    else:
        result = result + str(n)[0] + str(digit_swap(str(n)[1:], d, s))
        return int(result) # Changes

3 个答案:

答案 0 :(得分:1)

无需转换为字符串,这可以轻松实现

def digit_swap(n, d, s):
    if n == 0:
        return 0
    lower_n  = (s if (n % 10) == d else (n % 10))
    higher_n = digit_swap(n // 10, d, s) * 10
return higher_n + lower_n

assert digit_swap(521, 1, 3) == 523
assert digit_swap(65132, 1, 0) == 65032

答案 1 :(得分:0)

例如let array = [{ "id": "123", "country": "Brazil", "address": "xyz abc", "date": "Dec 17, 1995, 9:45:17 PM" }, { "id": "443", "country": "Russia", "address": "qwd qwd qwdqw", "date": "Dec 17, 1965, 9:45:17 PM" }, { "id": "123", "country": "Canada", "address": "ktktkt", "date": "Dec 17, 1925, 9:45:17 PM" } ] array.forEach(i => { let found = false array.forEach(j => { if (j == i) { found++; } }); if (found) { array.forEach((k, l) => { if (k == i) { array.splice(l, 1); l--; } }); } }); console.log(array);被强制转换为0。因此,将丢弃零。我建议不要强制转换,而是将其保留为字符串。如果您必须退还int(00),则在返回数字之前不可以强制转换。但是,您仍然在开始时丢弃0。所以总的来说,我建议只返回字符串而不是整数:

int

并命名为:

return str(result) # instead of return int(result)

答案 2 :(得分:0)

不从方法返回int,而是将其从调用方法的地方转换为int。问题出在您的代码尝试将字符串转换为int return int(result)的地方。 因此,如果结果为03,则函数将返回int('03'),即3这样调用您的方法 print int(digit_swap(65132, 1, 0)),因此您将在末尾得到整数。