我需要找到一种方法在完成一个测试样本后重置 "count" 而没有在递归函数期间重置计数
I need to find a way to reset "count" after completing one test sample with out reseting count during the recursive function
这是我的代码需要做的:
写一个函数,persistence
,它接受一个正参数num
和returns它的乘法持久性,也就是你必须将[=中的数字相乘的次数14=] 直到你达到一位数。
Test.it("Basic tests")
Test.assert_equals(persistence(39), 3)
Test.assert_equals(persistence(4), 0)
Test.assert_equals(persistence(25), 2)
Test.assert_equals(persistence(999), 4)
这是一个 Codewars 挑战。我可以单独测试断言样本,但不能同时测试所有样本。 Codewars 需要能够同时 运行 所有测试样本。我需要找到一种方法在完成一个测试样本后重置 count
,而不是在递归函数期间重置 count
。
count = 0
def persistence(n):
# your code
global count
#def recursion(result):
number_str = str(n)
ints = [int(i) for i in number_str if i != '0']
result = 1
for j in ints:
result = result * j
if result >= 10:
print(ints,"\n\n------------------------------------------")
count += 1
print(count)
print(result)
return persistence(result)
else:
if count > 0:
count += 1
return count
else:
return count
这是我想出的代码。我需要我的函数一次 运行 所有四个测试。我的函数可以递归地一次呈现一个测试,但不能一次呈现所有测试。我需要弄清楚如何在每次测试样本断言后重置 count
。
您可以只传递递归调用的倒计时,如下所示:
count = 0
def persistence(n, count):
# ..
# update count
# ..
return persistence(result, count)
# ...
return count
或者如果你不能改变persistance
的签名,使用辅助函数,这在函数式编程中很常见。
def persistance(n):
return persistance_aux(n, 0)
def persistance_aux(n, count):
# ....
你的递归函数应该不需要全局变量。您可以将 counts
作为参数传递,使用默认值来处理未传入的 public API 情况:
def persistence(n, count=0):
...
# everything is the same up until the recursion
return persistence(result, count)
如果您愿意,您可以通过仅进行内联加法而不是在 count
上使用 +=
语句来稍微简化代码,但这不会改变代码的行为。
我还要指出,由于您的函数是尾递归的,因此您可以很容易地将递归替换为循环。我认为这样的事情可能会做到:
def persistance(n):
count = 0
while n >= 10:
count += 1
ints = [int(i) for i in str(n) if i != '0']
n = 1
for i in ints:
n *= i
return count
这是我的代码需要做的:
写一个函数,persistence
,它接受一个正参数num
和returns它的乘法持久性,也就是你必须将[=中的数字相乘的次数14=] 直到你达到一位数。
Test.it("Basic tests")
Test.assert_equals(persistence(39), 3)
Test.assert_equals(persistence(4), 0)
Test.assert_equals(persistence(25), 2)
Test.assert_equals(persistence(999), 4)
这是一个 Codewars 挑战。我可以单独测试断言样本,但不能同时测试所有样本。 Codewars 需要能够同时 运行 所有测试样本。我需要找到一种方法在完成一个测试样本后重置 count
,而不是在递归函数期间重置 count
。
count = 0
def persistence(n):
# your code
global count
#def recursion(result):
number_str = str(n)
ints = [int(i) for i in number_str if i != '0']
result = 1
for j in ints:
result = result * j
if result >= 10:
print(ints,"\n\n------------------------------------------")
count += 1
print(count)
print(result)
return persistence(result)
else:
if count > 0:
count += 1
return count
else:
return count
这是我想出的代码。我需要我的函数一次 运行 所有四个测试。我的函数可以递归地一次呈现一个测试,但不能一次呈现所有测试。我需要弄清楚如何在每次测试样本断言后重置 count
。
您可以只传递递归调用的倒计时,如下所示:
count = 0
def persistence(n, count):
# ..
# update count
# ..
return persistence(result, count)
# ...
return count
或者如果你不能改变persistance
的签名,使用辅助函数,这在函数式编程中很常见。
def persistance(n):
return persistance_aux(n, 0)
def persistance_aux(n, count):
# ....
你的递归函数应该不需要全局变量。您可以将 counts
作为参数传递,使用默认值来处理未传入的 public API 情况:
def persistence(n, count=0):
...
# everything is the same up until the recursion
return persistence(result, count)
如果您愿意,您可以通过仅进行内联加法而不是在 count
上使用 +=
语句来稍微简化代码,但这不会改变代码的行为。
我还要指出,由于您的函数是尾递归的,因此您可以很容易地将递归替换为循环。我认为这样的事情可能会做到:
def persistance(n):
count = 0
while n >= 10:
count += 1
ints = [int(i) for i in str(n) if i != '0']
n = 1
for i in ints:
n *= i
return count