2017-07-02 36 views
0

我有一个从.txt文件读取迷宫并将其转换为字典的函数。词典的键是迷宫的单元格,值是主要点。 “真”值意味着北面有一面墙,等等。 这是我的功能作用:如何在Python中打印保存为字典的迷宫?

def importa(maze): 
    lab=open(maze, 'r') 

    l=list(lab.readlines()) 
    if len(l)==0: 
     return None 
    righe=len(l) 
    colonne=(len(l[0])-1) 



    maze=dict() 
    for r in range(1,righe-1,2): 

     for c in range(1,colonne-1,2): 

      nord=l[r-1][c]=='*' 

      sud=(l[r+1][c]=='*') 
      est=(l[r][c+1]=='*') 
      ovest=(l[r][c-1]=='*') 
      maze[(r//2,c//2)]=[{'N':nord,'S':sud,'E':est,'O':ovest},''] 
      #la stringa vuota è lo stato della cella 


    return maze 

例如一个迷宫:

{(0, 0): [{'N': True, 'S': False, 'E': True, 'O': True}, ''], (0, 1): [{'N': True, 'S': False, 'E': True, 'O': True}, ''], (0, 2): [{'N': True, 'S': True, 'E': False, 'O': True}, ''], (0, 3): [{'N': True, 'S': False, 'E': False, 'O': False}, ''], (0, 4): [{'N': True, 'S': True, 'E': True, 'O': False}, ''], (1, 0): [{'N': False, 'S': True, 'E': False, 'O': True}, ''], (1, 1): [{'N': False, 'S': False, 'E': False, 'O': False}, ''], (1, 2): [{'N': True, 'S': False, 'E': False, 'O': False}, ''], (1, 3): [{'N': False, 'S': True, 'E': True, 'O': False}, ''], (1, 4): [{'N': True, 'S': False, 'E': False, 'O': True}, ''], (2, 0): [{'N': True, 'S': True, 'E': False, 'O': True}, ''], (2, 1): [{'N': False, 'S': False, 'E': True, 'O': False}, ''], (2, 2): [{'N': False, 'S': False, 'E': False, 'O': True}, ''], (2, 3): [{'N': True, 'S': True, 'E': False, 'O': False}, ''], (2, 4): [{'N': False, 'S': False, 'E': True, 'O': False}, ''], (3, 0): [{'N': True, 'S': False, 'E': True, 'O': True}, ''], (3, 1): [{'N': False, 'S': True, 'E': True, 'O': True}, ''], (3, 2): [{'N': False, 'S': True, 'E': False, 'O': True}, ''], (3, 3): [{'N': True, 'S': False, 'E': True, 'O': False}, ''], (3, 4): [{'N': False, 'S': False, 'E': True, 'O': True}, ''], (4, 0): [{'N': False, 'S': True, 'E': False, 'O': True}, ''], (4, 1): [{'N': True, 'S': True, 'E': False, 'O': False}, ''], (4, 2): [{'N': True, 'S': True, 'E': False, 'O': False}, ''], (4, 3): [{'N': False, 'S': True, 'E': True, 'O': False}, ''], (4, 4): [{'N': False, 'S': True, 'E': True, 'O': True}, '']} 

我需要编写打印我的迷宫这样的功能: enter image description here

谁能帮我?

我试图建立一个功能,但它似乎很长......

def stampa(L): 
labirinto=[] 
for r in range(righe_colonne(L)[0]): 
    riga=[] 
    for cella in celle(L): 
     if cella[0]==r: 
      if L[cella][0]['O']==True: 
       riga.append('| ') 

      if L[cella][0]['O']==False: 
       riga.append(' ') 

      if cella[1]==righe_colonne(L)[1]-1: 
       if L[cella][0]['E']==True: 

        riga.append('|') 
       if L[cella][0]['E']==False: 
        riga.append(' ') 




    labirinto.append(''.join(str(x) for x in riga)) 
    #cosi ho le righe pari, quelle che contengono le celle. 
    #ora voglio le righe fra le celle 
labirinto2=[] 
for r in range(righe_colonne(L)[0]): 
    riga=['+'] 
    for cella in celle(L): 
     if cella[0]==r: 

      if L[cella][0]['N']==True: 

       riga.append('---+') 
      if L[cella][0]['N']==False: 
       riga.append(' +') 


    labirinto2.append(''.join(str(x) for x in riga)) 

m='' 
for e in range(0, len(labirinto)): 
    m+=labirinto2[e]+'\n'+labirinto[e]+'\n' 

#aggiungo l'ultima riga 
riga=[] 
for cella in celle(L): 
    if cella[0]==righe_colonne(L)[0]-1: 
     if L[cella][0]['S']==True: 
      riga.append('+---') 
     if L[cella][0]['S']==False: 
      riga.append(' ') 
riga.append('+') 
m+=(''.join(str(x) for x in riga)) 
m+='\n' 

print(m) 
+0

到目前为止你有什么? –

+0

你想打印什么类型的媒体?在浏览器中作为HTML/CSS?在控制台作为纯文本? –

+0

另外:如果两个相邻的单元格有边界,如何处理情况?例如。 '{(0,0):[{“E”:True}],(0,1):[{“W”:True}]}。在这种情况下边界应该是双倍的吗? –

回答

0

您可以使用matplotlib用于这一目的:

import matplotlib.pyplot as plt 

for i, j in maze: 
    walls, _ = maze[i, j] 
    if walls['N']: 
     plt.plot([i, i+1], [j+1, j+1], 'b-') 
    if walls['E']: 
     plt.plot([i+1, i+1], [j, j+1], 'b-') 
    if walls['S']: 
     plt.plot([i, i+1], [j, j], 'b-') 
    if walls['O']: 
     plt.plot([i, i], [j, j+1], 'b-') 

plt.show() 

对于示例这给:

enter image description here

+0

没有matplotlib的其他解决方案? –