试图制作迷宫

时间:2017-03-05 15:46:40

标签: python

您好我本周正在学习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

2 个答案:

答案 0 :(得分: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

或者,如果您更喜欢将上述内容变成更加pythonic的东西:

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

答案 1 :(得分:0)

为什么要指出错误"表[i + j]。 extend([int(j%2)] *(x-(4 * s)))IndexError:列表索引超出范围"以及一般是否有工作权

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):     打印j