質問するログイン新規登録

回答編集履歴

4

追記

2019/01/02 14:27

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -49,4 +49,23 @@
49
49
 
50
50
  print(*src, sep='\n')
51
51
  # print('\n'.join(src)) でも可
52
- ```
52
+ ```
53
+
54
+ 『数字』を半角アラビア数字に限定したいなら、条件部を次のように変えます。
55
+ ```Python
56
+ if not all('0' < d < '9' for d in src):
57
+ print('数字ではありません')
58
+ continue
59
+ ```
60
+
61
+ あるいは
62
+ ```Python
63
+ if not re.match(r'[0-9]{4}', src):
64
+ print('数字ではありません')
65
+ continue
66
+ ```
67
+
68
+ \d とか str.isdigit だと、実はアラビア数字であるか厳密には判断できません。
69
+ [teratail - python3 数字かどうか調べたい](https://teratail.com/questions/95150)
70
+
71
+ 趣味の範疇では気にするまでもないことではありますが。

3

追記

2019/01/02 14:27

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -29,4 +29,24 @@
29
29
 
30
30
  まぁ、Cだと思ってみても手本になるようなコードではありませんが。
31
31
  - 1文字ずつ比較するならせめてループを使ってほしい
32
- - continueとbreakを使ってフラグ変数を排除してほしい
32
+ - continueとbreakを使ってフラグ変数を排除してほしい
33
+
34
+ 書いてみた
35
+ ---
36
+ ディスるだけだとなんだか卑怯な気がしてきたので。
37
+ ```Python
38
+ while True:
39
+ src = input('数を入れてね > ')
40
+ if len(src) != 4:
41
+ print('4桁の数字を入力してください')
42
+ continue
43
+
44
+ if not src.isdigit():
45
+ print('数字ではありません')
46
+ continue
47
+
48
+ break
49
+
50
+ print(*src, sep='\n')
51
+ # print('\n'.join(src)) でも可
52
+ ```

2

追記

2019/01/02 14:20

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -25,4 +25,8 @@
25
25
  余談
26
26
  ---
27
27
  参考にされているコードは、かなりPythonらしからぬコードです。
28
- どんなときもC流に書くプログラマがたまにいますが、著者がそのような人でないことを祈ります。
28
+ どんなときもC流に書くプログラマがたまにいますが、著者がそのような人でないことを祈ります。
29
+
30
+ まぁ、Cだと思ってみても手本になるようなコードではありませんが。
31
+ - 1文字ずつ比較するならせめてループを使ってほしい
32
+ - continueとbreakを使ってフラグ変数を排除してほしい

1

追記

2019/01/02 10:43

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -20,4 +20,9 @@
20
20
  True
21
21
  ```
22
22
 
23
- 辞書を引くように、先頭の文字コードから順に比較するからです。
23
+ 辞書を引くように、先頭の文字コードから順に比較するからです。
24
+
25
+ 余談
26
+ ---
27
+ 参考にされているコードは、かなりPythonらしからぬコードです。
28
+ どんなときもC流に書くプログラマがたまにいますが、著者がそのような人でないことを祈ります。