Как рассчитать мощность?

#python

Вопрос:

 def is_power_of(number, base):
  # Base case: when number is smaller than base.
  if number < base:
    # If number is equal to 1, it's a power (base**0).
    return True

  # Recursive case: keep dividing number by base.
  return is_power_of(number/base , base)

print(is_power_of(8,2)) # Should be True
print(is_power_of(64,4)) # Should be True
print(is_power_of(70,10)) # Should be False
 

Единственное, что я изменил True , — это «и number/base , base «. Я не могу понять, как сделать True так, чтобы это было правдой для всех случаев, кроме !=1.

Комментарии:

1. Ответ содержится в вашем вопросе if number == 1: return True

2. Или: if number == 1 or number < base: return True

3. На самом деле вы должны сделать: вернуть число == 1; таким образом, вы вернете true, если оно равно 1, а false-нет.

4. Роб прав, так как пустое место было только перед return тем, что я не очень хорошо объяснил или показал. Это работает, потому что мы используем == , который возвращает T/F, вау, как я об этом не подумал.

Ответ №1:

Поскольку все сводится к тому number == 1 , хотите вы этого или нет, вы можете вернуть это bool напрямую:

 def is_power_of(number, base):
  # Base case: when number is smaller than base.
  if number < base:
    # If number is equal to 1, it's a power (base**0).
    return number == 1

  # Recursive case: keep dividing number by base.
  return is_power_of(number/base , base)
 

Результаты ваших тестов следующие:

 True
True
False
 

которые ожидаются.

Комментарии:

1. Это вернет значение a False , если number оно меньше base единицы и не равно единице.

2. @Austin Звучит так, как будто OP рассматривает только неотрицательные показатели, хотя, если мы хотим рассмотреть и отрицательные, то да, эта новая функция не будет работать.

3. @Austin можете ли вы привести пример, где число меньше, чем база, и оно должно возвращать значение True (я предполагаю, что это не предназначено для баз, меньших этой)?

4. Да, это только для положительных моментов.