我會更具體地說:我要問的是如何有一個回圈來保存每次迭代的輸出,因此在每次下一次迭代時,回圈確實在現有輸出上添加一個值,然后它也保存并重復。對我來說,這與我正在構建的井字游戲相關,它由一個字串組成,我希望在其上添加變數(在本例中為“x”或“o”的玩家),它需要得救。添加另一個變數時,它應該顯示在包含前一個變數的同一“板”中。這里的問題是,我不知道如何執行這樣的保存操作,然后在相同的字串上添加另一個變數。
def board(player, position):
def saving():
for i in range(1,9):
if position == i:
posi = ["nothing","-","-","-","-","-","-","-","-","-"]
posi[i] = player
set1 = f"{posi[1]} | {posi[2]} | {posi[3]}\n"
set2 = f"{posi[4]} | {posi[5]} | {posi[6]}\n"
set3 = f"{posi[7]} | {posi[8]} | {posi[9]}\n"
return set1, set2, set3
continue
print1,_,_=saving()
_,print2,_=saving()
_,_,print3=saving()
print(print1)
print(print2)
print(print3)
實際上我不熟悉哪些特定功能可以執行保存操作。因此我嘗試使用串列,因為我注意到它出現在具有此類操作的腳本中。我嘗試添加“繼續”以查看是否提供了保存操作。兩者都沒有作業。為了清楚起見,我要補充一點,對于給定的腳本,“position”是一個只能在 1-9 范圍內的 int,而“player”是一個 x 或 o 的字串。
uj5u.com熱心網友回復:
要在同一個網格上進行更新,您需要將該網格保存為函式外部的變數,并使用board(record_move下面) 函式對網格進行更新。
此外,我鼓勵您使用嵌套串列來表示您的網格。給定一個嵌套串列,我們可以用 訪問右上角game_grid[0][0],中間用 訪問game_grid[1][1],等等。我知道您的索引為 1-9,但在大多數編程語言(包括 python)中,習慣上從零開始計數。從現在開始,我將使用 0 索引。
而且,為了清楚起見,我認為我們應該重命名一些變數和函式。我將呼叫記錄移動的函式record_move而不是board. 我將呼叫玩家選擇的“x”或“o”move而不是player。最后,我會position像以前一樣稱呼這個職位。
所以你的腳本看起來像:
def record_move(move, position, game_grid):
# implementation here
game_grid = [["-","-","-"], ["-","-","-"], ["-","-","-"]]
# Now, here, you can do something with game_grid.
# Perhaps you want to prompt the user for input within a while loop.
# That's a relatively common procedure that you can search for elsewhere.
# But the main point is that now you can use the function board(...) to
# make updates to the same game_grid.
好的,進入其record_move自身的實作。您只需要一個功能,而不是兩個。
對于函式的前兩行,回想一下,您可以使用 設定嵌套串列的位置 i,j game_grid[I][j] = VALUE。我們可以position通過執行類似的操作將 from 轉換為兩個坐標
i = position // 3 # "a // b" gives us the floor of "a/b", so for example 4 // 3 = 1
j = position % 3 # "a % b" gives us the remainder of "a/b" so for example 4 % 3 is 1
自己測驗一下,您會發現這可以讓您將所有 9 個位置(編號 0-8)轉換為坐標。
對于函式的第三行,您只需將game_grid坐標設定i,j為move。
在第四行剛剛 return game_grid。
這應該讓你解決你的問題。如果您真的想堅持使用 1 索引,只需在函式的第 1 行和第 2 行中進行計算之前從 position 中減去 1。
最后,這個任務非常適合面向物件編程。如果您對此有任何經驗,我建議您將整個網格表示為一個類,并使該record_move函式成為該類的成員。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/528599.html
標籤:Python循环迭代节省
下一篇:如何查找用戶輸入的分數大于80?
