2017-03-05 60 views
0

嗨我從一週開始學習Python,並且我的想法是在Python中製作迷宮。經過很長一段時間試圖做到這一點,我總是來到這個出發點:試圖製作一個迷宮

enter image description here

我想獲得的東西是在2選擇效果

我的代碼:

def make(x): 
    if x%2 !=0: 
     return False 
    else: 
     table = [] 
     for i in range(0,x): 
      if i == 0: 
       table.append([0]*x) 
      elif i == x-1: 
       table.append([0]*x) 
       return table 
      else: 
       if i == 1: 
        table.append([0]) 
        table[i].extend([1]*(x-2)) 
        table[i].extend([0]) 
       elif i==x-2: 
        table.append([0]) 
        table[i].extend([1]*(x-2)) 
        table[i].extend([0]) 
       else: 
        table.append([0]*(x))  

for j in make(20): 
    print j 
+1

這是什麼問題?你的代碼是否工作? –

+0

Humm,正如我所見,提供的源代碼是創建並顯示選擇1的效果。所以,我想你想修改你的算法以獲得選擇的效果。2.你試過了什麼? –

回答

0

試試這個。這對於滿足x%2==0的任意x值足夠通用:

def make(x): 
    if x%2 != 0: 
     return False 
    else: 
     table = [] 
     for i in range(0,x): 
     if i>=x/2: 
      fac, rem = divmod(x-i-1,2) 
     else: 
      fac, rem = divmod(i,2) 
     table.append([0,1]*(fac+rem)) 
     table[i].extend([rem]*(x-4*(fac+rem))) 
     table[i].extend([1,0]*(fac+rem)) 
     return table 

可能是更好的形式來引發異常而不是返回false,但我不知道這是什麼插入大背景下,所以我就離開它是如此。

或者使用相同的方法和上面你可以用這樣的獨立功能的單迴路分爲兩個循環:

def makeRow(x,fac,rem): 
    row=[0,1]*(fac+rem) 
    row.extend([rem]*(x-4*(fac+rem))) 
    row.extend([1,0]*(fac+rem)) 
    return row 

def make2(x): 
    if x%2 != 0: 
     return False 
    else: 
     table = [] 
     for i in range(0,int(x/2)): 
      table.append(makeRow(x,*divmod(i,2))) 
     for i in range(int(x/2),x): 
      table.append(makeRow(x,*divmod(x-i-1,2))) 
     return table 

或者如果你喜歡把上面的到的東西更Python:

def make3(x): 
    if x%2 != 0: 
     return False 
    else: 
     table=[makeRow(x,*divmod(i,2)) for i in range(0,int(x/2))] 
     table.extend([makeRow(x,*divmod(x-i-1,2)) for i in range(int(x/2),x)]) 
     return table 
0

爲什麼指出錯誤「table [i + j] .extension([int(j%2)] *(x-(4 * s)))IndexError:list index out of range」以及是否一般有工作的權利

def fun(x): 
table=[] 
s=0 
for i in range(0,int(x/2)): 
    if i ==0: 
     table.append([0]*x) 
    else: 
     if i==((x/2)-1): 
      table.append([0,1]*(x/4)) 
      table[i].extend([1,0]*(x/4)) 
     elif i==(x/2): 
      table.append([0,1]*(x/4)) 
      table[i].extend([1,0]*(x/4)) 
     elif i == (x/2-1): 
      table.append([0]*x) 
      return table 
     else: 
      if i<(((x/2)/2)-2): 
        s+=1 
        for j in range(0,2):  
         table.append([0,1]*s) 
         table[i+j].extend([int(j%2)]*(x-(4*s))) 
         table[i+j].extend([1,0]*s) 


      if i>((x/2)/2): 
       for j in range(0,2):  
        if len(table) == (x-2): 
         break 
        else: 
         table.append([0,1]*s) 
         table[i+j].extend([int(j%2)]*(x-(4*s))) 
         table[i+j].extend([1,0]*s) 
       s-=1 

for j in fun(20): print j