回答編集履歴

1

追記

2018/09/28 06:08

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -17,3 +17,79 @@
17
17
 
18
18
 
19
19
  https://docs.python.jp/3/library/random.html#random.randrange
20
+
21
+
22
+
23
+ ### 追記
24
+
25
+ `random.random()`が返す値はこのようなものです。
26
+
27
+ ```python
28
+
29
+ >>> random.random()
30
+
31
+ 0.48142924113924246
32
+
33
+ >>> random.random()
34
+
35
+ 0.3322463871714475
36
+
37
+ >>> random.random()
38
+
39
+ 0.5793075589568584
40
+
41
+ ```
42
+
43
+
44
+
45
+ そして、リストのインデックス(そしてスライス)には小数は指定できません。それがエラーの原因です。
46
+
47
+
48
+
49
+ ```python
50
+
51
+ >>> lst = [1,2,3]
52
+
53
+ >>> lst[0.5:1.5]
54
+
55
+ Traceback (most recent call last):
56
+
57
+ File "<stdin>", line 1, in <module>
58
+
59
+ TypeError: slice indices must be integers or None or have an __index__ method
60
+
61
+ ```
62
+
63
+
64
+
65
+ 一方、`random.randrange()`が返す値は整数です。引数の指定方法は`range()`と同様で、`range()`オブジェクトの区間のうちから1つランダムに選んで返す、という仕様になっています。
66
+
67
+
68
+
69
+ ```python
70
+
71
+ >>> list(range(5))
72
+
73
+ [0, 1, 2, 3, 4]
74
+
75
+ >>> random.randrange(5)
76
+
77
+ 1
78
+
79
+ >>> random.randrange(5)
80
+
81
+ 0
82
+
83
+ >>> random.randrange(5)
84
+
85
+ 3
86
+
87
+ >>> random.randrange(5)
88
+
89
+ 1
90
+
91
+ ```
92
+
93
+
94
+
95
+ なので、`k = random.randrange(MS_SIZE)`等とすれば目的を達成できるでしょう。