第1回【Python】ある数字までの出力、数字の受け取り

2023年10月18日

はじめに

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

AWS Lambda でよく Python を利用するのだけれど、先人の知恵を拝借して(コピペして)、必要な部分だけ改変するという方法を利用することが多い。もちろん、これでもいいと思う。しかし、ゴリゴリと自分の力でコードを書きたくなったので、ゼロから勉強してみよう、のコーナー。

paiza ラーニングという学習サイトを使ってみた。

ちなみに、LeoSaki(旦那)のスキル的には、Java の Silver を持っているのと、PHP では結構ゴリゴリと自分でコードを書いている。VBA とのお付き合いもかなり長い。SQL もまぁ、普段使いはできている。正直、序盤戦は簡単過ぎて苦痛すら感じてしまっているのだが、Python ってこんな書き方できるんだ、みたいな気づきが多かったのも事実。

そして、正直楽しい。

ある数字までの出力 1

整数 1 ~ 10 を、1 から順に改行区切りで出力してください。

とりあえず、まじめに書いてみる。

Python
for i in range(10):
    print(i + 1)

range 関数は、指定なければ 0 からスタートする。そして、指定した数の -1 までインクリメントされる。
いまだにこれを忘れて要素が一つ足りないと騒ぐのは誰か? それは LeoSaki(旦那)です。

1 行で書いてみる。

Python
print( *[i for i in range(1,11)], sep="\n")

Python の美しい書き方だよなぁって思う。初心者の方がタイトルに釣られて見にこられていたらごめんなさい。そのうち、このコードの説明もしてみようと思うので、今はこんな書き方もあるのかと面白がっていただけたら嬉しい。

ちょっと毛色が違うけれど、VBA で書くとすると?(コードのみ)

VBA
For i = 1 To 10
    debug.Print = i
Next

ある数字までの出力 2

正の整数 N が与えられます。
1 ~ N の整数を 1 から順に改行区切りで出力してください。

標準入力からの値の取得が簡単にできるのも Python の素敵なところ。

Python
N = int(input())
for i in range(N):
    print(i + 1)

これも、 1 行で書いてみる。

Python
print( *[i for i in range(1,int(input()) + 1)], sep="\n")

1 行で書いても、何がやりたいのかわかりやすいです。

Java や PHP だとこうはいかない。
VBA で書いてみる。(標準入力は、セル A1 から値を取得することにします)

VBA
For i = 1 To cells(1,1)
    debug.Print i
Next

数字の受け取り 1

10 個の整数 K_1, K_2, …, K_10 が与えられます。
これらを受け取り、改行区切りで出力してください。

半角スペースで区切りで 10 個並んだ整数を受け取るのか。

Python
K = map(int,input().split())
print(*K,sep="\n")

map 関数だと、1 行にするのがちょっと手間な気がする。内包表記だったら、1 行で書ける気がする。
1 行で書く必要はないのだが。

Python
print(*[int(x) for x in input().split()],sep="\n")

読みやすくてわかりやすい。
さて、VBA で書くとどうなるか。

VBA
K = split(cells(1,1)," ")
For i = 1 To UBound(K)
    debug.Print i
Next

数字の受け取り 2

N 個の整数 K_1, K_2, …, K_N が与えられます。
これらを受け取り、改行区切りで出力してください。

今度は受け取る個数が不明な場合。まずは天邪鬼な回答をしてみる。

python
input()
K = map(int,input().split())
print(*K,sep="\n")

input 関数で値を受け取る行を 1 行進めて、後は、「数字の受け取り 1」とまったく同じ。なんか綺麗で素敵。

それでは、1 行には・・・できないので、2 行にするとどうなるか。

Python
input()
print(*[int(x) for x in input().split()],sep="\n")

結局、これでも同じ。与えられた N を利用していない。
やっぱり、与えられた数字は利用しないといけない気がしてくる。

Python
N = int(input())
K = [int(x) for x in input().split()]
for i in range(N):
    print(K[i])

まぁ、可読性は高まったかな?

やる必要性に疑問を持ちつつ、VBA で書いてみる。( N をセル A1、K をセル A2 で受け取る)

VBA
K = split(cells(2,1)," ")
For i = 1 To UBound(K)
    debug.Print i
Next

受け取る場所(セル)が変わっただけで、さっきと変わらない。

最後に

普段は運用監視のお仕事で、あまりコードを書くことはない。それでも、元々は PG になりたくてこの業界に足を突っ込んだわけなので、コードを書いていると楽しくてしょうがない。

真面目に学習を進めて、可読性の高いコードが書けるようになりたいと思った。

目標は業務でビッグデータ解析用に作った Lambda( 70 以上ある)を全部書き直すこと。いや、それ、先は長い気がするぞ?

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

JavaScript の第1回はこちら

PythonPython,paiza,学習

Posted by LeoSaki