質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

461閲覧

teratail 雛形 Atcoder、Pythonにコードの間違い指摘への助言

sakura.k

総合スコア50

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/08/12 04:40

前提

Atcoderの以下の問題にて、コードを書いたのですが、期待する出力がなされませんでした。コードを見ていただき、問題点を教えていただきたいです。

実現したいこと

以下の問題において、期待する出力を出すようなコードを書くこと。
https://atcoder.jp/contests/past202010-open/tasks/past202010_c

発生している問題・エラーメッセージ

入力に対する出力が異なる。

該当のソースコード

python

1n,m = list(map(int,input().split())) 2s=[input() for i in range(n)] 3 4#8方向 5d_x = [1, 0, -1, 0, 1, -1, -1, 1] 6d_y = [0, 1, 0, -1, 1, 1, -1, -1] 7 8#出力するマス目 9ans=[[0]*m]*n 10 11#行 12for i in range(n): 13 #列 14 for j in range(m): 15 cnt = 0 16 #8方向について調べる。 17 for k in range(8): 18 #8方向についてそれぞれ、マス外でないか調べる。 19 search_i = i + d_y[k] #y方向について 20 search_j = j + d_x[k] #x方向について 21 #空きマスの周囲を調べる際、調べる場所によっては範囲外エラーになることが予想されます。 22 #そのため、元々用意されているマス目に収まる範囲、かつ爆弾マスだったらcnt+1されるように条件文で書いています。 23 if 0 <= search_i < n and 0 <= search_j < m and s[search_i][search_j] == "#": 24 cnt += 1 25 #もし自分自身が「#」」の場合、プラス1 26 if s[i][j]=="#": 27 cnt+=1 28 #答え。 29 ans[i][j] = cnt 30 31for i in range(n): 32 for j in range(m): 33 #「end=""」によって、一行分、改行せずに出力する。 34 print(ans[i][j], end = "") 35 #一行分出力し終えたら、改行を行う。 36 print()

試したこと

実際にコードを書きました。

補足情報(FW/ツールのバージョンなど)

なし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2022/08/12 04:53

デバッグした内容を質問に追記していただけませんか。 それともデバッグ作業の依頼でしょうか。
y_waiwai

2022/08/12 07:34

異なる、とはどういうふうに異なるんでしょうか。 実際の出力を提示しよう
sakura.k

2022/08/12 07:42

例えば、入力が以下の通り。 3 4 #.## ..#. #... この場合、期待する出力は以下の通り。 1333 2433 1211 しかし、記述したコードでの出力は、以下の通りとなりました。 1211 1211 1211
kazuma-s

2022/08/13 00:15

入出力例は質問に追記してください。
guest

回答1

0

ベストアンサー

ans=[[0]*m]*n ですが、これは

Python

1a = [0] * m 2ans = [a] * n

と同じです。
ans[0] も ans[1] も全部同じひとつの a です。
ans[0][0] を変更すると、ans[1][0] も変更されます。

ans = [[0] * m for i in range(n)] と書いてみてください。

投稿2022/08/13 00:14

編集2022/08/13 00:21
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問