我需要用一个给定的数字来计算,有多少个“五”、“二”和“一”可以进入这些数字。抱歉,我的英语有点有限,无法解释:) 也许举个例子更好:
锻炼: 打印邮票(8) 结果应该是:(1,1,1)(一个5p印章,一个2p印章和一个1p印章)
我已经找到了实现这个目标的方法,但是tuple()正在打印结果并显示“None”,我不知道为什么。 我还想知道有没有更好、更短的方法来得到正确的结果。在
这就是我所做的:
def stamps(dinero):
p5=dinero/5
p5a=p5*5
resultado1=dinero-p5a
dinero=resultado1
p2=dinero/2
p2a=p2*2
resultado2=dinero-p2a
dinero=resultado2
p1=dinero/1
p1a=p1*1
resultado3=dinero-p1a
dinero=resultado3
print tuple([p5,p2,p1])
我得到的结果是:打印邮票(8)(1,1,1) 无
更新:I´ve found a better solution,我把它贴在这里,以防有人想找到更好的解决方案:
^{pr2}$
将函数内部的“print”更改为“return”,当您调用“print stamps(8)”时,应该可以修复它。另外,不,对于您简单地选择图章值5、2、1,除了您正在做的之外,没有其他更有效的方法来找到一个好的解决方案(唯一可能的改进可能是使用for循环,如果您的图章值比只有3个多)如果您的图章值更复杂,那么您可以通过使用动态规划。在
正如人们所说,可以将print改为return,但是代码的一大改进是使用
%
(或模)运算符。在在你的代码中这一行:
^{pr2}$执行整数除法,而下面的函数通过将除数的倍数乘以原始数并减去它来得到余数:
大多数语言都提供一个modulo function,它只需一个步骤即可完成此操作:
这对于被3除的部分也是一样的,当你被1除时,永远不会有整数remainer,所以你可以完全删除代码。在
Python还有一种方法,可以使用返回除数和模的^{} 再次缩短此值:
最后,您可以完全生成它,方法是让另一个函数同时使用amount和一个stamp值数组并调用它:
关于代码执行速度:
我对一些选项运行了timeit,对}的调用甚至比对{}的单个调用都要快:
/
和{相关问题 更多 >
编程相关推荐