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

回答編集履歴

3

修正

2018/10/15 14:52

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  > isinstance()を使えばいいのかと思い
15
15
 
16
- 文字列は、常に文字列型です。例え数字列として解釈される場合も。
16
+ 文字列は、常に文字列型です。例え数字列として解釈できる場合も。
17
17
  ```Python
18
18
  >>> isinstance('spam', str)
19
19
  True
@@ -42,7 +42,9 @@
42
42
  ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
43
43
  ```
44
44
 
45
+ おまけ
46
+ ---
45
- おまけ。こんな方法でも良いでしょう。
47
+ こんな方法でも良いでしょう。
46
48
  ```Python
47
49
  >>> src = 'spam'
48
50
  >>> len(src) == 1 and src.isdigit()
@@ -55,4 +57,6 @@
55
57
  >>> src = '1'
56
58
  >>> len(src) == 1 and src.isdigit()
57
59
  True
58
- ```
60
+ ```
61
+
62
+ 関数化するのもアリです。

2

追記

2018/10/15 14:52

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -40,4 +40,19 @@
40
40
  ```Python
41
41
  >>> list('0123456789')
42
42
  ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
43
+ ```
44
+
45
+ おまけ。こんな方法でも良いでしょう。
46
+ ```Python
47
+ >>> src = 'spam'
48
+ >>> len(src) == 1 and src.isdigit()
49
+ False
50
+ >>>
51
+ >>> src = '123'
52
+ >>> len(src) == 1 and src.isdigit()
53
+ False
54
+ >>>
55
+ >>> src = '1'
56
+ >>> len(src) == 1 and src.isdigit()
57
+ True
43
58
  ```

1

追記

2018/10/15 14:46

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,15 +1,33 @@
1
+ 上手くいかない原因
2
+ ---
1
3
  > しかし、実際はstr型やfloat型が入力されるとエラーを吐き出します。
2
4
 
3
- どんな値でも数値にキャストしようとしているからです。
5
+ どんな値でもいきなり数値にキャストしようとしているからです。
6
+ ```Python
7
+ >>> int(input())
8
+ spam
9
+ Traceback (most recent call last):
10
+ File "<stdin>", line 1, in <module>
11
+ ValueError: invalid literal for int() with base 10: 'spam'
12
+ ```
4
13
 
5
14
  > isinstance()を使えばいいのかと思い
6
15
 
7
16
  文字列は、常に文字列型です。例え数字列として解釈される場合も。
17
+ ```Python
18
+ >>> isinstance('spam', str)
19
+ True
20
+ >>> isinstance('123', str)
21
+ True
22
+ >>> isinstance('123', int)
23
+ False
24
+ ```
8
25
 
26
+ 解決するには
9
27
  ---
10
- 結局、次の事柄判定すれば良いです。
28
+ 結局、次のような段階踏めば良いです。
11
- 0. 文字列型まま、
29
+ 0. 文字列型からキャストしないまま、
12
- 0. 数字列(特に0~9の1桁の数字)であること
30
+ 0. 数字列(特に0~9の1桁の数字)であることを判定
13
31
 
14
32
  いろいろな方法が考えられますが、一番お手軽なのはこんな方法でしょうか。
15
33
  ```Python