只是警告這是一項大學作業,因此我不允許使用除len()
. 我不介意是否有人想用函式來回答,只要知道這就是我的代碼看起來很糟糕的原因。
我的任務是創建一個 10x10 矩陣,并使用多個函式根據 x 或 y 位置向其中添加元素,檢查空間是否可用。最初的指令是用 '.' 創建一個 10x10。而不是零,以便在終端中看起來更好。我決定繼續使用 0 并且只更改為 '.' 在印刷程序中。每次進行更改時,我都會列印矩陣。我使用這個功能:
def printMatrixF(M):
fM = M
for i in range(10):
for j in range(10):
if fM[i][j] == 0:
fM[i][j] = '.'
print(fM[i][j],end=" ")
print()
但是這個函式以某種方式改變了M
值,即使我很確定它不應該。這是代碼的一小部分,顯示了我的確切問題:
def createMatrix():
a = [0]*10
for i in range(10):
a[i] = [0]*10
return a
def printMatrix(M):
for i in range(len(M)):
print(M[i])
def printMatrixF(M):
fM = M
for i in range(10):
for j in range(10):
if fM[i][j] == 0:
fM[i][j] = '.'
print(fM[i][j],end=" ")
print()
M = createMatrix()
printMatrix(M)
printMatrixF(M)
printMatrix(M)
該printMatrix()
函式僅列印矩陣,并且printMatrixF()
添加了從 0 到 '.' 的變化。在里面。這感覺很愚蠢,但我不知道是什么原因造成的。
(編輯:我正在使用相同的功能,但if
用于將 '.' 恢復為 0(我猜它有效)。
uj5u.com熱心網友回復:
問題是fM = M
只給物件指派了另一個名字M
——所以你需要復制它。這可以使用copy
模塊來完成,但由于您不能使用它,您可以通過使用所有物件都具有的copy()
方法手動完成。list
在下面的代碼中,我創建了一個copyMatrix(M)
函式來說明如何使用它:
def createMatrix():
a = [0]*10
for i in range(10):
a[i] = [0]*10
return a
def printMatrix(M):
for i in range(len(M)):
print(M[i])
def copyMatrix(M):
"""Return a copy of matrix M."""
mcopy = []
for i in range(len(M)):
# Append copy of sublist.
mcopy.append(M[i].copy()) # Could also use M[i][:]
return mcopy
def printMatrixF(M):
fM = copyMatrix(M)
for i in range(10):
for j in range(10):
if fM[i][j] == 0:
fM[i][j] = '.'
print(fM[i][j],end=" ")
print()
M = createMatrix()
printMatrix(M)
print()
printMatrixF(M)
print()
printMatrix(M)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470318.html
標籤:Python python-3.x 功能