<pre><code>import sys
import random
wordlist = ['hangman', 'dinner', 'computer', 'america', 'olympics', 'football', 'minecraft', 'jacket', 'cabbage', 'electricity', 'dog',
'pasta', 'japan', 'water', 'programming', 'anaconda', 'onehunga', 'name', 'windows', 'curtains', 'bieber', 'kirito',
'montenegro', 'wheel', 'civilization', 'physics', 'bluebird' 'table', 'ACDC', 'guardian yam', 'mario', 'parachute', 'agario', 'obama',
'youtube', 'putin', 'dairy', 'christianity', 'club penguin', 'oskahlavistah', 'coins', 'agitating', 'jumping', 'eating',
'your mom', 'executive', 'car', 'jade', 'abraham', 'sand', 'silver', 'uranium', 'oscar is gay', 'bioshock', 'fizzle', 'moonman', 'watermelon',
'WAHAHAHAHAHA', 'steve jobs', 'extreme', 'weeaboo jones', 'hot damn']
class Guess:
def __init__(self):
self.SECRET = random.choice(wordlist)
self.GUESSES_ALLOWED = int(raw_input("The secret's word has %s letter, you how many times can you be mistaken?" % len(self.SECRET)))
self.WRONG = []
self.GUESSED = []
def make_a_guess(self):
while self.GUESSES_ALLOWED:
current_guess = raw_input('Guess a letter!') # TODO: to check for double chars
self.print_mask()
if current_guess in self.GUESSED:
print "You;ve already guessed that! Try again!\n"
self.make_a_guess()
self.print_mask()
elif current_guess in self.WRONG:
print "You;ve already guessed that! Try again!\n"
self.make_a_guess()
self.print_mask()
elif current_guess not in self.SECRET:
self.GUESSES_ALLOWED -= 1
print "WRONG! Guesses left: %s\n" % self.GUESSES_ALLOWED
self.WRONG.append(current_guess)
self.print_mask()
elif current_guess in self.SECRET:
print "CORRECT! Guesses left: %s\n" % self.GUESSES_ALLOWED
self.GUESSED.append(current_guess)
self.print_mask()
if set(self.GUESSED) == set(self.SECRET):
print "You guessed the word!"
repeat = raw_input("Play again? type y or n and press Enter")
if 'y' in repeat:
a = Guess()
a.make_a_guess()
elif 'n' in repeat:
sys.exit(0)
else:
print "You got '%s' guesses left, you lost!" % self.GUESSES_ALLOWED
repeat = raw_input("Play again? type y or n and press Enter")
if 'y' in repeat:
a = Guess()
a.make_a_guess()
elif 'n' in repeat:
sys.exit(0)
def print_mask(self):
guessed_indexes = []
for letter in self.GUESSED:
indexes_for_one_letter = [i for i, x in enumerate(self.SECRET) if x == letter]
guessed_indexes += indexes_for_one_letter
MASK_TO_PRINT = []
for i, letter in enumerate(self.SECRET):
if i in guessed_indexes:
MASK_TO_PRINT.append(letter)
else:
MASK_TO_PRINT.append("_")
print " ".join(MASK_TO_PRINT)
if __name__ == '__main__':
game = Guess()
game.make_a_guess()
</code></pre>
<p>首先,
我们导入系统如果玩家不想再玩我们可以退出</p>
<p>整个逻辑用类猜测的make_a_guess方法实现。
每次启动新游戏时,都会创建类Guess的新实例。</p>
<p>这是一个新的实现,因为您的变量有一些非常重要的错误,例如,您最好使用raw_input()将输入自动转换为字符串。</p>
<p>为了给你写猜测的过程,在我的代码中使用print_mask()
在这个方法中,你应该寻找所有已经猜到的字母并收集它们。例如,如果“For M”单词是一个秘密单词,则您猜测M和F的索引将为[0,3]。这就是为什么在循环中对机密字进行迭代时,如果遇到要迭代的当前索引,也可以在[0,3]中找到->;也就是说,将对应索引的字母添加到某个空列表中,以便以后打印时显示当前进度。如果在迭代过程中,在[0,3]中找不到当前索引,则添加“u”,而不是在准备好的空列表中猜测的字母。</p>
<p>然后将列表收缩为字符串以便进一步打印:
“”加入(掩码到打印)</p>
<p>逻辑是这样的:
密语是“计程车”
你以前猜过“c”和“a”
所以self.gused包含[0,1,3]
然后重复:</p>
<pre><code>prepared_list_for_print = []
for i, letter in enumerate('cabage'):
if i in [0,1,3]:
prepared_list_for_print.append(letter)
else:
prepared_list_for_print.append("_")
</code></pre>