python-3.x - 素数分解器引发意外的 TypeError-py3
问题描述
我正在制作一个对数字进行素数分解的函数。然而,它没有做它应该做的,而是引发了一个奇怪的 TypeError。
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
我的(白痴)逻辑告诉我“浮动”对象与我的代码无关。我只是不明白。对我的代码的任何更正将不胜感激
解决方案
您的代码有问题
- 不包括 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))
推荐阅读
- android - 如何在应用程序颤振飞镖上添加谷歌教室等功能
- ruby-on-rails - 运行rails c后的LoadError
- javascript - PeerJS屏幕共享卡在屏幕共享停止
- webpack - Intl Polyfill + Next.js SSR 应用程序
- javascript - 在 Ruby on Rails 中使用 mapbox 保存坐标
- javascript - How to convert an ISO date time to local date in angular using moment libary?
- php - Laravel 7 重定向离开在白页上显示重定向 url
- php - 在 Laravel 的登录表单中显示验证规则的问题
- python - 套索回归预测平均值
- javascript - Cloudfront createDistribution 上的 InvalidArgument 错误