我正在尝试编写一个代码来确定小于1000的最佳主要回文,并且收到错误消息我真的不明白如何修复:错误消息如下:
Traceback (most recent call last):
File "/Users/sebpole/Documents/EvalPrimePallindrome.py", line 43, in <module>
if GPF(c) == c:
File "/Users/sebpole/Documents/EvalPrimePallindrome.py", line 37, in GPF
la = fac(int(la))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
我相信在我的程序中某个时刻意味着整数被转换为非整数然后插入需要整数的函数?不确定那里发生了什么......这是代码:
#Find the largest prime palindrome less than 1000
primePalis = []
def isolate(x, y):
x = str(x)
r = x[len(x)-y]
return int(r)
def palcheck(x):
i=1
while i < len(str(x)):
if isolate(x, i) != isolate(x, len(str(x))-i+1):
return 0
i = i+1
return 1
def fac(x):
a = 2
while a <= x:
if a**2 > x:
return 0
break
elif x%a == 0:
return x/a
break
if a!=2:
a = a+2
elif a == 2:
a = a+1
def GPF(x):
la = fac(x)
lb = la
if la == 0:
return x
while la != 0:
lb = la
la = fac(la)
return lb
c = 1
while c <= 1000:
if palcheck(c) == 1:
if GPF(c) == c:
primePalis.append(c)
c = c+1
print(max(primePalis))
任何想法发生了什么?
旁注:是否有更简单的方法让网站将我的代码识别为代码,而不是在我的代码的每一行之前四次手动点击空格键?
答案 0 :(得分:2)
如果控件到达结尾,函数fac()
不会显式返回任何内容,因此返回None
。
一个简单的解决方法是在最后添加return a
:
def fac(x):
a = 2
#...
if a!=2:
a = a+2
elif a == 2:
a = a+1
return a
答案 1 :(得分:1)
la = fac(int(la))
错误行似乎并未在您发布的代码中预设,但问题可能是fac(1)
没有返回任何内容,这意味着它的返回值为{{ 1}}。