fork download
  1. #!/usr/bin/env python3
  2.  
  3. from random import choice
  4. import os, sys
  5.  
  6. # 英語辞書定義
  7. with open('dictionary.txt', 'r') as f:
  8. dictionary = [line.rstrip() for line in f]
  9.  
  10. # カウンター上限値
  11. count_max = 10
  12.  
  13. # メッセージ
  14. msg = {'': '',
  15. 'a': '\nAlready guessed \'{}\' ',
  16. 'n': '\nNot a valid guess: \'{}\' ',
  17. 'p': '\nPlease type \'y\' or \'n\' ',
  18. 's': '\nSorry, the word was \"{}\"\nAnother word? ',
  19. 'y': '\nYou got it!Another word? '}
  20.  
  21. # 画面表示テンプレート
  22. temp = '''
  23. {2}
  24. {1} {3}
  25. {1} {4} Guessed: {0}
  26. {1} {8}{5}{9}
  27. {1} {6} Word #: {Word_No}
  28. {1} {7} {10} Current Average: {Current:.3f}
  29. __{1}_____ Overall Average: {Overall:.3f}
  30. | |___
  31. |_________|
  32.  
  33. Word: {Word}
  34. Guess: {msg}'''
  35.  
  36. # ハングマン表示部品
  37. parts_table = {1: ('|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '),
  38. 2: ('|', '______', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '),
  39. 3: ('|', '______', '|', ' ', ' ', ' ', ' ', ' ', ' ', ' '),
  40. 4: ('|', '______', '|', '0', ' ', ' ', ' ', ' ', ' ', ' '),
  41. 5: ('|', '______', '|', '0', '|', ' ', ' ', ' ', ' ', ' '),
  42. 6: ('|', '______', '|', '0', '|', '|', ' ', ' ', ' ', ' '),
  43. 7: ('|', '______', '|', '0', '|', '|', '/', ' ', ' ', ' '),
  44. 8: ('|', '______', '|', '0', '|', '|', '/', '/', ' ', ' '),
  45. 9: ('|', '______', '|', '0', '|', '|', '/', '/', '\\', ' '),
  46. 10: ('|', '______', '|', '0', '|', '|', '/', '/', '\\', '\\')}
  47.  
  48. # 環境
  49. class Env(object):
  50. def __init__(self, theWord, Word, count = 1, Guessed = [], Word_No = 1,\
  51. Current = 0, Overall = 0, msg = msg['']):
  52. self.theWord = theWord
  53. self.Word = Word
  54. self.count = count
  55. self.Guessed = Guessed
  56. self.Word_No = Word_No # 何回目の挑戦なのか
  57. self.Current = Current # 何回間違えてきたか
  58. self.Overall = Overall # 通算で何回間違えてきたか(Currentの移動先)
  59. self.msg = msg # 出力用メッセージ
  60.  
  61. # デバッグ用
  62. def __repr__(self):
  63. return f'<the Word: {self.theWord}, Word: {self.Word}, \
  64. count: {self.count}, Guessed: {self.Guessed}, Word #: {self.Word_No}, \
  65. Current: {self.Current}, Overall: {self.Overall}, msg: {self.msg}>'
  66.  
  67. # 初期化
  68. def initialize():
  69. theWord = choice(dictionary)
  70. return Env(theWord, ''.join(['-' for i in theWord]))
  71.  
  72. # Eval
  73. def interp(x, env):
  74. x = x.lower()[0]
  75. if env.count == count_max or env.theWord == env.Word:
  76. if x == 'y':
  77. theWord = choice(dictionary)
  78. return Env(theWord, ''.join(['-' for i in theWord]),
  79. 1, [], env.Word_No + 1,
  80. env.Current, env.Current + env.Overall, msg[''])
  81. elif x == 'n':
  82. sys.exit()
  83. else:
  84. return Env(env.theWord, env.Word, env.count, env.Guessed,\
  85. env.Word_No, env.Current, env.Overall, msg['p'])
  86. elif x.isalpha():
  87. if x in env.Guessed:
  88. return Env(env.theWord, env.Word, env.count, env.Guessed,\
  89. env.Word_No, env.Current, env.Overall, msg['a'].format(x))
  90. else:
  91. return Env(env.theWord,
  92. ''.join([x if x == i[0] else i[1] for i in\
  93. zip(env.theWord, env.Word)]) if x\
  94. in env.theWord else env.Word,
  95. env.count if x in env.theWord\
  96. else env.count + 1,
  97. sorted([x] + env.Guessed),
  98. env.Word_No,
  99. env.Current if x in env.theWord\
  100. else env.Current + 1,
  101. env.Overall, msg[''])
  102. else:
  103. return Env(env.theWord, env.Word, env.count, env.Guessed,\
  104. env.Word_No, env.Current, env.Overall, msg['n'].format(x))
  105.  
  106. # Print
  107. def display(env):
  108. os.system('cls' if os.name == 'nt' else 'clear')
  109. print(temp.format(''.join(env.Guessed), *parts_table[env.count],\
  110. Word_No = env.Word_No,\
  111. Current = env.Current / env.Word_No,
  112. Overall = env.Overall if env.Word_No == 1 else\
  113. env.Overall / (env.Word_No - 1) , Word = env.Word,
  114. msg = (msg['s'].format(env.theWord)\
  115. if env.count == count_max\
  116. else msg['y'] if env.theWord == env.Word\
  117. else "") + env.msg),\
  118. end = '')
  119. return env
  120.  
  121. if __name__ == '__main__':
  122. env = display(initialize())
  123. while True:
  124. env = display(interp(input(), env))
  125.  
Runtime error #stdin #stdout #stderr 0.13s 26016KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 7, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'dictionary.txt'