Python primefac包在导入时不编译

时间:2017-01-06 02:02:34

标签: python package syntax-error prime-factoring

我已经使用El Capitan OS成功地将python模块primefac安装到我的mac中的开发人员框架中。当我调用" import primefac"时,它会返回以下错误:

File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/primefac.py", line 613
    print "\033[1;31m" + (names[g] if g in names else g) + "\033[;m"
                     ^
SyntaxError: invalid syntax

我非常怀疑我的primefac.py版本有语法错误,因为我用gitHub中的primefac.py替换了不同的文件。

我正在使用带有primefac-1.1的Python 3.5.2。可能是什么导致我的primefac.py以某种方式不可读?它可能在错误的目录中吗?

3 个答案:

答案 0 :(得分:3)

primefac库目前只与Python 2兼容 - 如果你想使用它,你需要使用Python 2.7 :(你正在使用Python 3,这意味着语法在图书馆工作不了。

答案 1 :(得分:0)

如果您查看pypi类别部分,您会看到此时此时primefac尚未移植到python3.x。作为替代方案,我建议您可以使用支持python3.x的primefac-fork

答案 2 :(得分:0)

我绝对可以肯定,我的功能没有针对python2的优化,但是我的功能适用于python3。

该函数没有检查器是输入是大于1的正整数还是其他值。您可以根据需要添加它们。实际上,我将以注释形式举一个例子。

它返回一个字典,其中dict.keys是素数因子,dict.values是相应素数因子的指数

def primeFactors(num):
  # try:
  #   if num != int(abs(num)) or num == 1:
  #     return {"WrongInputError": num}
  # except:
  #   return {"WrongInputError": num}
  prime_factors = dict()
  i = 2
  while num > 1:
    is_factor = False
    while num % i == 0:
      if not is_factor:
        prime_factors[i] = 1
      else:
        prime_factors[i] += 1
      is_factor = True
      num //= i
    i += 1
  return prime_factors