def fi_da_prfac(var):
fac = []
prfac = []
z = range(2, (var/2)+1)
z.append(var)
for t in z:
if var == t:
prfac.append(t)
z = range(2, (var/2)+1)
z.append(var)
break
else:
if var % int(t) == 0:
prfac.append(t)
var = var/t
del z
z = range(2, (var/2)+1)
z.append(var)
del t
return prfac
我是编码的初学者。我正在尝试编写代码来查找给定数字的Prime因子分解。如果我们分析代码,我想要做的是,如果我找到一个因素,我想再次启动for循环,即。从t = 2开始for循环。我没有找到任何方法来做到这一点。所以我删除了" t"在末尾。但是代码不能提供所需的输出。我尝试了很多调试它但不能。请帮忙
答案 0 :(得分:0)
你缺少的谜题的基本部分是yield运算符,这使得函数充当生成器并在循环运行时保持其位置。但需要注意的一点是,输出将是一个生成器对象,必须循环才能提取所需的输出。
你的例子:
import math
def fi_da_prfac(var):
z = range(2, math.ceil(var/2)+1)
z.append(var)
for t in z:
if var % int(t) == 0:
yield t
prfac = yield_eg(15)
[fac for fac in prfac]
这是学习如何编码的一个很好的问题,但是正如其他人提到的那样,如果需要,还有更简洁的预制函数来实现这一目标。
Usherwood