首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试着做一个迷宫

试着做一个迷宫
EN

Stack Overflow用户
提问于 2017-03-05 23:46:40
回答 2查看 93关注 0票数 0

嗨,我每周都在学习python,我有了用Python制作迷宫的想法。经过很长一段时间的尝试之后,我总是来到这个起点:

我想知道2个选项的效果

我的代码:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2017-03-06 01:47:24

尝尝这个。对于满足x%2==0的任何x值,它都足够通用

代码语言:javascript
复制
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,但我不知道这符合什么更大的上下文,所以我就让它原样。

或者使用与上面相同的方法,您可以使用单独的函数将单个循环拆分为两个循环,如下所示:

代码语言:javascript
复制
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

或者,如果您更喜欢将上述内容转换为更具蟒蛇风格的内容:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-03-07 01:22:03

为什么要指出错误"table I+ j. extend (int (j%2)* (x-(4 *s) IndexError: list index out of range“,以及一般情况下是否有权限工作

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42610392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档