2013-05-14 115 views
0

我是新來的蟒蛇 - 和編程 - 並得到了這個練習。我可以用下面的代碼得到預期的結果,但想知道用Python 3.x解決這個問題還有哪些其他方法。什麼是解決這個練習的更好方法?

的鍛鍊是採取一些並且產生以下模式:

用戶輸入:1個

X 

用戶輸入:2

O O O 
O X O 
O O O 

用戶輸入:3

X X X X X 
X O O O X 
X O X O X 
X O O O X 
X X X X X 

and s o在...

以下是我有:

def makePattern(): 
    num = int(input("Enter a number: ")) 
    def makeBoxes(num): 
     width = (num * 2) - 1 
     midpoint = num - 1 
     matrix = [ [ "X" for i in range(width) ] for j in range(width) ] 
     for d1 in range(width): 
      mpD1 = abs(midpoint - d1) 
      for d2 in range(width): 
       mpD2 = abs(midpoint - d2) 
       if (mpD1 % 2 == 1): 
        if mpD2 <= mpD1: 
         matrix[d1][d2] = "O" 
       if (mpD2 % 2 == 1): 
        if mpD1 <= mpD2: 
         matrix[d1][d2] = "O" 
     printBoxes(matrix,width) 
     makePattern() 
    def printBoxes(matrix,width): 
     holder = "" 
     count = 1 
     for row in matrix: 
      for point in row: 
       holder += (point + " ") 
       if count % width == 0: 
        print(holder) 
        holder = "" 
       count += 1 
    makeBoxes(num) 
makePattern() 
+1

完成_什麼? – Jack 2013-05-14 04:23:10

+0

如果您可以更具體地瞭解您想要改進的內容,則可以在[CodeReview.SE](或_maybe_ [CodeGolf.SE])上設置一個主頁。真的不清楚你的問題是什麼,我不認爲這是正確的地方。 – 2013-05-14 04:44:03

+0

由於您有工作代碼,請確保您保留該版本的副本。然後試着逐步簡化它,直到你有更好的東西。你可以學到很多東西。順便說一句,如果你的問題是「S.O.上的人能更好地做我的作業嗎?」那麼答案是「可能是」 - 但你可能想要一個更具體的問題。 – 2013-05-14 04:44:46

回答

0

看來你想打印一個板以特定模式。沒有進一步的描述,就很難多說了。

  • 總讓人覺得unpythonic:

    你蟒使用一些具體的意見。它太冗長了。避免駱駝套。

  • 有太多重複的邏輯。寬度似乎不需要在printBoxes
  • printBoxes可能會好很多。研究什麼" ".join(row)。知道了,在python 3 printBoxes應該是一個簡單的一行列表理解。

關於你的算法的一些具體意見:

  • 我能想到幾個是比你更簡單的算法,給定一個位置矩陣[i] [j]你知道,如果它需要也可以是一個「X」或「O」。

如果你把它放在一起,這可能產生的列表應該是一行python和打印它應該是另一個。具有諷刺意味的是,這應該也會增加你的代碼的可讀性。

相關問題