第7回【Python】未知数個の数の受け取り、未知数個の文字列の受け取り

はじめに

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

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

問題集の中の「ループメニュー 2」になります。(前回までが「ループメニュー 1」でした)

ネットに落ちているコードのコピペだけで動くのだけれど、そのコードを理解することができれば面白いと思いませんか?
というわけで、今日も頑張って勉強していきます。

未知数個の数の受け取り

長さがわからない数列 a が入力されます。
-1 が入力されるまで、受け取った数を改行区切りで出力してください。

今までは、親切にも数列の長さ N が与えられていたけれども、今度は数列の長さは教えてくれないらしい。まずは、主題であるループに沿って解答を考える。

Python
A = list(map(int,input().split()))
for a in A:
    print(a)
    if a == -1:
        break

声が・・・聞こえます。今度は、while を使うのです。
なるほど。while 文に書き換えてみよう。

Python
A = list(map(int,input().split()))
i = 0
while True:
    print(A[i])
    if A[i] == -1:
        break
    i += 1

paiza 先生の解答例も while が使用されているが、説明書きには「 for 文を用いて出力します」との記載がある。paiza 先生、結構小さなミスがあるんだよなぁ。まぁ、ちゃんと意味は通じるからいいんだけど。

さて、VBA でも while 文を使って書いてみよう。

VBA
A = Split(Cells(1, 1), " ")
i = 0
While A(i) <> -1
    Debug.Print A(i)

    i = i + 1
Wend
Debug.Print -1

while 文は exit で抜けることができない。強引にやろうとするとこんな感じだろうか。Do loop ならもっと綺麗に書けそうだ。

VBA
A = Split(Cells(1, 1), " ")
i = 0
Do
    Debug.Print A(i)
    If A(i) = -1 Then Exit Do
    i = i + 1
Loop

未知数個の文字列の受け取り

複数の文字列が入力されます。文字列の数はわかりません。
EOF が入力されるまで、受け取った文字列を改行区切りで出力してください。

今回は文字列と指定があるので、前問よりも簡潔になるんじゃないかな? map 関数で数値変換をする必要がないわけだから。

Python
S = list(input().split())
i = 0
while True:
    print(S[i])
    if S[i] == "EOF":
        break
    i += 1

最初から while 文を利用したコードを書いたぞ。注意すべきは、文字列なので、EOF を文字列として扱うことだろうか。ダブルクォーテーションかシングルクォーテーションで囲む。

Python において、ダブルクォーテーションとシングルクォーテーションに違いはないそうだ。最初にルールを決めて、ルール通りに利用することで、コードの可読性が高まりそう。

では、VBA で書いてみよう。最初から Do Loop 文にする。
時々書き忘れているのはご愛敬。セル A1 に文字列 S が半角スペース区切りで入力されています。

VBA
S = Split(Cells(1, 1), " ")
i = 0
Do
    Debug.Print S(i)
    If S(i) = "EOF" Then Exit Do
    i = i + 1
Loop

VBA の場合は、文字列はダブルクォーテーションで囲む。

最後に

for 文に続いては、while 文の学習。

実際に非常に使用頻度の高いものだと思うので、しっかり基礎を固めていきたいと思った。

きちんと while 文を抜ける処理を書けていなければ、無限ループに突入する。たまぁーにやってしまって、強制終了しなければいけなくなるときのやるせなさ。

都度、もっと注意深くしようと反省するのは誰か? それは、LeoSaki(旦那)です。
だけど、それを繰り返しているのは誰か? それは、LeoSaki(旦那)です。

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

PythonPython,paiza,学習

Posted by LeoSaki