#27789: 屢次NA(20%),想請各位幫忙檢視程式碼(Python)


141339888 (Otmil)

學校 : 不指定學校
編號 : 157298
來源 : [203.121.239.228]
最後登入時間 :
2022-11-06 17:41:05
g276. 2. 魔王迷宮 -- 2021年9月APCS | From: [203.121.239.228] | 發表日期 : 2021-10-29 22:28

如題,

我寫程式的經驗實在不多,難以察覺其中的不周之處,還請各位不吝指教^^;

 

class Boss:
    def __init__(self, data):
        self.x=int(data[0])
        self.y=int(data[1])
        self.dx=int(data[2])
        self.dy=int(data[3])
   
    def move(self):
        self.x+=self.dx
        self.y+=self.dy
       

r,c, k =[int(x) for x in input().split()]
grid=[[False for i in range(c)] for j in range(r)]
bosses=[ Boss(input().split()) for i in range(k) ]

while len(bosses):
    i = 0
    while i < len(bosses):
        grid[bosses[i].x][bosses[i].y]=True
        bosses[i].move()
        if bosses[i].x<0 or bosses[i].x>=r or bosses[i].y<0 or bosses[i].y>=c:
            del bosses[i]
            continue
        i+=1
   
    i = 0
    ref=grid

    while i < len(bosses):
        if ref[bosses[i].x][bosses[i].y]:
            grid[bosses[i].x][bosses[i].y]=False
            del bosses[i]
            continue
        i+=1

ans=0
for x in grid:
    for y in x:
        if y:
            ans+=1
print(ans)
 
#27821: Re:屢次NA(20%),想請各位幫忙檢視程式碼(Python)


141339888 (Otmil)

學校 : 不指定學校
編號 : 157298
來源 : [203.121.239.228]
最後登入時間 :
2022-11-06 17:41:05
g276. 2. 魔王迷宮 -- 2021年9月APCS | From: [203.121.239.228] | 發表日期 : 2021-10-31 11:04

問題出在我對Python的瞭解還不是很充分。

在第二層第一個while之後的ref=grid有問題,這麼寫,ref和grid代表的會是同個list,此時若修改ref就等於修改grid,反之亦然。

這裡想達成的是將原本grid的資料來存下來,正確的寫法應該是ref=[ x[:] for x in grid]。

 
ZeroJudge Forum