第4回【Python】数列同士の引き算、数列の反転、九九の表示
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 4 回目です。
paiza ラーニングで学習しています。
ここまでやってきた問題の大テーマが「ループメニュー」だったこと、知ってました? LeoSaki(旦那)が伝え忘れていたため、知ってる人にとっては、何まわりくどいことしてるんだ! な内容になっていることを何も反省せずに、今日もやっていきたいと思います。
数列同士の引き算
長さ N の数列 a (a_1, a_2, …, a_N) と b (b_1, b_2, …, b_N) が与えられます。
a の各要素から b の各要素を引いた結果 (a_1 – b_1, a_2 – b_2, …, a_N – b_N) を、改行区切りで出力してください。
問題文だけを読むと、なんだかめんどくさそうな内容ですが、冷静に考えると至って簡単なことです。
Python
N = int(input())
A = list(map(int,input().split()))
B = list(map(int,input().split()))
for i in range(N):
print(A[i]-B[i])
これ以上、どうしようもないですかね。
いや、1 行短くできますけれど、可読性的にどうなんだろう。
Python
N = int(input())
A = list(map(int,input().split()))
B = list(map(int,input().split()))
print(*[A[i]-B[i] for i in range(N)],sep="\n")
プロジェクトのメンバーに文句を言われそうなコードは書くのをやめたほうがいいと言われました。
VBA でも、結局同じ感じになるんだよなぁ。
セル A1 に N が、セル A2 に数列 a が、セル A3 に数列 b が、半角スペース区切りで入っています。
VBA
N = Cells(1, 1)
A = Split(Cells(2, 1), " ")
B = Split(Cells(3, 1), " ")
For i = 0 To N - 1
Debug.Print A(i) - B(i)
Next
数列の反転
長さ N の数列 a (a_1, a_2, …, a_N) が与えられます。
この数列の要素を逆順に、改行区切りで出力してください。
後ろから順番に出力するのか。start と end については学習したので、start と end をいつもと逆にして、後は 1 ずつ数字を減らしていけばいいのかな?
Python
N = int(input())
A = list(map(int,input().split()))
for i in range(N-1,-1,-1):
print(A[i])
Python は、while i < end 、決して、while i <= end ではない! のだから、リストの先頭のインデックス 0 まで数字を進めるためには「-1」を指定してあげなければならないっと。そして、3 番目に指定した数字分だけ、i の値は変化する。
しかし、LeoSaki(旦那)は知っている。スライスの最後に step を指定してあげれば、リストから直接逆順で要素を取り出せてしまうことを!
Python
input()
A = list(map(int,input().split()))
print(*A[::-1],sep="\n")
もし、ここが学校で、ループを学習するための授業でこんなコードを書いて提出したら、大きなペケをもらっちゃうんだろうなぁ。似たような経験あり。
それでは、VBA にチャレンジしてみよう。
VBA
A = Split(Cells(2, 1), " ")
For i = UBound(A) To 0 Step -1
Debug.Print A(i)
Next
九九の表示 1
九九の 8 の段を半角スペース区切りで出力してください。
出力の末尾には改行を入れてください。
8 の段、ちゃんと言えますか? 自信のない方は、このコードをいつでも書けるようにしておけば、8 の段を忘れても大丈夫、かもしれない。
Python
li = [0]*9
for i in range(1,10):
li[i-1] = 8 * i
print(*li)
これ覚えるより、8 の段覚えた方がマシじゃないですか? 掛け算の方に合わせて i の範囲を指定したから、よりわかりにくくなっている。
というか、これでよくないですか?
Python
print(*[i * 8 for i in range(1,10)])
では、VBA にも取り掛かってみようと思う。
VBA
For i = 1 To 9
Debug.Print 8 * i;
If i = 9 Then Debug.Print
Next
セミコロンつきの debug.print は滅多に使わないから忘れかけてた! 今回のアウトプットで、知識が定着したんじゃないだろうか!
末尾に改行を入れろ、と言うのだから、9 回目の掛け算で、debug.print を追加している。
VBA の場合、出力をセルにした方が、もっと柔軟に対応できそうですね。debug.print なんて、結局のところ一般ユーザーは見ないわけだし。
九九の表示 2
整数 N が与えられます。
九九の N の段を半角スペース区切りで出力してください。
出力の末尾には改行を入れてください。
これは簡単ですね。先ほどの 8 の段が、N の段に変わっただけですから。
Python
N = int(input())
print(*[i * N for i in range(1,10)])
同様に、VBA も書いてみます。
セル A1 に N が入っています。
VBA
N = Cells(1, 1)
For i = 1 To 9
Debug.Print N * i;
If i = 9 Then Debug.Print
Next
最後に
LeoSaki(旦那)は数学が好きで、小学 6 年生の頃には方程式を覚えていた。
で、小学 6 年生の問題って意地悪なのな。LeoSaki(旦那)が思う代表的な意地悪問題が鶴亀算。あれって、方程式を使えば瞬時に解けちゃう問題じゃない? LeoSaki(旦那)は、さくっと秒で解いて先生に持って行ったら、「これはまだ教えていないから使っちゃダメだ!」と大きなペケをもらった。
ループ文を使って解けと言われたら、ループ文を使って解かないといけないんだよ。じゃないと、大きなペケをもらっちゃうんだよ。
大きな心の傷をさらけ出しながら、まだまだ学習を続けたいと思います。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません