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

回答編集履歴

4

余分な空白の削除

2017/09/15 10:32

投稿

namnium1125
namnium1125

スコア2045

answer CHANGED
@@ -80,7 +80,7 @@
80
80
  for i in arr:
81
81
  try:
82
82
  n = int(i)
83
- if 0<=n and n <= 100:
83
+ if 0<=n and n<=100:
84
84
  result.append(n)
85
85
  '''
86
86
  else:

3

さらに追記しました。

2017/09/15 10:32

投稿

namnium1125
namnium1125

スコア2045

answer CHANGED
@@ -63,4 +63,40 @@
63
63
 
64
64
  string2 = '100200300'
65
65
  print(is_int_in_array(string2)) # [1, 0, 0, 2, 0, 0, 3, 0, 0]
66
- ```
66
+ ```
67
+
68
+ ##追記3
69
+
70
+ ○追記2について補足
71
+ 後々になって考えてみれば文字列なら`int(文字列)`でエラーが出るか見るだけでいいんですよね…まぁ配列がメインだったということで。
72
+
73
+ ○返信に対して
74
+
75
+ 指定というのがどういう意味かによりますけど、条件分岐させるということならそのようなif節を加えるだけで良いかと。
76
+
77
+ ```lang-python
78
+ def is_int_in_array(arr):
79
+ result = []
80
+ for i in arr:
81
+ try:
82
+ n = int(i)
83
+ if 0<=n and n <= 100:
84
+ result.append(n)
85
+ '''
86
+ else:
87
+ return False
88
+ '''
89
+ except ValueError:
90
+ return False
91
+ return result
92
+
93
+ if __name__=='__main__':
94
+ array1 = ['100','.','abc']
95
+ print(is_int_in_array(array1)) # False
96
+
97
+ array2 = ['0','50','100','200','300']
98
+ print(is_int_in_array(array2)) # [0, 50, 100]
99
+ ```
100
+ 収まらなければ弾く(resultに加えない)だけならそのままで、収まらない場合が一つでもあれば`False`を返すようにするなら途中のコメントアウト(''')を取って下さい。m(_ _)m
101
+
102
+ 追記が長くなってしまいすみません、、

2

もう一度追記しました。

2017/09/15 10:18

投稿

namnium1125
namnium1125

スコア2045

answer CHANGED
@@ -32,4 +32,35 @@
32
32
  if __name__=='__main__':
33
33
  array = ['100','.','abc']
34
34
  print(*(is_int_in_array(array))) # 100 False False
35
+ ```
36
+
37
+ ##追記2
38
+
39
+ 一つでも変換できなければ`False`を返すようにするならばこうですかね?
40
+ ジェネレータにはできませんでしたが、、
41
+
42
+ あともしかして文字列を配列とみなすという意味だったとか?その場合でも下記プログラムでいけるはずです。
43
+
44
+ ```lang-python
45
+ def is_int_in_array(arr):
46
+ result = []
47
+ for i in arr:
48
+ try:
49
+ result.append(int(i))
50
+ except ValueError:
51
+ return False
52
+ return result
53
+
54
+ if __name__=='__main__':
55
+ array1 = ['100','.','abc']
56
+ print(is_int_in_array(array1)) # False
57
+
58
+ array2 = ['100','200','300']
59
+ print(is_int_in_array(array2)) # [100, 200, 300]
60
+
61
+ string1 = '100.abc'
62
+ print(is_int_in_array(string1)) # False
63
+
64
+ string2 = '100200300'
65
+ print(is_int_in_array(string2)) # [1, 0, 0, 2, 0, 0, 3, 0, 0]
35
66
  ```

1

追記しました。

2017/09/15 07:47

投稿

namnium1125
namnium1125

スコア2045

answer CHANGED
@@ -13,4 +13,23 @@
13
13
  if __name__=='__main__':
14
14
  array = ['100','.','abc']
15
15
  print(is_int_in_array(array)) # [100, False, False]
16
+ ```
17
+
18
+ ##追記
19
+
20
+ ○`False`で返せとのことでしたから返してますけど、配列で返すなら`result.append(False)`を取り除き、そこを`pass`にすることで数値だけの配列にできます。
21
+
22
+ ○ついでにジェネレータにしてみました(^_^)
23
+
24
+ ```lang-python
25
+ def is_int_in_array(arr):
26
+ for i in arr:
27
+ try:
28
+ yield int(i)
29
+ except ValueError:
30
+ yield False
31
+
32
+ if __name__=='__main__':
33
+ array = ['100','.','abc']
34
+ print(*(is_int_in_array(array))) # 100 False False
16
35
  ```