我正在尝试构建一个函数(使用函数递归)来扫描数字n,以查找数字d,&如果找到,我想用指定的数字r替换d,如下面的代码所示。此代码工作正常,但输出是字符串格式。我已经尝试了很多方法来改变它输出一个整数但无济于事。谢谢你的帮助!
def replace_digit(n, d, r):
number = str(n)
i = 0
if len(number) == 1:
if number == str(d):
return str(r)
else:
return number
else:
if number[i] == str(d):
return number[:i] + str(r) + replace_digit(int(number[i+1:]),d,r)
else:
return number[i] + replace_digit(int(number[i+1:]),d ,r)
答案 0 :(得分:1)
def replace_digit(number, digit, replacement):
if number == 0:
return number # base case
quotient, remainder = divmod(number, 10)
if remainder == digit:
remainder = replacement
return replace_digit(quotient, digit, replacement) * 10 + remainder
print(replace_digit(961748941982451653, 9, 2))
<强>输出强>
261748241282451653
答案 1 :(得分:0)
这很简单,但您需要在str
和int
之间进行一些类型转换:
def replace_digit(n, d, r):
number = str(n)
rest = str(replace_digit(int(number[1:]), d, r)) if len(number) > 1 else ""
digit = number[0]
digit = str(r) if digit == str(d) else digit
return int(digit + rest)
使用包装器还有另一种可能性。这限制了类型转换的数量。
def replace_digit(n, d, r):
def replace(n, d, r):
rest = replace(n[1:], d, r) if len(n) > 1 else ""
return r + rest if n[0] == d else n[0] + rest
return int(replace(str(n), str(d), str(r)))
答案 2 :(得分:0)
如果您已经有工作功能,为什么不解决问题?
enter code here
答案 3 :(得分:0)
解决方案是使用int()
包装返回值,正如评论和其他答案中已经说明的那样。
但这是一个根本不使用字符串操作的版本。只是为了好玩。
def replace_digit(n, d, r):
rest = n // 10 # all but the rightmost digit
digit = n - rest * 10 # only the rightmost digit
digit = r if digit == d else digit
if rest == 0:
return digit
return replace_digit(rest, d, r) * 10 + digit
答案 4 :(得分:0)
不要返回连接,而是尝试这个:
if number[i] == str(d):
new_number = number[:i] + str(r) + replace_digit(int(number[i+1:]),d,r)
else:
new_number = number[i] + replace_digit(int(number[i+1:]),d ,r)
return int(new_number)