#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. Да, это только для положительных моментов.