今日はあるコードでつまづいたのでそれについて書いていこうと思います。

 

下のコードは『退屈なことはpythonにやらせよう』という本に載っているコードです。

どこで躓いたかというと一行目のwhile True:のところです。

このプログラムはユーザーに自分の年齢を数字で入力させるというものですが、数字以外だと(例えば漢数字で入力したら)「年齢は数字で入力してください」と再度年齢の入力を促される仕組みになっています。

 

4行目のage.isdecimal()というメソッドは数字だけからなる文字列に対してTrueをかえすというものですが、これが満たされれば(つまり年齢が数字できちんと入力されれば)breakによって年齢をたずねるループが止まるようになっています。

 

ここで疑問に思ったことは、年齢を数字以外で入力してしまうとisdecimal()がFalseの値を返してきて一行目の条件式に反し、ループが止まるのではないか?ということです。

 

 

そこでまずwhile True:について調べてみたところ、これは無限ループを起こすコードとしてヒットしました。例えば、

while True:

    print('hello')

と入力すれば無限にhelloと出力されます。

つまりこれは比較演算子を使わなくてもwhile True:と書けば常にループを起こせるということを意味しているようです。

 

これを最初に提起したコードに当てはめて言うなら、

「ループを起こします」

→「年齢を入力してください」

 数字なら→「break]

 ほかの文字なら→「ループを続けます」

といった感じになるということでしょうか?

 

要するに条件文のTrueはisdecimal()に対するブール値ではなかったということですね。