#31619: 在家自學python,用這題練習二維陣列,但是遇到了問題


bowon.lin@gmail.com (柏宇練習中)

學校 : 不指定學校
編號 : 114462
來源 : [124.218.17.159]
最後登入時間 :
2022-08-09 09:16:44
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [124.218.17.159] | 發表日期 : 2022-08-11 11:05

#b900

w,h=map(int,input().split())

p=[[0]*(w*2+1) for q in range(h)]#建立二維陣列

for i in range(h):
    k=list(str(input()))#把每個字串轉成str,再分開
    for j in range(1,2*w):
        p[i][j]=k[j-1]#存入字串

now=p[0][1]#現在的位置


t=1#從左邊數過來第幾個

for q in range(h):#從上面數下來第幾個
    now=p[q][t]

    if p[q][t-1]=="-":#左邊是不是"-"
        now = p[q][t-2]
        t-=2
        
    elif p[q][t+1]=="-":#右邊是不是"-"
        now = p[q][t+2]
        t+=2
    
    print(t)

我的解題想法是把第一行的 |-|.| 儲存成[" 0 " , " | " , " - " , " | " , " . " , " | " , " 0 "]

上半部的巢狀for迴圈確認過了沒有問題

我認為問題是在下半部,因為在家自學的關係,資源只有網路,可能有些觀念是我沒有注意到的,再加上我沒有做二維陣列的經驗,我需要幫助

 

 
#31620: Re: 在家自學python,用這題練習二維陣列,但是遇到了問題


krameri120 (科科)

學校 : 國立臺南高級工業職業學校
編號 : 102318
來源 : [36.237.212.239]
最後登入時間 :
2024-04-01 14:20:14
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [27.242.30.8] | 發表日期 : 2022-08-11 14:12

