2014-10-19 71 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