проблема с делителями числа в python с использованием while

#python

Вопрос:

я пытаюсь посчитать делитель, если число имеет 4 делителя, напечатает «элегантное число», иначе «не элегантное число», но у меня возникли проблемы при печати, я закончил показывать делители из числа, но моя программа не может показать элегантное число или нет. у меня есть ваше мнение, чтобы исправить это. вот мой код:

 N = int(input("enter number: "))
i = 1
factor = 0 # this for count divisors but doesn't right
while (i <= N):
    if(N%i==0):
        print(i)
    factor =i # this for count divisors but doesn't right
    i =1
if(factor==4):
    print("elegant number")
else:
    print("not elegant number")
 

я поместил комментарий в строку, в которой указана строка для делителей числа.

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

1. factor вычисляет сумму делителей, а не количество делителей. Я думаю, ты хочешь написать factor = 1 вместо factor =i этого .

2. Также разве это не должно быть внутри условия? Вы просто суммируете все числа от 1 до N

Ответ №1:

Я думаю, что основной проблемой внутри кода было добавление factor = i вместо factor = 1 (для учета нового делителя). Кроме того, размещение factor = 1 условия должно было быть внутри if-statement .

Вот обновленная версия кода:

 N       = int(input("enter number: "))
factors = 0 

for i in range(1,N 1): # Add N 1 to loop over "i=N" as well
    if N%i == 0:
        print(i)
        factors  = 1

if factors == 4 :
    print("elegant number")
else:
    print("not elegant number")
 

Пожалуйста, дайте мне знать в разделе комментариев, если вам нужна дополнительная помощь. Овации,

PS. Альтернативная версия с использованием while-loop :

 N       = int(input("enter number: "))
factors = 0 

i = 1
while i<=N:
    if N%i == 0:
        print(i)
        factors  = 1
    i  = 1

if factors == 4 :
    print("elegant number")
else:
    print("not elegant number")
 

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

1. что мне делать, если я хочу использовать цикл while, а не для цикла

2. @ryand Переключиться на цикл for 😉

3. значит, использование цикла while невозможно?

4. Да, это возможно, пожалуйста, найдите прилагаемую вторую версию в оригинальном ответе. Просто использование a while-loop на самом деле не оправдано.

5. Очень хорошо сказано! Использование while цикла не оправдано . @ryand Когда у вас есть очень определенный диапазон для перебора, имеет больше смысла использовать for цикл. Вы должны использовать цикл while только тогда, когда вы не знаете, когда он завершится .