所以我只是在看一個關于井字游戲的教程,因為我想知道你是否可以用 for 回圈制作網格。我在那里看到了這條線。我了解 for 回圈的作業原理,但是如何在 for 回圈之前放置一個 " " 以及它是如何作業的?我也有點不確定第二個 for 回圈。如果有人可以向我解釋這一點,那該多好。
sefboard = [" " for i in range(9)]
print(sefboard)
for row in [sefboard[i*3: (i 1)*3] for i in range(3)]:
print("| " " | " " |")
uj5u.com熱心網友回復:
首先讓我們理解理解:
串列、字典、集合等可以通過理解來制作。基本上,理解是使用一個生成器并使用它來形成一個新變數。生成器只是一個在每次迭代時回傳不同值的物件,因此以串列為例:為了創建一個具有串列推導式的串列,我們將生成器輸出的值放入串列中自己的位置。以這個生成器為例:
x for x in range(0, 10)
這只會在第一次迭代時給出 0,然后是 1,然后是 2,等等。所以要使這個串列成為我們將使用的串列[](串列剎車),如下所示:
[x for x in range(0, 10)]
這將給出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #note: range does not include the second input
對于字典和我們使用的集合{},但是由于字典使用鍵值對,我們的生成器對于集合和字典將是不同的。對于集合,它與串列相同:
{x for x in range(0, 10)} #gives the set --> {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
但是對于字典,我們需要一個鍵和一個值。由于enumerate給出了兩個專案,這在某些情況下可能對字典有用:
{key: value for key, value in enumerate([1,2,3])}
在這種情況下,鍵是索引,值是串列中的專案。所以這給出了:
{0: 1, 1: 2, 2: 3} #dictionary
它不構成集合,因為我們表示x : y的是字典中專案的格式,而不是集合。
現在我們可以分解一下:
這:
" " for i in range(9)
只是一個回傳 9 個空格的生成器。由于它包含在串列括號 ( []) 中,因此它生成了一個包含 9 個空格的串列。
這:
[sefboard[i*3: (i 1)*3] for i in range(3)]
一次只獲得 9 個空格中的 3 個,并通過(包含在串列括號()中的生成器)sefboard[i*3: (i 1)*3]使其成為 3 行之一,因此這給出了 3x3 的空格網格。for i in range(3)[]
所以for回圈:
for row in [sefboard[i*3: (i 1)*3] for i in range(3)]:
只是從 3x3 網格中獲取每一行,以便可以在每一行上列印:
print("| " " | " " |")
為什么使用這個?
此代碼的輸出等價于:
for _ in range(3):
print("| " " | " " |")
但是這sefboard對于更新板和列印空白板以外的東西可能很有用。for回圈中可能會有更多行將使用sefboard,而不僅僅是print("| " " | " " |"). 我假設您提到的教程將解釋為什么他們這樣做,而不是使用上面更簡單的版本,或者一旦您觀看視頻的其余部分,它在專案的背景關系中可能是有意義的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/432765.html
