我正在用 Python 编写一个函数,它告诉我们一个数字除另一个数字的最大幂。我在第 9 行不断收到 ZeroDivisionError: float Floor 除以零的错误。我不知道该怎么做才能尝试修复此错误。
def greatest_power_dividing(divisor,n):
if divisor == 0: #reason for float division error?
raise ValueError("Divisor cannot be zero.")
if divisor > n:
raise Error("divisor cannot be greater than number input")
power = 0
while n//(divisor**power) >= 1:
if n//divisor**power <n: #less than, then keep incrementing
power += 1
else:
power -= 1 #go back one power
return power
assert greatest_power_dividing(2, 8) == 3
assert greatest_power_dividing(3, 15) == 1
assert greatest_power_dividing(5, 15) == 1
assert greatest_power_dividing(5, 75) == 2
assert greatest_power_dividing(7, 75) == 0
到目前为止,为了排除故障,我已尝试将 / 更改为 // 以便不允许浮动。我还尝试过,如果除数等于 0,则引发 ValueError;如果除数大于 n(用户输入的数字),则引发另一个错误。
当我将 / 更改为 // 时,我也开始出现浮动地板划分错误。
我认为你搞砸了这个算法。它不断减少功率,所以
(divisor**power)
限制为零,Python 捕获除以它的结果。
要解决此问题 - 您应该将返回点定义为第二个数字不能被第一个数字整除时的状态。 IE。
n % divisor != 0
divisor**power
始终是浮点数,就像代码中一样。随着幂变得越来越负,它最终达到 -1075,此时除数**幂被评估为 0.0。您应该考虑的最小功效是 0 或 1,具体取决于您的目标是什么。基本上,您的代码中需要新的逻辑。
这是您的代码副本,其中包含不同的循环以找到最大的功率。
def greatest_power_dividing(divisor, n):
if divisor == 0: # reason for float division error?
raise ValueError("Divisor cannot be zero.")
if divisor > n:
raise ValueError("divisor cannot be greater than number input")
power = 0
while n % divisor == 0:
n //= divisor
power += 1
return power