#python-3.x
#python-3.x
Вопрос:
Я создаю функцию, которая разлагает число на простые множители. Однако вместо того, чтобы делать то, что должно, он вызывает странную ошибку типа.
def isprime(num):
if num > 1:
# check for factors
for i in range(2,num):
if num%i==0:
return False
break
else:
return True
else:
return False
def primes(no):
nolist=[]
for a in range(1,(no 1)):
if isprime(a)==True:
nolist.append(a)
return nolist
def factors(b):
Lst=[]
while True:
for prime in primes(b):
if b%prime==0:
b=b/prime
Lst.append(b)
if b==1:
break
return Lst
factors(6)
Вызывает странную ошибку типа:
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
start(fakepyfile,mainpyfile)
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec (open(mainpyfile).read(), __main__.__dict__)
File "<string>", line 71, in <module>
File "<string>", line 64, in factors
File "<string>", line 58, in primes
TypeError: 'float' object cannot be interpreted as an integer
Моя (идиотская) логика подсказывает мне, что объект ‘float’ не имеет никакого отношения к моему коду. Я просто не понимаю. Любые исправления в моем коде будут высоко оценены
Комментарии:
1. В функции factors ваш цикл for
primes(b)
принимает значение с плавающей запятой на второй итерации, потому чтоb=b/prime
2. Что мне делать вместо этого?
3. Я добавил ответ со всеми объяснениями,
Ответ №1:
Проблемы с вашим кодом
- Список простых чисел, не включающий 2. (
isprime
функция неверна) - Вы вызываете
primes
функцию снова и снова. Не требуется - При делении
b/prime
он возвращаетсяfloat
- Вы добавляете
b
в список простых множителейLst
вместоprime
Найти число простое или нет
def isprime(num):
if num > 1:
for i in range(2,num):
if num%i==0:
return False
else:
return False
Полный код
def isprime(num):
if num > 1:
# check for factors
for i in range(2,num):
if num%i==0:
return False
else:
return True
def primes(no):
nolist=[]
print(type(no))
for a in range(1,(no 1)):
if isprime(a)==True:
nolist.append(a)
return nolist
def factors(b):
Lst=[]
prime_nums = primes(b)
while True:
for prime in prime_nums:
if b%prime==0:
b=b//prime
Lst.append(prime)
break
if b==1:
break
return Lst
print(factors(6))