Python 循环不为'时递增;在某些测试用例中不起作用
我必须定义一个函数,其中: 从一个正整数Python 循环不为'时递增;在某些测试用例中不起作用,python,python-3.x,math,while-loop,calculation,Python,Python 3.x,Math,While Loop,Calculation,我必须定义一个函数,其中: 从一个正整数original开始,继续相乘original 通过n计算生成的所有倍数之和,包括 原始直到总和不再小于总计。归还 达到或高于此值所需的最小乘法次数 给定的总数 例如: 相乘直到总数达到(1,5,2) 1*2=2,(1+2)5,需要2次乘法 相乘直到总数达到(1,15,2) 1*2=2,(1+2)试试这个,更小更整洁。注释中有解释 def multiply_until_total_reached(original, total, n): s
original
开始,继续相乘original
通过n
计算生成的所有倍数之和,包括
原始
直到总和不再小于总计
。归还
达到或高于此值所需的最小乘法次数
给定的总数
例如:
相乘直到总数达到(1,5,2)
1*2=2,(1+2)5,需要2次乘法相乘直到总数达到(1,15,2)
1*2=2,(1+2)试试这个,更小更整洁。注释中有解释
def multiply_until_total_reached(original, total, n):
sum = original #Initialize sum to original
mult_no = 0
while sum < total: #Will auto return 0 if original>=total
sum += original*n #Add original * n
original = original*n #Update the new original
mult_no += 1 #Increase multiplications by 1
return mult_no
print multiply_until_total_reached(1,5,2)
print multiply_until_total_reached(1,15,2)
print multiply_until_total_reached(1,1038,2)
#Output
#2
#3
#10
def乘法直到达到总数(原始、总计、n):
sum=原始#将sum初始化为原始
mult_no=0
而sum=total,将自动返回0
总和+=原始*n#添加原始*n
原件=原件*n#更新新原件
mult_no+=1#将乘法增加1
返回mult_编号
打印乘法直到达到总数(1,5,2)
打印乘法直到达到总数(1,15,2)
打印乘法直到达到总数(11038,2)
#输出
#2
#3
#10
试试这个,小得多,整洁得多。注释中有解释
def multiply_until_total_reached(original, total, n):
sum = original #Initialize sum to original
mult_no = 0
while sum < total: #Will auto return 0 if original>=total
sum += original*n #Add original * n
original = original*n #Update the new original
mult_no += 1 #Increase multiplications by 1
return mult_no
print multiply_until_total_reached(1,5,2)
print multiply_until_total_reached(1,15,2)
print multiply_until_total_reached(1,1038,2)
#Output
#2
#3
#10
def乘法直到达到总数(原始、总计、n):
sum=原始#将sum初始化为原始
mult_no=0
而sum=total,将自动返回0
总和+=原始*n#添加原始*n
原件=原件*n#更新新原件
mult_no+=1#将乘法增加1
返回mult_编号
打印乘法直到达到总数(1,5,2)
打印乘法直到达到总数(1,15,2)
打印乘法直到达到总数(11038,2)
#输出
#2
#3
#10
您的问题是在每次循环迭代中重新分配数字的总和。您只需在每次迭代中将multnum
添加到sumofdigits
(sumofdigits+=multnum
)。此外,您的循环条件需要固定为sumofdigits
,因为您必须“返回达到或高于给定总数所需的最小乘法次数。”您的问题是,您在每次循环迭代中都要重新分配sumofdigits
。您只需在每次迭代中将multnum
添加到sumofdigits
(sumofdigits+=multnum
)。此外,您的循环条件需要固定为sumofdigits
,因为您必须“返回达到给定总数上方或值所需的最小乘法数。”因为您的代码的解决方案已经发布,并且您接受其他解决方案,请允许我提出以下建议,它充分利用了Python的>3.2acculate()
函数:
from itertools import accumulate, count
def multiply_until_total_reached(original, total, n):
for i, result in enumerate(accumulate(original*n**c for c in count())):
if result >= total: return i
assert multiply_until_total_reached(1,5,2) == 2
assert multiply_until_total_reached(1,15,2) == 3
assert multiply_until_total_reached(1,1038,2) == 10
由于您的代码的解决方案已经发布,并且您接受其他解决方案,请允许我提出以下建议,这充分利用了Python的>3.2acculate()
函数:
from itertools import accumulate, count
def multiply_until_total_reached(original, total, n):
for i, result in enumerate(accumulate(original*n**c for c in count())):
if result >= total: return i
assert multiply_until_total_reached(1,5,2) == 2
assert multiply_until_total_reached(1,15,2) == 3
assert multiply_until_total_reached(1,1038,2) == 10
您缺少一个total==原始
案例。你应该有O(log n)
解决方案,其中n
表示total
的值。。我的意思是O(logn),其中n是需要的乘法数:-P。。不过,在这种情况下,这可能有点过头了。。注意它是如何与一个GP的和相关的。@AbhishekJebaraj我知道,这可以在O(1)时间内使用GP公式和对数不等式来完成,尽管如果n
介于0和1之间,这会稍微复杂一些,如果n
为负,则根本不起作用。此解决方案保证适用于所有n
。您缺少一个total==original
案例。你应该有O(log n)
解决方案,其中n
表示total
的值。。我的意思是O(logn),其中n是需要的乘法数:-P。。不过,在这种情况下,这可能有点过头了。。注意它是如何与一个GP的和相关的。@AbhishekJebaraj我知道,这可以在O(1)时间内使用GP公式和对数不等式来完成,尽管如果n
介于0和1之间,这会稍微复杂一些,如果n
为负,则根本不起作用。此解决方案保证适用于所有n
。哦,好的,这很有意义。所以我必须删除第一个sumofdigits=multnum+原件,只使用sumofdigits+=multnum?TIA@Pritster5是的。哦,好吧,这很有道理。所以我必须删除第一个sumofdigits=multnum+原件,只使用sumofdigits+=multnum?TIA@Pritster5是的。虽然这以一种更简洁的方式解决了问题,但它并不能真正回答问题,也无助于OP理解。是的,如果他是一名学生,想学习并找出自己的错误,这不会有多大帮助。。但是如果他在工作,想要一些更整洁的代码和一个快速的答案,这对他会有很大帮助。老实说,我正在阅读这些代码,它对我来说非常有意义。这只是一种不同的(更快/更清洁)的方法来解决问题。我理解我的错误,正如邪恶德在下面解释的那样。虽然这以一种更简洁的方式解决了问题,但它并不能真正回答问题,也不能帮助OP理解。是的,如果他是一名学生,想要学习并找出他的错误,这将不会有多大帮助。。但是如果他在工作,想要一些更整洁的代码和一个快速的答案,这对他会有很大的帮助