嗨,我对我的作业使用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
答案 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))
,因此您将在末尾得到整数。