第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(旦那)です。
引き続き、お付き合いよろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません