我发给你一个问题,因为我在python上有问题,我不明白为什么。 我创建了一个函数“mut1”来改变列表中的数字(概率为1/2),无论是加1还是减1,除了0和9:
def mut1 (m):
i=np.random.randint(1,3)
j=np.random.randint(1,3)
if i==1:
if 0<m<9:
if j==1:
m=m+1
elif j==2:
m=m-1
elif m==0:
if j==1:
m=1
if j==2:
m=9
elif m==9:
if j==1:
m=0
if j==2:
m=8
print m
mut1功能很好,例如,如果我创建一个列表P1:
>>>p1=np.array(range(8),int).reshape((4, 2))
之后,我在列表p1
中的数字(此处为3)处应用“mut1”>>>mut1(p1[1,1])
Hovewer如果我写:
>>> p1[1,1]=mut1(p1[1,1])
我有一条消息错误:
回溯(最近一次调用最后一次):文件“&lt; stdin&gt;”,第1行,in &LT;模块&GT; TypeError:long()参数必须是字符串或数字,而不是 'NoneType'
答案 0 :(得分:1)
这是因为您必须让mut1
返回numpy.int64
类型的结果。所以我尝试使用你的以下修改代码并且工作了。
>>> import numpy as np
>>> import random
>>>
>>> def mut1 (m):
... i=np.random.randint(1,3)
... j=np.random.randint(1,3)
... if i==1:
... if 0<m<9:
... if j==1:
... m=m+1
... elif j==2:
... m=m-1
... elif m==0:
... if j==1:
... m=1
... if j==2:
... m=9
... elif m==9:
... if j==1:
... m=0
... if j==2:
... m=8
... return np.int64(m)
...
>>> p1=np.array(range(8),int).reshape((4, 2))
>>> mut1(p1[1,1])
2
>>> p1[1,1]=mut1(p1[1,1])
>>>
因此,您唯一需要更改的是将print m
替换为return np.int64(m)
然后应该有效!
您将很容易理解为什么会出现以下类型的调试代码:
>>> type(p1[1,1])
<type 'numpy.int64'>
>>> type(mut1(p1[1,1]))
<type 'NoneType'>