Идеальное число Python

#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. операция говорит о решении «идеального числа», поэтому я отвечаю на проблему «Нет», но также помогаю с другой проблемой…