fork download
  1. #!/usr/bin/env python3
  2.  
  3. import os, sys
  4. from time import sleep
  5. from random import randint
  6.  
  7. message = {True: '正', False: '誤'}
  8.  
  9. # Environment
  10. class Env(object):
  11. def __init__(self, flag, digits, num, seconds, lst):
  12. self.flag = flag # 入力フェーズと回答の正誤を示すフラグ
  13. self.digits = digits # 桁数
  14. self.num = num # 計算する数値の個数
  15. self.seconds = seconds # 表示秒数
  16. self.lst = lst # 数値格納用リスト
  17. # デバッグ用
  18. def __repr__(self):
  19. return f'<flag: {self.flag}, digits: {self.digits}, num: {self.num}, seconds: {self.seconds}, lst: {self.lst}>'
  20.  
  21. # Read
  22. def read(env):
  23. if len(env.lst) == env.num:
  24. return int(input('>>> '))
  25. elif isinstance(env.flag, bool): # フラッシュ暗算ソフト終了の為の入力
  26. return input('quit?[y/n]): ')
  27. else:
  28. return ""
  29.  
  30. # Eval
  31. def engine(x, env):
  32. # 入力が「フラッシュ暗算ソフト」を止める場合
  33. if isinstance(env.flag, bool) and x.lower() == 'y':
  34. sys.exit()
  35. else:
  36. return Env(x == sum(env.lst) if len(env.lst) == env.num
  37. else None if isinstance(env.flag, bool) and env.lst == []
  38. else env.flag,
  39. env.digits, env.num, env.seconds,
  40. [] if len(env.lst) == env.num
  41. else [randint(10 ** (env.digits - 1), 10 ** env.digits - 1)]
  42. + env.lst)
  43.  
  44. # Print
  45. def display(env):
  46. if env.flag != None:
  47. print(message[env.flag])
  48. else:
  49. os.system('clear') # MS-DOS/Windows では clear の代わりに cls コマンド
  50. print(env.lst[0])
  51. sleep(env.seconds)
  52. # デバッグ用
  53. # print(env)
  54. return env
  55.  
  56. if __name__ == '__main__':
  57. try:
  58. env = Env(None,
  59. int(input('桁数 >> ')),
  60. int(input('個数 >> ')),
  61. int(input('秒数 >> ')),
  62. [])
  63. except ValueError:
  64. sys.exit()
  65. while True:
  66. try:
  67. env = display(engine(read(env), env))
  68. except ValueError:
  69. env
  70.  
Runtime error #stdin #stdout #stderr 0.14s 26304KB
stdin
Standard input is empty
stdout
桁数 >> 
stderr
Traceback (most recent call last):
  File "./prog.py", line 59, in <module>
EOFError: EOF when reading a line