0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

tryとexcept Python競プロメモ④

Posted at

使用言語 Python3

##.
###
...

上に書いたように3×3のマスがあるとし、そのうち上下左右のマスが「#」であるマスの座標を選ぶプログラムを書きたい。
ちなみに左上のマスを(0,0)とする。
これが

0 0
0 2

と出力するようにしたい。

new_data = [['#','#','.'],['#','#','#'],['.','.','.']]
H = 3 #行数
W = 3 #列数

データはこのように与えられているとする。

私の考えとして
①まずH、Wでfor文を作り、h行w列目を軸として、まずその両隣を見る。ここに「.」があればcontinueで抜ける。
②次に上下を見る。同様に「.」があればcontinueで抜ける。
③for文を抜けずにたどり着いた要素だけprintする

実際にコードで書いてみると

for h in range(H):
    for w in range(W):
        try:
            if new_data[h][w+1] == ".":
                continue
        except IndexError:
            pass
        try:
            if new_data[h+1][w] == ".":
                continue
        except IndexError:
            pass
        if w >= 1:
            if new_data[h][w-1] == ".":
                continue
        if h >= 1:
            if new_data[h-1][w] == ".":
                continue
        print(h,end = " ")
        print(w)

これで目的の出力を得ることができた。

このコードではtry文を使うことで、IndexErrorが起こっても対処できるようにした。

あと一点、私が詰まった点として、

new_data[h][w-1]

の記述について。
w=0の時、[w-1]は[-1]となってしまうため、本当gは一番最初の要素が欲しいにも関わらず、列の一番最後の要素が選ばれてしまうというミスをしてしまった。

なのでここではその前にw>=1とし[w-1]が自然数となるように指定した。

リストでマイナスを使うときはこの点に注意していきたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?