Я написал начинающую программу, которая направлена на поиск и печатать простые множители любого числа:Слабо простые множители
def is_prime(n):
if n == 3:
return True
elif n == 4:
return False
else:
n = int(n**0.5)+1
for i in range(2,n):
if n % i == 0:
return False
return True
def prime_factors(n):
for i in range(2,n):
if n % i == 0:
x = i
primes.append(x)
y = n/x
return y
break
primes = []
def main(y):
while not is_prime(y):
y = prime_factors(y)
primes.append(y)
print(primes)
Вот примеры прогонов программы, которые имеют меня путать:
main(625)
[5, 5, 5, 5]
...
main(160)
[160]
...
main(6)
[6]
...
main(1007)
TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'float'
Некоторые входы работают, а некоторые нет. Я не могу понять, почему. Я также не могу понять, как исправить эту ошибку. Пожалуйста помоги. Спасибо.
* Ваш код * имеет меня путают. Почему «prime_factors» не проверяет, есть ли каждый фактор 'is_prime'? Почему у вас есть один фиксированный список «простых чисел»? Я не понимаю, почему вы ожидаете, что это будет работать вообще. – jonrsharpe
, но конкретно ... if 'n% i' никогда не равен нулю, тогда он возвращает None, который присваивается y. 'is_prime (None)' пытается получить квадратный корень, но терпит неудачу, потому что 'None ** 0.5 ==?' например 'prime_factors (5)' будет возвращать None –
то, что 'break' делает сразу после' return'? – Joel