2017-09-09 98 views
0

我發現從這裏用戶這段代碼和編輯它讓我的遊戲板:我該如何解決我的「list_reverseiterator」對象不是可自定義的「錯誤?

rows = [[f'{(n+1) + (i*7):4}' for n in range(7)] for i in range(7)] 
rows = reversed([reversed(rows[i]) if i%2 else rows[i] for i in range(len(rows))]) 

for row in rows: 
    print(' | '.join(row)) 

這使得一個完美的遊戲板對我來說,7 7:

43 | 44 | 45 | 46 | 47 | 48 | 49 
    42 | 41 | 40 | 39 | 38 | 37 | 36 
    29 | 30 | 31 | 32 | 33 | 34 | 35 
    28 | 27 | 26 | 25 | 24 | 23 | 22 
    15 | 16 | 17 | 18 | 19 | 20 | 21 
    14 | 13 | 12 | 11 | 10 | 9 | 8 
    1 | 2 | 3 | 4 | 5 | 6 | 7 

我可以理解一些代碼,我知道它使用列表生成器以及它如何反轉每隔一行。

但是我也希望能夠在棋盤上打印玩家的位置。例如,如果Player1位於板上的位置6上,我想打印出一塊新的板,但只需用「P1」替換數字6即可。我遇到了錯誤"TypeError: 'list_reverseiterator' object is not subscriptable"

我怎樣才能做到這一點與上述代碼?我是否需要一種不同的解決方案來繪製電路板?

+0

請然後包括產生異常的代碼,所以我們可以糾正。 –

回答

2

的數字是在第一個列表理解產生,在f'..'字符串:

f'{(n+1) + (i*7):4}' 

這將計算爲(n + 1) + (i * 7)數量,並將其格式化爲的寬度4列如果你想顯示別的東西在這裏,您需要將替換爲P1。這說起來容易,如果你第一次產生只是數字有任何字符串格式化:

playerpos = 6 
numbers = (((n+1) + (i*7) for n in range(7)) for i in range(7)) 
rows = [[f'{"P1" if pos == playerpos else pos:>4}' for pos in row] for row in numbers] 
rows = reversed([reversed(rows[i]) if i%2 else rows[i] for i in range(len(rows))]) 

numbers然後發電機的發電機產生的數字,然後第一rows表達產生從列表的列表,格式化每個數字字符串P1如果數字與玩家位置匹配。

我在格式化規範中添加了>;數字默認情況下是右對齊的,但其他所有內容都是左對齊的。 >重寫並正確對齊所有內容,將P1放在與數字相同的位置。

演示:

>>> playerpos = 6 
>>> numbers = (((n+1) + (i*7) for n in range(7)) for i in range(7)) 
>>> rows = [[f'{"P1" if pos == playerpos else pos:>4}' for pos in row] for row in numbers] 
>>> rows = reversed([reversed(rows[i]) if i%2 else rows[i] for i in range(len(rows))]) 
>>> for row in rows: 
...  print(' | '.join(row)) 
... 
    43 | 44 | 45 | 46 | 47 | 48 | 49 
    42 | 41 | 40 | 39 | 38 | 37 | 36 
    29 | 30 | 31 | 32 | 33 | 34 | 35 
    28 | 27 | 26 | 25 | 24 | 23 | 22 
    15 | 16 | 17 | 18 | 19 | 20 | 21 
    14 | 13 | 12 | 11 | 10 | 9 | 8 
    1 | 2 | 3 | 4 | 5 | P1 | 7 
+0

優秀的解釋和我正在尋找的東西。你是否也可以解釋表達式f'...'中的「f」是什麼? – user766559

+1

@ user766559:這是一個格式化的字符串文字;請參閱https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-pep498 –