Вам необходимо вернуть результат вызванной функции.
def sum_of(order):
num = 0
for a in range(order+1):
num = num + a
return count_div(num)
Когда в функции нет явного оператора возврата, python автоматически возвращает None
. Поэтому строка if sum_of(o1) == 20:
сравнивала None
с 20
на каждой итерации.
Только для справки для функции count_div
вы можете использовать sum
для более питонического подхода:
sum(not number%(n+1) for n in range(number)
И sum_of
это просто сложение всех натуральных чисел из 1-n. Это также можно сделать, используя это уравнение n*(n+1)//2
ради эффективности по сравнению с методом зацикливания, что делает sum_of
в значительной степени неуместным.
def count_div(num):
return sum(not num%(n+1) for n in range(num*(num+1)//2))
Тогда для вашего последнего цикла:
for o1 in range(100):
if count_div(o1) == 20:
print(o1)
break