Ваш тест на то, находится ли num
между двумя показателями, неверен, он должен быть
num > base**(exponential-1) and num < base**exponential
, который также может быть записан как
base**(exponential-1) < num < base**exponential
Также у вас есть опечатка,
return expontential-1
должно быть
return exponential-1
, и вы должны установить начальное значение как
exponential = (base + num) // 2
, чтобы убедиться, что это целое число, но было бы даже больше эффективно, чтобы установить его на:
exponential = num // base
Всего:
def closest_power(base, num):
exponential = num // base
increment = 1
while abs(num-base**exponential) >= 0.01:
print ("Exp: {}, Our number = {}, correct number: {}".format(exponential,base**exponential, num))
if base**(exponential-1) < num < base**exponential:
return exponential-1
if base**exponential > num:
exponential -= 1
else:
exponential += 1
return exponential
print(closest_power(3,12))
Вывод:
Exp: 4, Our number = 81, correct number: 12
Exp: 3, Our number = 27, correct number: 12
2