2017-11-24 3 views
0

出力に影響を与えずに、自分のプログラムのaddCoordinate関数のネストされたforループにネストされたリストの理解を適用する方法を教えてください。私はアウトプットで達成されるような形式で迷路を印刷するようにしましたが、私はプログラム全体をよりコンパクトにし、時間の複雑さを改善したいと考えています。私のプログラムのための関数内にネストされたリストの理解を適用する

from itertools import product 
class Maze: 
    mazeboard, x1, y1, list = [], 0, 0, [] 

    def __init__(self): 
     """ 
     Constructor - You may modify this, but please do not add any extra parameters 
     """ 

    def addCoordinate(self, x, y, blockType): 
     #print self.x1 
     if self.x1 < x : 
      self.x1 = x 
     if self.y1 < y: 
      self.y1 = y 
     if len(self.mazeboard) <= self.x1 or len(self.mazeboard) <= self.y1: 
      modified_board = [[1 for a in range(self.x1 + 1)] for b in range(self.y1 + 1)] 
      for a in range(len(self.mazeboard)): 
       for b in range(len(self.mazeboard[a])): 
        modified_board[a][b] = self.mazeboard[a][b] 
      self.mazeboard = modified_board 
     self.mazeboard[y][x] = blockType 

    def printMaze(self): 
     for a in range(self.x1 + 1): 
      for b in range(self.y1 + 1): 
       if self.mazeboard[a][b] == 0: 
        print " ", 
       else: 
        print "*", 
      print "" 


def mazeTest(): 
    myMaze = Maze() 
    myMaze.addCoordinate(1, 0, 0) 
    myMaze.addCoordinate(1, 1, 0) 
    myMaze.addCoordinate(7, 1, 0) 
    myMaze.addCoordinate(1, 2, 0) 
    myMaze.addCoordinate(2, 2, 0) 
    myMaze.addCoordinate(3, 2, 0) 
    myMaze.addCoordinate(4, 2, 0) 
    myMaze.addCoordinate(6, 2, 0) 
    myMaze.addCoordinate(7, 2, 0) 
    myMaze.addCoordinate(4, 3, 0) 
    myMaze.addCoordinate(7, 3, 0) 
    myMaze.addCoordinate(4, 4, 0) 
    myMaze.addCoordinate(7, 4, 0) 
    myMaze.addCoordinate(3, 5, 0) 
    myMaze.addCoordinate(4, 5, 0) 
    myMaze.addCoordinate(7, 5, 0) 
    myMaze.addCoordinate(1, 6, 0) 
    myMaze.addCoordinate(2, 6, 0) 
    myMaze.addCoordinate(3, 6, 0) 
    myMaze.addCoordinate(4, 6, 0) 
    myMaze.addCoordinate(6, 6, 0) 
    myMaze.addCoordinate(7, 6, 0) 
    myMaze.addCoordinate(5, 7, 0) 
    myMaze.printMaze() 
mazeTest() 

出力は次のとおりです。

* * * * * * * 
* * * * * * 
*   *  
* * * * * * 
* * * * * * 
* * *  * * 
*   *  
* * * * * * * 
+0

、正確な質問を追加してください。 – Algiz

答えて

0

あなたは、いくつかの異なる方法で物事を向上させることができます:

  1. はむしろaddCoordinate()を複数回呼び出すよりも座標のリストを作成します。

  2. 迷路の印刷を改善するには、辞書を使用して迷路を*の文字に変換してから、すべてを1つの印刷可能な文字列に結合します。

  3. productを使用して、古いmazeboardを最新のものにコピーします。例えば

from itertools import product 

class Maze: 
    mazeboard, x1, y1 = [], 0, 0 

    def __init__(self): 
     """ 
     Constructor - You may modify this, but please do not add any extra parameters 
     """ 

    def addCoordinate(self, x, y, blockType): 
     if self.x1 < x : 
      self.x1 = x 
     if self.y1 < y: 
      self.y1 = y 
     if len(self.mazeboard) <= self.x1 or len(self.mazeboard) <= self.y1: 
      modified_board = [[1 for a in range(self.x1 + 1)] for b in range(self.y1 + 1)] 
      if len(self.mazeboard): 
       for a, b in product(range(len(self.mazeboard)), range(len(self.mazeboard[0]))): 
        modified_board[a][b] = self.mazeboard[a][b]    

      self.mazeboard = modified_board 
     self.mazeboard[y][x] = blockType 

    def printMaze(self): 
     print '\n'.join(' '.join(map({1:'*', 0:' '}.get, row)) for row in self.mazeboard) 


def mazeTest(): 
    myMaze = Maze() 

    coords = [ 
     (1, 0, 0), (1, 1, 0), (7, 1, 0), (1, 2, 0), (2, 2, 0), 
     (3, 2, 0), (4, 2, 0), (6, 2, 0), (7, 2, 0), (4, 3, 0), (7, 3, 0), 
     (4, 4, 0), (7, 4, 0), (3, 5, 0), (4, 5, 0), (7, 5, 0), (1, 6, 0), 
     (2, 6, 0), (3, 6, 0), (4, 6, 0), (6, 6, 0), (7, 6, 0), (5, 7, 0)] 

    for coord in coords: 
     myMaze.addCoordinate(*coord) 

    myMaze.printMaze() 

mazeTest() 
関連する問題