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

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

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

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

Q&A

解決済

3回答

505閲覧

2次元配列の問題について

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2021/09/18 15:10

以下の2次元配列(Python)の問題について、回答をお願いします。

1.ユーザーが入力する数字の数と列数を入力
(例) 3 2

2.ユーザーに1.の通りに入力してもらう
(例) 1 2 3
3 4 5

  1. ユーザーに掛け算する数を入力してもらう

(例) 3


  1. 掛け算した結果を出力

(例) 3 6 9
9 12 15

num =input()
n1=int(num.split()[0])
n2=int(num.split()[1])

a = [[int(j)*m for j in input().split()] for i in range(n2)]
.
.
.
print(*a,sep='\n')

for a in a:
print(*a,sep='\n')

上記のような具合で書いているのですが、最後まで書けませんでした。
まず、掛け算するところで詰まってしまいます。
(どのようなタイミングで*mのmを取得すればいいのか等...)

2次元配列が大変苦手なので解説つきで教えていただきたいです。
よろしくお願いします。

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

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

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

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

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

meg_

2021/09/18 15:23

> 以下の2次元配列(Python)の問題について 何の問題なのでしょうか?解答は公開されていませんか?
退会済みユーザー

退会済みユーザー

2021/09/18 15:25

ある演習の問題です。残念ながら回答はありませんでした。
guest

回答3

0

(最初、問題の意図がよくわからなかった…数字の関係性がよくわからなくて)

まず、プログラミングは『こう書けばいい』というものではありません。
プログラムは魔法でもなんでもなく、人間が現実世界でやっている手順を逐一指示されながら処理しているだけの代物である』です。

つまり、『現実世界のシミュレーション』です。

なので、まずはPythonが〜のようなことは置いといて、現実世界で考えてみましょう。たとえば数学の問題を解くとか、手作業でやる処理とかと想定するのです。

おそらく、今回は、

ある人(Aさん)が最初に『今からいう一回分の個数』と『その固まりの個数』(=列数と行数というところか)を言います。 それが完了したら、Aさんはとある数列を言います。 さらにそれが完了したら『かける数』を言います。 あなたはこの数列の各項にそれぞれ『かける数』をかけた数列を生成してください。

というところでしょうか。…あ、いや数列じゃなくて行列か?
まあいいや、とにかくそういうふうに考えてみます。

たとえば、

[行列の列数] [行列の行数]
[行列]
[かける数]

のような並びであったら、どうしますか?

私なら列数をC, 行数をR, かける数をNとしたら、
とりあえず、CとRを確認して行列を生成。

そして、Nも取得しておく。
これらをノートかホワイトボードかなんかに書いておく。

で、行列は

1 2 3 4 5 6 7 8 9

のようなものですよね。

なにかに見えませんか?そう、Excelのやつです。

Excelは行と列からなりますね。

(多くのプログラミング言語では)配列は0番目から開始しますが、Excelは1から開始します。そういう違いはありますが、イメージとしてはそれに近いです。

で、今回の場合、単に各項にNをかけるだけなので、

上記で挙げた1,2,3…の行列では 1×N, 2×N, 3×N…となります。

で、質問者さんはExcelのようなものを使って計算するとき、ExcelVBA等を使わずに手作業でやるという前提だとして、一気に計算しますか?

違いますよね?

私は無理なので、一個ずつやります。
で、最初に一行目からやる。A1セルからやり、次にB1セルをやり、C1セルをやる。
最後の列まで来たら、次の行である『二行目』に移動。
A2セルをやり、B2セルをやり、…
最後の列まできたら、次の行である『三行目』に移動…

のようにしますね。

これをプログラミングで実現するなら、for文を入れ子にします。

外側のforで『行』を処理し、内側の『列』を処理する。
(場合によっては逆になるかもしれないが、今回はこれでOKだと思う)

これを実装して、デバッグすればいいだけです。

今はここまでとします。
(今それ以上書くと答えになってしまい、質問者さんにとって意味がなくなるため)

**質問本文に、元の質問文を崩さずにここまでの内容でできたコードを載せていただければ、**追記する予定です。(時間があわない可能性もあるが)

投稿2021/09/19 05:17

BeatStar

総合スコア4958

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

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

BeatStar

2021/09/19 05:18

ちなみに行列の場合、『項』とはいわないかもしれませんが、便宜上として。
guest

0

ベストアンサー

以下のように問題を書き換えてやってみてください。
これができるようになれば、もとの問題もおなじようにできます。

  1. ユーザーが入力する数字の数と列数をユーザーに入力してもらう

(入力例)
3 2

  1. ユーザーが入力したものを表示する

(出力例)
3 2

  1. ユーザーに1.の通りに入力してもらう

(入力例)
1 2 3
3 4 5

  1. ユーザーが入力したものを表示する

(出力例)
1 2 3
3 4 5

  1. ユーザーに掛け算する数を入力してもらう

(入力例)
3

  1. ユーザーが入力したものを表示する

(出力例)
3

  1. 掛け算した結果を出力

(出力例)
3 6 9
9 12 15

投稿2021/09/19 00:09

ppaul

総合スコア24666

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

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

0

どのようなタイミングで*mのmを取得すればいいのか

python

1a = [[int(j)*m for j in input().split()] for i in range(n2)]

ここで、掛けられる数のリストを受け取りながら、後から入力される掛ける数を掛けるのは無理です。
ここでは、かけられる数の配列を作ることにして、その後掛ける数mを入力してもらってから、aの全ての要素にmを掛けるという手順にするのがいいでしょう。

投稿2021/09/18 16:12

TakaiY

総合スコア12765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問