回答編集履歴

3

修正

2018/10/15 14:52

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
 
30
30
 
31
- 文字列は、常に文字列型です。例え数字列として解釈される場合も。
31
+ 文字列は、常に文字列型です。例え数字列として解釈できる場合も。
32
32
 
33
33
  ```Python
34
34
 
@@ -86,7 +86,11 @@
86
86
 
87
87
 
88
88
 
89
+ おまけ
90
+
91
+ ---
92
+
89
- おまけ。こんな方法でも良いでしょう。
93
+ こんな方法でも良いでしょう。
90
94
 
91
95
  ```Python
92
96
 
@@ -113,3 +117,7 @@
113
117
  True
114
118
 
115
119
  ```
120
+
121
+
122
+
123
+ 関数化するのもアリです。

2

追記

2018/10/15 14:52

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -83,3 +83,33 @@
83
83
  ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
84
84
 
85
85
  ```
86
+
87
+
88
+
89
+ おまけ。こんな方法でも良いでしょう。
90
+
91
+ ```Python
92
+
93
+ >>> src = 'spam'
94
+
95
+ >>> len(src) == 1 and src.isdigit()
96
+
97
+ False
98
+
99
+ >>>
100
+
101
+ >>> src = '123'
102
+
103
+ >>> len(src) == 1 and src.isdigit()
104
+
105
+ False
106
+
107
+ >>>
108
+
109
+ >>> src = '1'
110
+
111
+ >>> len(src) == 1 and src.isdigit()
112
+
113
+ True
114
+
115
+ ```

1

追記

2018/10/15 14:46

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,8 +1,26 @@
1
+ 上手くいかない原因
2
+
3
+ ---
4
+
1
5
  > しかし、実際はstr型やfloat型が入力されるとエラーを吐き出します。
2
6
 
3
7
 
4
8
 
5
- どんな値でも数値にキャストしようとしているからです。
9
+ どんな値でもいきなり数値にキャストしようとしているからです。
10
+
11
+ ```Python
12
+
13
+ >>> int(input())
14
+
15
+ spam
16
+
17
+ Traceback (most recent call last):
18
+
19
+ File "<stdin>", line 1, in <module>
20
+
21
+ ValueError: invalid literal for int() with base 10: 'spam'
22
+
23
+ ```
6
24
 
7
25
 
8
26
 
@@ -12,15 +30,33 @@
12
30
 
13
31
  文字列は、常に文字列型です。例え数字列として解釈される場合も。
14
32
 
33
+ ```Python
15
34
 
35
+ >>> isinstance('spam', str)
36
+
37
+ True
38
+
39
+ >>> isinstance('123', str)
40
+
41
+ True
42
+
43
+ >>> isinstance('123', int)
44
+
45
+ False
46
+
47
+ ```
48
+
49
+
50
+
51
+ 解決するには
16
52
 
17
53
  ---
18
54
 
19
- 結局、次の事柄判定すれば良いです。
55
+ 結局、次のような段階踏めば良いです。
20
56
 
21
- 0. 文字列型まま、
57
+ 0. 文字列型からキャストしないまま、
22
58
 
23
- 0. 数字列(特に0~9の1桁の数字)であること
59
+ 0. 数字列(特に0~9の1桁の数字)であることを判定
24
60
 
25
61
 
26
62