回答編集履歴

4

質問文のコードを引用!

2018/02/04 06:20

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -46,9 +46,9 @@
46
46
 
47
47
  2-1,HitAndBlowクラスを新規作成
48
48
 
49
- 2-2,check_numではなくJudgeメソッドメソッド名を変更
49
+ 2-2,関数名をcheck_numからHitAndBlow#Judgeに変更
50
50
 
51
- 2-3,答えの数字を生成するgenerate関数を追加。
51
+ 2-3,答えの数字を生成するHitAndBlow#generate関数を追加。
52
52
 
53
53
  0~9の数字配列を生成後に[random#shuffle](https://docs.python.jp/3/library/random.html#random.shuffle)を使用して生成する。
54
54
 
@@ -58,19 +58,21 @@
58
58
 
59
59
  class HitAndBlow(object):
60
60
 
61
- def __init__(self, n=3):
61
+ def __init__(self, n: int=3):
62
+
63
+ assert 10 >= n
62
64
 
63
65
  self.N = n
64
66
 
65
67
  # HitAndBlowクラスが正解情報(onum)を管理するほうがいいです。
66
68
 
67
- # ※self.answerを使ったjudgeメソッドは宿題にしておきます。
69
+ # ※self.answerを使ったjudge関数は宿題にしておきます。
68
70
 
69
71
  self.answer = self.generate()
70
72
 
71
73
 
72
74
 
73
- def generate(self):
75
+ def generate(self) -> list:
74
76
 
75
77
  """
76
78
 
@@ -80,7 +82,7 @@
80
82
 
81
83
  """
82
84
 
83
- digits = [i for i in range(10)]
85
+ digits = list(range(10))
84
86
 
85
87
  random.shuffle(digits)
86
88
 
@@ -88,7 +90,7 @@
88
90
 
89
91
 
90
92
 
91
- def judge(self, guess, answer):
93
+ def judge(self, guess: list, answer: list) -> tuple:
92
94
 
93
95
  """
94
96
 
@@ -110,7 +112,7 @@
110
112
 
111
113
  blow = sum(g in answer for g in guess) - hit
112
114
 
113
- return (hit, blow)
115
+ return hit, blow
114
116
 
115
117
 
116
118
 
@@ -130,15 +132,37 @@
130
132
 
131
133
 
132
134
 
133
- 3,check_numを使用せずに、check関数でhit&blowの判定を行っている部分もあります。
135
+ 3,check関数内で以下のようにcheck_num関数を使用せずに、hit&blowの判定を行っている箇所が4箇所あります。check_num関数の呼び出しに統一するとコードの行が削減できます。
134
136
 
137
+ ```Python
138
+
139
+ ##リストシャッフル動作
140
+
141
+ hit = 0
142
+
143
+ blow = 0
144
+
145
+ for i in range(0,n):
146
+
147
+ for s in range(0,n):
148
+
135
- check_numメソッドの呼び出しに統一するコードの行が減ります。
149
+ if opre[i] == pnum[s]:
150
+
151
+ if i == s:
152
+
153
+ hit += 1
154
+
155
+ else:
156
+
157
+ blow += 1
158
+
159
+ ```
136
160
 
137
161
 
138
162
 
139
163
  ■余談
140
164
 
141
- Opponentクラスのcheck関数が158行と長すぎるためデバックしずらいと思います。
165
+ Opponentクラスのcheck関数が158行と長すぎるためデバックしずらいす。
142
166
 
143
167
  機能を絞った関数を作成して呼び出すようにするか、各数字を生成する部分/ループ処理/条件判定を分けたほうが、個々でテストできるようになります。
144
168
 

3

random#shuffle

2018/02/04 06:20

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -48,6 +48,10 @@
48
48
 
49
49
  2-2,check_numではなくJudgeメソッドにメソッド名を変更
50
50
 
51
+ 2-3,答えの数字を生成するgenerate関数を追加。
52
+
53
+ 0~9の数字配列を生成後に[random#shuffle](https://docs.python.jp/3/library/random.html#random.shuffle)を使用して生成する。
54
+
51
55
 
52
56
 
53
57
  ```Python
@@ -76,17 +80,11 @@
76
80
 
77
81
  """
78
82
 
79
- # この位置にonumの生成処理を記述
83
+ digits = [i for i in range(10)]
80
84
 
81
- answer = list(map(lambda i: 0, range(0, self.N)))
85
+ random.shuffle(digits)
82
86
 
83
- while len(answer) != len(set(answer)):
84
-
85
- answer = list(map(lambda i: random.randint(0, 9), range(0, self.N)))
86
-
87
-
88
-
89
- return answer
87
+ return digits[:self.N]
90
88
 
91
89
 
92
90
 

2

変更点をさくじょ!

2018/02/03 16:01

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -47,8 +47,6 @@
47
47
  2-1,HitAndBlowクラスを新規作成
48
48
 
49
49
  2-2,check_numではなくJudgeメソッドにメソッド名を変更
50
-
51
- 2-3,check_numの引数nはenumerateでlistを列挙すれば不要なため引数から削除
52
50
 
53
51
 
54
52
 

1

Edit!

2018/02/03 15:31

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -44,11 +44,11 @@
44
44
 
45
45
  行っているのはhit&blowの判定なため、
46
46
 
47
- 1,HitAndBlowクラスを新規作成
47
+ 2-1,HitAndBlowクラスを新規作成
48
48
 
49
- 2,check_numではなくJudgeメソッドにメソッド名を変更
49
+ 2-2,check_numではなくJudgeメソッドにメソッド名を変更
50
50
 
51
- 3,check_numの引数nはenumerateでlistを列挙すれば不要なため引数から削除
51
+ 2-3,check_numの引数nはenumerateでlistを列挙すれば不要なため引数から削除
52
52
 
53
53
 
54
54