【发布时间】:2016-11-27 10:31:52
【问题描述】:
我想找到一个数字的所有底数和指数。
例子:
Number = 64
2^6=64
4^3=64
8^2=64
64^1=64
Number = 1845.28125
4.5^5=1845.28125
Number = 19683
3^9=19683
27^3=19683
19683^1=19683
我现在要做的是制作一个整数“数字”,然后只看多次计算的结果就可以得到正确的结果:
basehits, expohits = [], []
if eval(Number) > 1000:
to = 1000 #base max 1000 in order to avoid too many calculations
else:
to = int(eval(Number))
for n in range(1,to):
for s in range(1,31): #just try with exponents from 1 to 30
calcres = pow(n,s)
if calcres == eval(Number):
basehits.append(n)
expohits.append(s)
elif calcres > eval(Number):
break
问题是这永远不会找到浮点数,例如1845.28125(见上文)。
在只知道结果的情况下,有没有更好的方法来查找指数和底?
【问题讨论】:
-
不要使用
eval。请改用int。 -
eval和exec通常应避免使用,因为它们可能存在安全风险。有关详细信息,请参阅 SO 老将 Ned Batchelder 的Eval really is dangerous。
标签: python python-3.x math pow