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

回答編集履歴

2

Pythonでのコード例を追記

2017/09/14 04:40

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -260,8 +260,6 @@
260
260
  }
261
261
  ```
262
262
 
263
- ランキング機能を付けると、ファイル入出力が絡むだけもっと複雑になります。
264
-
265
263
  ---
266
264
  **実行例**
267
265
  ```
@@ -282,4 +280,137 @@
282
280
  Correct.
283
281
 
284
282
  2017/09/14 12:01:40 : SCORE 7.6
285
- ```
283
+ ```
284
+
285
+ ランキング機能を付けると、ファイル入出力が絡むだけもっと複雑になります。
286
+
287
+ 追記
288
+ ---
289
+ だいたい同じようなゲームを、Pythonでも実装してみました。
290
+ ```Python
291
+ # main.py
292
+
293
+ from score_datum import ScoreDatum
294
+ from training import do_training
295
+
296
+ def main():
297
+ now_score_datum = do_training()
298
+ now_score_datum.print_info()
299
+
300
+ if __name__ == '__main__':
301
+ main()
302
+ ```
303
+
304
+ ```Python
305
+ # score_datum.py
306
+
307
+ import datetime
308
+
309
+
310
+ class ScoreDatum():
311
+ def __init__(self, score: float):
312
+ self._time_datum = datetime.datetime.today()
313
+ self._score = score
314
+
315
+ @property
316
+ def time_datum(self) -> datetime.datetime:
317
+ return self._time_datum
318
+
319
+ @property
320
+ def score(self) -> float:
321
+ return self._score
322
+
323
+ def print_info(self) -> None:
324
+ print(self.time_datum.ctime(), round(self.score, ndigits=1))
325
+ ```
326
+
327
+ ```Python
328
+ # training.py
329
+
330
+ from score_datum import ScoreDatum
331
+ from my_util import wait_key_input
332
+ import random
333
+ import time
334
+
335
+ NUM_LENGTH = 9
336
+
337
+ def do_training(stage_num: int = 3):
338
+ print()
339
+ print('Input lacked number.')
340
+ print('Press space key to start game.')
341
+ wait_key_input(' ')
342
+
343
+ start_time = time.time()
344
+ for _ in range(stage_num):
345
+ do_one_stage()
346
+
347
+ elapsed_time = time.time() - start_time
348
+ return ScoreDatum(elapsed_time)
349
+
350
+ def do_one_stage() -> None:
351
+ complete_list = list(range(NUM_LENGTH + 1))[1:]
352
+
353
+ lacked_number = random.randint(1, NUM_LENGTH)
354
+ lacked_list = _make_lack_list(complete_list, lacked_number)
355
+
356
+ print(lacked_list)
357
+ while True:
358
+ try:
359
+ input_num = int(input())
360
+ except:
361
+ continue
362
+
363
+ if input_num == lacked_number:
364
+ break
365
+
366
+ print('Correct.')
367
+ print()
368
+
369
+ def _count_num_in_list(src_list: list, num: int) -> int:
370
+ return src_list.count(num)
371
+
372
+ def _make_lack_list(src_list: list, lack_num: int) -> list:
373
+ if _count_num_in_list(src_list, lack_num) != 1:
374
+ return None
375
+
376
+ src_list.remove(lack_num)
377
+ return src_list
378
+ ```
379
+
380
+ ```Python
381
+ # my_util.py
382
+
383
+ def wait_key_input(key: str = None) -> None:
384
+ if key is None:
385
+ input()
386
+ return
387
+
388
+ while input() != key:
389
+ pass
390
+
391
+ ```
392
+
393
+ ---
394
+ **実行例**
395
+ ```
396
+ Input lacked number.
397
+ Press space key to start game.
398
+
399
+ [1, 2, 4, 5, 6, 7, 8, 9]
400
+ 3
401
+ Correct.
402
+
403
+ [1, 2, 3, 4, 5, 7, 8, 9]
404
+ 6
405
+ Correct.
406
+
407
+ [1, 2, 3, 4, 5, 6, 8, 9]
408
+ 6
409
+ 7
410
+ Correct.
411
+
412
+ Thu Sep 14 13:39:56 2017 5.6
413
+ ```
414
+
415
+ リスト処理が楽なのは嬉しいですね。
416
+ 文字数でカウントすると、Cの場合の約40%で実装出来ました。

1

Pythonno

2017/09/14 04:40

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
File without changes