前提
Atcoderの以下の問題にて、コードを書いたのですが、期待する出力がなされませんでした。コードを見ていただき、問題点を教えていただきたいです。
実現したいこと
以下の問題において、期待する出力を出すようなコードを書くこと。
https://atcoder.jp/contests/past202010-open/task …
ソースコード
n,m = list(map(int,input().split()))
s=[input() for i in range(n)]
#8方向
d_x = [1, 0, -1, 0, 1, -1, -1, 1]
d_y = [0, 1, 0, -1, 1, 1, -1, -1]
#出力するマス目
ans=[[0]*m]*n
#行
for i in range(n):
#列
for j in range(m):
cnt = 0
#8方向について調べる。
for k in range(8):
#8方向についてそれぞれ、マス外でないか調べる。
search_i = i + d_y[k] #y方向について
search_j = j + d_x[k] #x方向について
#空きマスの周囲を調べる際、調べる場所によっては範囲外エラーになることが予想されます。
#そのため、元々用意されているマス目に収まる範囲、かつ爆弾マスだったらcnt+1されるように条件文で書いています。
if 0 <= search_i < n and 0 <= search_j < m and s[search_i][search_j] == "#":
cnt += 1
#もし自分自身が「#」」の場合、プラス1
if s[i][j]=="#":
cnt+=1
#答え。
ans[i][j] = cnt
for i in range(n):
for j in range(m):
#「end=""」によって、一行分、改行せずに出力する。
print(ans[i][j], end = "")
#一行分出力し終えたら、改行を行う。
print()
No.2ベストアンサー
- 回答日時:
#出力するマス目
ans=[[0]*m]*n
ですが、ansはあなたの期待する2次元配列になっていません。
ans = [[0 for j in range(m)] for i in range(n)]
に変えてください。
そうすれば、期待した結果が得られます。
以下のスクリプトを実行すると違いがよくわかります。
□は半角の空白2つに置き換えてください。
----------------------------------------
n = 2
m = 4
ans1 = [[0]*m]*n
ans2 = [[0 for j in range(m)] for i in range(n)]
k = 1
for i in range(n):
□□for j in range(m):
□□□□ans1[i][j]=k
□□□□ans2[i][j]=k
□□□□k=k+1
print(ans1)
print(ans2)
-------------------------------------
実行結果
[[5, 6, 7, 8], [5, 6, 7, 8]]
[[1, 2, 3, 4], [5, 6, 7, 8]]
ans1 = [[0]*m]*nで作成した配列は
1行目と2行目が同じオブジェクトになっています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで実行時エラー'424' オブジェクトが必要ですと出る 2 2022/10/07 09:25
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
AIに回答させるって
-
cout と cerrの違い
-
プログラムについての質問です...
-
OBS配信すると、マイクが途切れ...
-
VBAでテキスト出力時のスペース...
-
KEYENCEのシーケンスプログラム...
-
MMDでavi出力が出来ない
-
ListViewの複数選択について
-
VBAのExecメソッドで画面を非表...
-
printfとputcharの違いは
-
エクセルVBAにて アルファ...
-
COBOLで可変長ファイルの出力に...
-
アクセスでエクセルに出力する...
-
Windows Formアプリからコンソ...
-
テキストファイルから特定の文...
-
printfの書式%.*s
-
バッチファイル フォルダサイ...
-
C#でピクチャーボックスに文字...
-
【VBA】PDFを2in1で出力したいです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
コンセントの電力は入力と出力...
-
MMDでavi出力が出来ない
-
OBS配信すると、マイクが途切れ...
-
VBAでテキスト出力時のスペース...
-
cout と cerrの違い
-
COBOLのMOVEで桁数が異なる場合
-
ACCESS クエリ→フォーム...
-
アクセスでエクセルに出力する...
-
VBAのExecメソッドで画面を非表...
-
テキストファイルから特定の文...
-
Windows11対応の3入力1出力 USB...
-
VBAで有効数字の設定
-
スマホのバッテリー消費につい...
-
Excel VBAで値を変えながら、pd...
-
NTTのホームゲートウェイとOCN...
-
定格冷房能力(出力)とは 定格...
-
プログラムについての質問です...
-
PS5をMacBookProに出力したいの...
おすすめ情報