第2回【Python】ある数をある回数表示、a ~ z までを表示

2023年10月18日

はじめに

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

Python をゼロから勉強してみよう、のコーナー 2 回目です。
paiza ラーニングで学習しています。

LeoSaki(旦那)は勉強するのが好きです。
そこで、勉強なんか嫌いだ、って言っている方に一言。

「自分自身に勉強が好きだ、と思い込ませることができるのも才能ですよ」

ある数をある回数表示 1

3 を 8 回、改行区切りで出力してください。

なんじゃ? この問題は。33333333 を縦に並べる?

Python
for i in range(8):
    print(3)

大変わかりやすい。だけども、やっぱり 1 行で書いておきたい。

Python
print(*[3 for _ in range(8)],sep="\n")

_(アンダーバー)は、Python の慣習で、利用しない変数を表している。最初見たときには意味が分からなくてとまどった。
だから、次のように書いても問題ないと思う。

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

変数 i は利用されていないので、_(アンダーバー)にしておこう、ってことなんだな。面白い。

では、VBA で書いてみる。とてつもなく意味がない気がするが、paiza では PHP や Java 、C++ といった言語は解答例が示されているため、敢えての VBA チャレンジだ。
そんなに長くは続かないと思う・・・。

VBA
For i = 1 To 8
    debug.Print 3
Next

For 文は、Python では、「 0 から 7 」までの 8 回を繰り返し、VBA では、「 1 から 8 」までの 8 回を繰り返している。
相変わらず、間違えることが多いのは誰か? それは、LeoSaki(旦那)です。

ある数をある回数表示 2

整数 N, K が与えられます。
N を K 回、改行区切りで出力してください。

なるほどなるほど。N と K は、半角スペース区切りで渡される、と。

Python
N,K = map(int,input().split())
for _ in range(K):
    print(N)

この、map 関数を利用した、「 N,K = map(int,input().split) 」って書き方、独特でいいですよね。最初、map 関数を理解できていなかったので(今だって完全に理解しているかは自信ないけれど)、こんな面倒な書き方をしていた。

Python
N,K = input().split()
N = int(N)
K = int(K)

これだって、次のように書くことができる。

Python
N,K = input().split()
N,K = int(N),int(K)

もちろん、やろうとしていることがわかりやすくて、間違いとは一概に言えない・・・んだろう。

VBA で書いてみる。

VBA
NK = split(cells(1,1)," ")
For i = 1 to NK(0)
    debug.Print NK(1)
Next

やってて意味がわからなくなってきたけれど、チャレンジすることが大事だと自分に言い聞かせておく。

a ~ z までを表示

a ~ z のアルファベットを、改行区切りで出力してください。

これは知らないと解けない問題だった。

Python
for i in range(26):
    print(chr(97+i))

小文字の「a」が 97 でそこから 26 文字を出力する。

もっとスマートに書いた方がいいでしょうか。

Python
for i in range(97,97+26):
    print(chr(i))

1 行で書けそうなときは、1 行おじさんが出没。

Python
print(*[chr(i) for i in range(97,97+26)],sep="\n")

さて、これを VBA で書くとどうなるか。

VBA
For i = 0 To 25
    Debug.Print Chr(97 + i)
Next

VBA でも変わりませんでした。
ということは、もっとわかりやすく(?)書けそう。

VBA
For i = 97 To 97 + 25
    Debug.Print Chr(i)
Next

+26 なのか、+25 なのか、「end」の扱い方を間違えないようにしないと。
いつも間違えるのは誰か? それは、LeoSaki(旦那)です。

最後に

Python での _(アンダーバー)の使い方は独特だなぁと思う。__init__ とか、__main__ とか、あと、スコープがプライベートのときのアンダーバーとか。まだ全然使いこなすことができていないので、学習を続けていきたい。

それと、Python の内包表記って便利ですね。あれを他の言語で書こうと思うと、結構な行数になっちゃうと思うんだ。実際、VBA では、3 行必要になっているし。変数宣言をきちんとしてやると、3 行では絶対に済まない。

使いこなせると面白いんだろうなぁ。

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

JavaScript の第2回はこちら

Python学習,Python,paiza

Posted by LeoSaki