第30回【Python】二次元配列の入力 3、二次元配列の入力 4

現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 30 回目です。

思えば遠くに・・・30 回。もっと頻繁にやりたいと思いつつ、仕事との兼ね合いでなかなか時間を確保することができない、歯がゆい感じ。それでも、自分の血肉になる学習と思って、時間を確保していく所存です。

それでは、今日も頑張ってみようと思います。

二次元配列の入力 3

1 行目に整数 N が与えられます。
2 行目以降に N 行 5 列の配列が与えられます。上から i 番目、左から j 番目の整数は a_ij です。
全要素を各行ずつ半角スペース区切りで出力し、行の終わりで改行してください。


すべてのテストケースにおいて、以下の条件をみたします。

* N, a_ij は 1 以上 100 以下の整数


入力例

3
8 1 3 8 1
1 5 6 4 7
1 100 56 25 15

これは、ここまでの学習で得た知識を使えば簡単。

Python
N = int(input())
A = [list(map(int,input().split())) for _ in range(N)]
for a in A:
    print(*a,sep=" ")
VBA
N = Cells(1, 1)
Dim L() As Long
ReDim L(1 To N, 1 To 5)
For i = 1 To N
    S = Split(Cells(i + 1, 1), " ")
    For j = 1 To 5
        L(i, j) = Val(S(j - 1))
    Next
Next
For i = 1 To UBound(L, 1)
    For j = 1 To UBound(L, 2)
        Debug.Print L(i, j);
    Next
    Debug.Print
Next

前回同様、要素数を変数で宣言しようとすると、Dim では「定数式が必要です」とエラーが発生。回避策としては、ReDim ステートメントで要素数の宣言をすること。

二次元配列の入力 4

1 行目に整数 N と整数 M が与えられます。
2 行目以降に N 行 M 列の配列が与えられます。上から i 番目、左から j 番目の整数は a_ij です。
全要素を各行ずつ半角スペース区切りで出力し、行の終わりで改行してください。


すべてのテストケースにおいて、以下の条件をみたします。

* N, M, a_ij は 1 以上 100 以下の整数


入力例

4 3
1 2 3
8 1 3
10 100 0
12 24 84

とうとう、行も列も標準入力から与えられるようになった。

Python
N,M = map(int,input().split())
A = [list(map(int,input().split())) for _ in range(N)]
for a in A:
    print(*a,sep=" ")

与えられた「M」を利用していないので、厳密な正解かと言えば不安だけれど、まぁ、Python らしくて良いんじゃないだろうか。

VBA
NM = Split(Cells(1, 1), " ")
N = Val(NM(0))
M = Val(NM(1))
Dim L() As Long
ReDim L(1 To N, 1 To M)
For i = 1 To N
    S = Split(Cells(i + 1, 1), " ")
    For j = 1 To M
        L(i, j) = Val(S(j - 1))
    Next
Next
For i = 1 To UBound(L, 1)
    For j = 1 To UBound(L, 2)
        Debug.Print L(i, j);
    Next
    Debug.Print
Next

やっていることは変わらないのに、何か複雑なことをやっているように勘違いしてしまうようなコード。ちゃんとコメントを残しておかないと、引き継いだ人は読むのが面倒って感じてしまうかもしれない。

最後に

全然難しいことをしていないはずなのに、Python と VBA で大きな差が出てしまっている。まぁ、模範解答としてあげられている、C++ や Java でも、結構面倒くさそうに見えるコードとなっているので、Python の特異さが見え隠れするような学習になっているのではないか。

一番は、楽しい! です。楽しいから 30 回も続いていますし、まだまだ頑張れそうな気がしています。

引き続き、よろしくお願いいたします!

Pythonpaiza,学習,Python

Posted by LeoSaki