第3回【Python】数列の和、数列の A 番目から B 番目までの和、数列の値を全部 * 2 して出力
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 3 回目です。
paiza ラーニングで学習しています。
人と違うことをしてみよう、と勢いで VBA にしてしまったことを後悔し始めています。3 回目です。「やめる勇気」ってカッコ良くないですか?
数列の和
長さ N の数列 a (a_1, a_2, …, a_N) が与えられます。
この数列の和を計算し、出力してください。
ふむふむふむ。この章のテーマはループ。ちゃんとループで書いた方が良いのでしょう。(今更ですが)
Python
N = int(input())
A = [int(x) for x in input().split()]
ans = 0
for i in range(N):
ans += A[i]
print(ans)
わかりやすく、美しい。しかし、LeoSaki(旦那)は知っていました。
困ったときにはサムを呼べばいいことを!
Python
input()
A = [int(x) for x in input().split()]
print(sum(A))
あるもの使って何が悪い!
Python のリストで利用できる関数はたくさんあるので、随時、紹介という名の自分自身の復習をしていきたいと思う。
sum は言わずと知れたプレミアな筋肉マン。珊瑚とか持ち上げながら、リストの中身の合計を出してくれる。エクセルの sum 関数でイメージはつきやすいと思うのだけれど。
さて、VBA で書くのを考える方が面倒じゃないか? いつもの如く、セル A1 に N を、セル A2 に数列 A を入れてあります。
VBA
A = Split(Cells(2, 1), " ")
ans = 0
For i = 0 To UBound(A)
ans = ans + A(i)
Next
Debug.Print ans
数列の A 番目から B 番目までの和
長さ N の数列 a (a_1, a_2, …, a_N) と、整数 A, B が与えられます。
この数列の a_A から a_B までの和を計算し、出力してください。
なるほど。今度は、リストの中の決められた区間の和を求めろ、とそういうことですな。
まずは、前問に倣って、ループを使って解いてみる。
Python
N,A,B = map(int,input().split())
a = [int(x) for x in input().split()]
ans = 0
for i in range(A-1,B):
ans += a[i]
print(ans)
わかりやすく、美しい。しかし、LeoSaki(旦那)は知っていました。
サムは、スライスしてても助けてくれることを!
Python
N,A,B = map(int,input().split())
a = [int(x) for x in input().split()]
print(sum(a[A-1:B]))
List [ start : end ] がスライスの基本形。step はそのうち出てくると思う。いやわからんけど。
li = [10,20,30,40,50] のとき、li[3:5] であれば、[40,50] となる。Python の end は、「while i < end」です。あとは慣れろ。
サムの助けを借りて、3 行で書き終えた LeoSaki(旦那)は、VBA も書いてみようと思ったのでした。
セル A1 に N,A,B が、セル A2 に数列 a が半角スペース区切りで入っています。
VBA
NAB = Split(Cells(1, 1), " ")
a = Split(Cells(2, 1), " ")
ans = 0
For i = NAB(1) To NAB(2)
ans = ans + a(i - 1)
Next
Debug.Print ans
悪くないんじゃなかろうか。
数列の値を全部 * 2 して出力
長さ N の数列 a (a_1, a_2, …, a_N) が与えられます。
この数列の全ての要素を 2 倍し、改行区切りで出力してください。
さぁて、今日の最後だ。ループで上手に処理してみよう。
Python
N = int(input())
A = [int(x) for x in input().split()]
for i in range(N):
print(A[i]*2)
行数を少なくするだけだったら、これでもよさそう?
Python
input()
print(*[int(x)*2 for x in input().split()],sep="\n")
逆に可読性が落ちた気がするので、内包表記は外に出しておきます。
Python
input()
A = [int(x)*2 for x in input().split()]
print(*A,sep="\n")
なんか Python らしくていいんじゃないだろうか。
これを VBA で書くとどうなるか。
セル A1 に N が、セル A2 に数列 A が半角スペース区切りで入っています。
VBA
A = Split(Cells(2, 1), " ")
For i = 0 To UBound(A)
Debug.Print A(i) * 2
Next
標準入力から値を取得するのではなく、セルから値を取得するのであれば、VBA は Python に近い。ここまでは。C++ の回答例よりも全然少ない行数で書けてるぞ!
最後に
この基本中の基本をしっかり自分のものにすることで、実際のコーディングを早く正確にできるようになると信じている。信じること大事。
いつも、お付き合いいただきありがとうございます。
LeoSaki(旦那)はここでアウトプットすることで、記憶をより確実に定着させることができています。
というわけで、引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません