2017-07-02 8 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

また、隣接する2つのセルに境界線がある場合の状況の処理方法は?例えば。 '{(" 0 "):[{" E ":True}]、(0,1):[{" W ":True}]}'。この場合、国境は2倍にする必要がありますか? –

答えて

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のない他のソリューション? –

関連する問題