2015-05-18 48 views
2

我已经写如果相等,误差比较这代码:类型错误:NoneType,可以当大于

def reclen(n): 
    for i in range(1,n): 
     if (10**i)%n==1: 
      return(i) 

for j in range(1,20): 
    if reclen(j)==6: 
     print(j) 

它将运行,1-20满足l之间输出所述整数/ N =具有6个重复位。如果我在第二循环中改变子句:

for j in range(1,20): 
    if reclen(j)>6: 
     print(j) 

我期望得到满足1-2 1之间的整数/ N = 6个或更多的重复数字,而是,我得到一个错误,告诉我有一个类型错误。我已经在所有输出中尝试了抹灰int()函数,但似乎我不允许将输出作为任何东西,但确切地等于一个值。

+0

它适合我!第二个子句输出17,19 - 我正在使用anaconda(python 2.7.9) – farhawa

+0

请注意,'None'可以与python2.7中的int进行比较 - 但结果是依赖于实现的IIRC。 – mgilson

+0

奇怪的是,它将在不同的版本中工作...问题源于reclen()输出“无”似乎?当定义reclen()时,我可以这样写: def reclen(n): 对于i在范围内(1,n + 1): if(10 ** i)%n == 1: return(i) return(0) 并且代码将返回17,19,如在此实现中所预期的那样。**我无法编辑回复以正确显示代码 – Jokkeyo

回答

1

nreclen1的情况下,会有什么你for循环遍历所以它返回None。例如: -

>>> def reclen(n): 
...  for i in range(1,n): 
...   if (10**i)%n==1: 
...    return(i) 
... 
>>> print(reclen(1)) 
None 

None既不是不是比(其中不同类型的比较是默认不允许上python3.x)的任意整数大于或小于这就是为什么你会得到一个错误。

>>> None > 6 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unorderable types: NoneType() > int() 
相关问题