2014-10-19 81 views
-2

当我尝试运行下面的代码时,没有输出显示,并且它继续运行,直到我按Ctrl + C。是否在我的while循环中存在问题?Matrix是20x20零矩阵。程序在执行时挂起

while 1: 
     y=random.sample(range(1,20),2) 
     g=random.sample(range(1,20),2) 
     for h in range(0,1): 
       t=y[h] 
       u=g[h] 
       if(t!=u): 
        Matrix[t][u]=1 
        for i in range(numNode): 
         for j in range(numNode): 
           if(Matrix[i][j]==1): 
            count=count+1 
       else: 
        t=y[h+1] 
        u=g[h+1] 
        Matrix[t][u]=1 
        for i in range(numNode): 
         for j in range(numNode): 
           if(Matrix[i][j]==1): 
            count=count+1 
     if(count==40): 
      break 
print(count) 
+0

你觉得应该产生输出哪条线路?你有没有忘记“印刷”声明? – geoffspear 2014-10-19 14:09:53

+0

而且还避免有这么多嵌套循环。 – badc0re 2014-10-19 14:10:45

+0

numNode的值是20? – mdurant 2014-10-19 14:13:18

回答

0

如果在每次迭代,另1进入矩阵,则每次通过for i in range(numNode):回路运行时,您可以添加远在Matrixso的总和来算。即第一次运行时,插入1,count-> count + 1;但下一次插入另一个1时,如果它不是与之前相同的索引,则count-> count + 2。

这是不可能的,你打的数=== 40。要么确保每个循环只增加1个计数,要么将条件更改为if(count>=40),这取决于您实际尝试实现的目标。

可能是你想要的下面,使用numpy的功能:

matrix = zeros((40,40)) 
xx,yy = meshgrid(arange(40), arange(40)) 
ind1 = random.choice(arange(40*40), size=40, replace=False) 
ind2 = random.choice(arange(40*40), size=40, replace=False) 
xx.shape = (40*40,) 
yy.shape = (40*40,) 
matrix[xx[ind1],yy[ind2]] = 1 
+0

我改变了代码,每当我向Matrix添加1时,我就将计数增加到1.但是,如果我想为矩阵添加大约300 1,计数总是少于。基本上,我试图添加一个确切例如,如果k = 300,我想在随机的行和列中显示其中有300个1的矩阵。 – user3330378 2014-10-19 14:47:09