#python #return-value
Вопрос:
В этом вопросе Python я должен получить значение False, если число не является идеальным. вместо этого я получаю «Нет». Что я должен изменить?
def perfect(number):
sum = 0
is_perfect = False
if number < 0:
return is_perfect
for i in range(1, number):
if(number % i == 0):
sum = sum i
if (sum == number):
is_perfect = True
return is_perfect
print(perfect(8))
Комментарии:
1. Ваш
if (sum == number):
код должен быть после цикла for, а не внутри него. И тогда вы должны вернуть False, если число не является идеальным (или просто уменьшить отступ в вашейreturn is_perfect
строке).2. Добавьте значение по умолчанию
return False
в последней строке функции3. Это не ваша проблема, но вы не должны вызывать переменную
sum
или какое-либо встроенное имя. Скрытие встроенного имени означает, что вы не сможете получить доступ к объекту, за которым вы следите, так как вы больше не можете получить доступ к нему по имени.4. некоторые вещи стараются избегать использования зарезервированных слов в качестве переменных, это будет работать, но может вызвать у вас проблемы,
sum
это зарезервированное слово, также вы могли бы избегать использованияis_perfect
переменной, но возвращатьTrue
илиFalse
напрямую более четкое значение в каждом случае. И последнее, это ничего не возвращает, потому что, еслиnumber != sum
у вас нет возврата.. так что добавьте еще.5. @UlisesBussi Вы имеете в виду встроенное имя функции, а не зарезервированные слова. Зарезервированные слова-это ключевые слова (такие как
return
илиdef
), и синтаксически невозможно использовать их в качестве имен переменных.
Ответ №1:
Вы должны вернуться False
в конце, иначе никто не возвращается неявно:
def perfect(number):
...
for i in range(1, number):
...
return False
Ответ №2:
Привет, твоя проблема в том, что у тебя нет возврата, когда ты не подходишь if (sum == number):..
итак, самое простое решение-добавить в конце значение return False. Но также ваше условие суммы находится внутри, потому что это не нормально, потому что вы можете столкнуться с фальшивым совершенством, таким как 24… так что будьте осторожны с этим условием
изменить 0 не является идеальным числом, поэтому добавьте условие в первое, если
def perfect(number):
sum = 0
is_perfect = False
if number <= 0:
return is_perfect
for i in range(1, number):
if(number % i == 0):
sum = sum i
if (sum == number):
is_perfect = True
return is_perfect
return False
Я бы полностью изменил ваш код, чтобы сделать его немного более понятным:
def is_perfect(number):
acum= 0
if number <= 0:
return False
for i in range(1, number):
if(number % i == 0):
acum = i
return (acum == number) #return true if the condition match, False if not
#just to check function
print([(i,is_perfect(i)) for i in range(1,100) if is_perfect(i)])
#output
[(6, True), (28, True)]
Комментарии:
1. Не совсем верно, потому что AFAIK 0 также не является идеальным числом
2. это может привести к другим результатам — операция может остановиться перед последней итерацией и вернуть значение True, ваша может добавить еще одно i, а затем вернуть значение False. Нет, я не проверял логику, если что-то подобное действительно возможно (если есть такой случай), это просто то, что я заметил в коде.
3. Тогда ваш код корректен для фактической реализации идеального числа, но технически вопрос состоял в том, чтобы просто спросить о проблеме с возвратом None.
4. операция говорит о решении «идеального числа», поэтому я отвечаю на проблему «Нет», но также помогаю с другой проблемой…