W,H=map(int,input().split()) #寬度跟高度
map=[]
walk=[]
'''==============<走訪記錄>================='''
def go_check():
global walk
del walk[:]
for y in range(H):
walk.append([])
for x in range(2*W-1):
walk[y].append(map[y][x])
'''================<輸入>================='''
for y in range(H):
map.append([])
map[y]=list(str(input()))
'''================<探路>================='''
for x in range(0,2*W-1,2):
go_x=x
go_y=0
go_check()
while(go_y<=H):
if (go_y == H):
if (go_x > 0):
print(go_x//2+1,end=' ')
break
else:
print(go_x+1,end=' ')
break
walk[go_y][go_x] = 'X' #走過了
#往左走
if (go_x > 0 and map[go_y][go_x - 1] == '-' and walk[go_y][go_x - 1] != 'X'):
walk[go_y][go_x - 1] = 'X'
go_x-=2
go_y+=1
# 往右走
elif (go_x < 2 * W - 2 and map[go_y][go_x + 1] == '-' and walk[go_y][go_x + 1] != 'X'):
walk[go_y][go_x + 1] = 'X'
go_x+=2
go_y+=1
# 往下走
else:
go_y+=1

用走訪的概念寫的,你可以參考看看

 
#31621: Re: 在家自學python,用這題練習二維陣列,但是遇到了問題


krameri120 (科科)

學校 : 國立臺南高級工業職業學校
編號 : 102318
來源 : [36.237.212.239]
最後登入時間 :
2024-04-01 14:20:14
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [27.242.30.8] | 發表日期 : 2022-08-11 14:13

AC (22ms, 3.4MB)結果
好久沒寫python   www
 
#31622: Re: 在家自學python,用這題練習二維陣列,但是遇到了問題


krameri120 (科科)

學校 : 國立臺南高級工業職業學校
編號 : 102318
來源 : [36.237.212.239]
最後登入時間 :
2024-04-01 14:20:14
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [27.242.30.8] | 發表日期 : 2022-08-11 14:24

W,H=map(int,input().split()) #寬度跟高度
map=[]
'''================<輸入>================='''
for y in range(H):
map.append([])
map[y]=list(str(input()))
'''================<探路>================='''
for x in range(0,2*W-1,2):
go_x=x
go_y=0
while(go_y<=H):
if (go_y == H):
if (go_x > 0):
print(go_x//2+1,end=' ')
break
else:
print(go_x+1,end=' ')
break
#往左走
if (go_x > 0 and map[go_y][go_x - 1] == '-'):
go_x-=2
go_y+=1
# 往右走
elif (go_x < 2 * W - 2 and map[go_y][go_x + 1] == '-' ):
go_x+=2
go_y+=1
# 往下走
else:
go_y+=1

這樣寫就好,walk=[]測試而已

 
#31624: Re: 在家自學python,用這題練習二維陣列,但是遇到了問題


bowon.lin@gmail.com (柏宇練習中)

學校 : 不指定學校
編號 : 114462
來源 : [124.218.17.159]
最後登入時間 :
2022-08-09 09:16:44
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [124.218.17.159] | 發表日期 : 2022-08-11 15:17

W,H=map(int,input().split()) #寬度跟高度
map=[]
'''================<輸入>================='''
for y in range(H):
map.append([])
map[y]=list(str(input()))
'''================<探路>================='''
for x in range(0,2*W-1,2):
go_x=x
go_y=0
while(go_y<=H):
if (go_y == H):
if (go_x > 0):
print(go_x//2+1,end=' ')
break
else:
print(go_x+1,end=' ')
break
#往左走
if (go_x > 0 and map[go_y][go_x - 1] == '-'):
go_x-=2
go_y+=1
# 往右走
elif (go_x < 2 * W - 2 and map[go_y][go_x + 1] == '-' ):
go_x+=2
go_y+=1
# 往下走
else:
go_y+=1

這樣寫就好,walk=[]測試而已

厲害...

 

 

 
#31625: Re: 在家自學python,用這題練習二維陣列,但是遇到了問題


bowon.lin@gmail.com (柏宇練習中)

學校 : 不指定學校
編號 : 114462
來源 : [124.218.17.159]
最後登入時間 :
2022-08-09 09:16:44
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [124.218.17.159] | 發表日期 : 2022-08-11 15:18

W,H=map(int,input().split()) #寬度跟高度
map=[]
'''================<輸入>================='''
for y in range(H):
map.append([])
map[y]=list(str(input()))
'''================<探路>================='''
for x in range(0,2*W-1,2):
go_x=x
go_y=0
while(go_y<=H):
if (go_y == H):
if (go_x > 0):
print(go_x//2+1,end=' ')
break
else:
print(go_x+1,end=' ')
break
#往左走
if (go_x > 0 and map[go_y][go_x - 1] == '-'):
go_x-=2
go_y+=1
# 往右走
elif (go_x < 2 * W - 2 and map[go_y][go_x + 1] == '-' ):
go_x+=2
go_y+=1
# 往下走
else:
go_y+=1

這樣寫就好,walk=[]測試而已

厲害...

 

 

那麼久沒寫python了,但還是AC了,厲害的人用什麼語言依舊厲害

 
#31626: Re: 在家自學python,用這題練習二維陣列,但是遇到了問題


bowon.lin@gmail.com (柏宇練習中)

學校 : 不指定學校
編號 : 114462
來源 : [124.218.17.159]
最後登入時間 :
2022-08-09 09:16:44
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [124.218.17.159] | 發表日期 : 2022-08-11 15:21

W,H=map(int,input().split()) #寬度跟高度
map=[]
'''================<輸入>================='''
for y in range(H):
map.append([])
map[y]=list(str(input()))
'''================<探路>================='''
for x in range(0,2*W-1,2):
go_x=x
go_y=0
while(go_y<=H):
if (go_y == H):
if (go_x > 0):
print(go_x//2+1,end=' ')
break
else:
print(go_x+1,end=' ')
break
#往左走
if (go_x > 0 and map[go_y][go_x - 1] == '-'):
go_x-=2
go_y+=1
# 往右走
elif (go_x < 2 * W - 2 and map[go_y][go_x + 1] == '-' ):
go_x+=2
go_y+=1
# 往下走
else:
go_y+=1

這樣寫就好,walk=[]測試而已

厲害...

 

 

那麼久沒寫python了,但還是AC了,厲害的人用什麼語言依舊厲害


我的程度沒那麼高,有些地方沒看懂@@

(go_x > 0 and map[go_y][go_x - 1] == '-'):

這是其中一句,我之後慢慢消化

 
#31634: Re: 在家自學python,用這題練習二維陣列,但是遇到了問題


krameri120 (科科)

學校 : 國立臺南高級工業職業學校
編號 : 102318
來源 : [36.237.212.239]
最後登入時間 :
2024-04-01 14:20:14
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [27.242.30.8] | 發表日期 : 2022-08-11 22:04

假設一開始是(x,y) =(0,0) 當作走1
就會是
(0,0) - > (2,1) -> (0,2) -> (0,3) 輸出@1@
一開始是(2,0)當作走2
(2,0) -> (0,1)  -> (2,2) -> (4,3) 輸出@3@
一開始是(4,0) 當作走3
(4,0) -> (4,1) - > (4,2) -> (2,3) 輸出@2@

 
#31647: Re: 在家自學python,用這題練習二維陣列,但是遇到了問題


bowon.lin@gmail.com (柏宇練習中)

學校 : 不指定學校
編號 : 114462
來源 : [124.218.17.159]
最後登入時間 :
2022-08-09 09:16:44
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [124.218.17.159] | 發表日期 : 2022-08-12 10:10

假設一開始是(x,y) =(0,0) 當作走1
就會是
(0,0) - > (2,1) -> (0,2) -> (0,3) 輸出@1@
一開始是(2,0)當作走2
(2,0) -> (0,1)  -> (2,2) -> (4,3) 輸出@3@
一開始是(4,0) 當作走3
(4,0) -> (4,1) - > (4,2) -> (2,3) 輸出@2@


請問我的二維陣列得到的結果和你的一樣嗎?

w,h=map(int,input().split())

p=[[0]*(w*2+1) for q in range(h)]#建立二維陣列

for i in range(h):
    k=list(str(input()))#把每個字串轉成str,再分開
    for j in range(1,2*w):
        p[i][j]=k[j-1]#存入字串

 
#31650: Re: 在家自學python,用這題練習二維陣列,但是遇到了問題


krameri120 (科科)

學校 : 國立臺南高級工業職業學校
編號 : 102318
來源 : [36.237.212.239]
最後登入時間 :
2024-04-01 14:20:14
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [27.242.30.8] | 發表日期 : 2022-08-12 11:28

不一樣,你print(p)就可以得到陣列

我的印出來會是
[['|', '-', '|', '.', '|'], ['|', '-', '|', '.', '|'], ['|', '.', '|', '-', '|']]
我的想法會是這樣(二維)
(x,y)
(1,1)='-'
(1,2)='.'
(3,2)='-'

[ ['|', '-', '|', '.', '|'],

 ['|', '-', '|', '.', '|'],

 ['|', '.', '|', '-', '|'] ]  
[somthing]一維
[[thing],[thing]]二維

 
#31655: Re: 在家自學python,用這題練習二維陣列,但是遇到了問題


bowon.lin@gmail.com (柏宇練習中)

學校 : 不指定學校
編號 : 114462
來源 : [124.218.17.159]
最後登入時間 :
2022-08-09 09:16:44
b900. 3. 蠕動小蟲 -- 2016高雄市資訊學科能力複賽 | From: [124.218.17.159] | 發表日期 : 2022-08-12 19:59

不一樣,你print(p)就可以得到陣列

我的印出來會是
[['|', '-', '|', '.', '|'], ['|', '-', '|', '.', '|'], ['|', '.', '|', '-', '|']]
我的想法會是這樣(二維)
(x,y)
(1,1)='-'
(1,2)='.'
(3,2)='-'

[ ['|', '-', '|', '.', '|'],

 ['|', '-', '|', '.', '|'],

 ['|', '.', '|', '-', '|'] ]  
[somthing]一維
[[thing],[thing]]二維


解惑了,謝謝

 

 
ZeroJudge Forum