尝试使用dict()查找素数因子时引发TypeError

时间:2013-12-20 19:22:07

标签: python

这会引发TypeError异常,我无法弄清楚原因。谢谢你的任何建议!

import math

def get_pf(X, pf):
    for n in range(2, int(math.sqrt(float(X))) + 1):
        if X % n == 0:
            pf[n] = pf.get(n, 0) + 1
            get_pf(X/n, pf)

    pf[X] = pf.get(X, 0) + 1

pf = {}
N = input()    
get_pf(N, pf)

print(str(pf))

2 个答案:

答案 0 :(得分:1)

input在Python 3中返回一个字符串,因此您需要将其转换为int:

N = int(input())

答案 1 :(得分:1)

问题在于:

    if X % n == 0:

X是一个字符串,因为这是input返回的内容。因此,X % n正在尝试进行字符串格式化。如果字符串中没有%个字符,则会引发:

TypeError: not all arguments converted during string formatting

您已经在float(X)处理,直接在上面的行中解决了这个完全相同的问题。你所要做的就是再做同样的事情。


但是,首先将数字作为数字传递可能更简单:get_pf(float(N), pf)


另外,你确定你真的想要浮动吗? 2.71319的主要因素是什么?如果您想要整数,请使用int,而不是float