2015-06-20 138 views
2

我有一個列表-字符作爲網格。選擇行列唯一的元素列表(N皇后)

我想將一個-更改爲Q每列和每行。

這裏是我到目前爲止有:

import pprint 
    import random # I import these classes 
    grid = [['-'] for n in range(8)] 
    for i in range (8): 
     for j in range(8): 
      inserPoint = random.randrange(8,8) 
      if (j == inserPoint or i == inserPoint) and (grid[j] != 'Q' or grid[i] != 'Q'): 
       grid[i][j] = ('Q') 
    pprint.pprint(grid) #/ how to print one queen per line 

這是我的輸出。正如你可以看到有對電網太多Q S:

[['-','-','-','-','-','-','Q','-'], 
['-','-','-','-','Q','Q','-','-'] 
['-','-','-','-','Q','-','-','-'] 
['Q','Q','-','-','-','Q','Q','-'] 
['-','-','Q','-','Q','-','-','-']. 
+1

第一步是修復你的縮進。 – IanAuld

+0

第二步應該是修復if語句中的語法錯誤 – inspectorG4dget

+3

請閱讀http://stackoverflow.com/help/how-to-ask –

回答

3

有幾件事情:

  1. 你已經有了一個迴路次數過多。您可以循環播放第一個索引i,然後插入Q,其中randrange告訴您。
  2. 您的randrange呼叫是錯誤的。它應該有一個開始和一個停止。實際上,如果您希望您的Q s在行列中是唯一的,則rangerange不是此處的正確工具。
  3. 您的網格設置實際上並不會產生您製作的效果。

這裏有三個東西固定:

In [34]: size = 8 
In [35]: grid = [['-' for m in range(size)] for n in range(size)] 
In [36]: insertPoints = range(size) # = list(range(size)) in Python 3 
In [37]: random.shuffle(insertPoints) 
In [38]: for i in range(size): 
    ....:  grid[i][insertPoints[i]] = "Q" 

其中給出:

In [39]: grid 
Out[39]: 
[['-', '-', '-', 'Q', '-', '-', '-', '-'], 
['-', 'Q', '-', '-', '-', '-', '-', '-'], 
['-', '-', '-', '-', '-', '-', 'Q', '-'], 
['-', '-', '-', '-', '-', 'Q', '-', '-'], 
['Q', '-', '-', '-', '-', '-', '-', '-'], 
['-', '-', '-', '-', 'Q', '-', '-', '-'], 
['-', '-', '-', '-', '-', '-', '-', 'Q'], 
['-', '-', 'Q', '-', '-', '-', '-', '-']] 

(見this爲什麼洗牌一系列在Python 3不起作用)

+0

我們仍然有Q在另一個之上 –

+0

哦對不起。是的,我沒有仔細閱讀。我會解決它。 – LondonRob

+0

我感謝您的幫助先生 –