今日はあるコードでつまづいたのでそれについて書いていこうと思います。
下のコードは『退屈なことはpythonにやらせよう』という本に載っているコードです。
どこで躓いたかというと一行目のwhile True:のところです。
このプログラムはユーザーに自分の年齢を数字で入力させるというものですが、数字以外だと(例えば漢数字で入力したら)「年齢は数字で入力してください」と再度年齢の入力を促される仕組みになっています。
4行目のage.isdecimal()というメソッドは数字だけからなる文字列に対してTrueをかえすというものですが、これが満たされれば(つまり年齢が数字できちんと入力されれば)breakによって年齢をたずねるループが止まるようになっています。
ここで疑問に思ったことは、年齢を数字以外で入力してしまうとisdecimal()がFalseの値を返してきて一行目の条件式に反し、ループが止まるのではないか?ということです。
そこでまずwhile True:について調べてみたところ、これは無限ループを起こすコードとしてヒットしました。例えば、
while True:
print('hello')
と入力すれば無限にhelloと出力されます。
つまりこれは比較演算子を使わなくてもwhile True:と書けば常にループを起こせるということを意味しているようです。
これを最初に提起したコードに当てはめて言うなら、
「ループを起こします」
→「年齢を入力してください」
数字なら→「break]
ほかの文字なら→「ループを続けます」
といった感じになるということでしょうか?
要するに条件文のTrueはisdecimal()に対するブール値ではなかったということですね。

