実は文字列のままでも、一桁なら比較可能です。
Python
1>>> '0' < '1'
2True
内部的には文字コードを比較しています。ASCIIコード表
Python
1>>> ord('0')
248
3>>> ord('1')
449
5>>> ord('0') < ord('1')
6True
二桁以上だと数値のようには比較できません。
Python
1>>> '123' < '9'
2True
辞書を引くように、先頭の文字コードから順に比較するからです。
余談
参考にされているコードは、かなりPythonらしからぬコードです。
どんなときもC流に書くプログラマがたまにいますが、著者がそのような人でないことを祈ります。
まぁ、Cだと思ってみても手本になるようなコードではありませんが。
- 1文字ずつ比較するならせめてループを使ってほしい
- continueとbreakを使ってフラグ変数を排除してほしい
書いてみた
ディスるだけだとなんだか卑怯な気がしてきたので。
Python
1while True:
2 src = input('数を入れてね > ')
3 if len(src) != 4:
4 print('4桁の数字を入力してください')
5 continue
6
7 if not src.isdigit():
8 print('数字ではありません')
9 continue
10
11 break
12
13print(*src, sep='\n')
14# print('\n'.join(src)) でも可
『数字』を半角アラビア数字に限定したいなら、条件部を次のように変えます。
Python
1if not all('0' < d < '9' for d in src):
2 print('数字ではありません')
3 continue
あるいは
Python
1if not re.match(r'[0-9]{4}', src):
2 print('数字ではありません')
3 continue
\d とか str.isdigit だと、実はアラビア数字であるか厳密には判断できません。
teratail - python3 数字かどうか調べたい
趣味の範疇では気にするまでもないことではありますが。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/02 13:53 編集
2019/01/02 14:08
2019/01/02 14:50 編集
2019/01/02 15:04
2019/01/16 12:31
2019/01/16 12:58 編集