2014-09-19 38 views
0

我正在用Python做一個hang子手遊戲,我想通過跟蹤當前單詞的一個好方法是字典。每個字母都會被一個關鍵字捕獲,其布爾值代表玩家是否猜到了該字母。爲了簡單起見,我假定唯一允許的輸入是猜測(即,即使玩家立刻知道這個詞,他或她必須完成[正確]填充空白)。因此,每次猜測(假設該男子還沒有被掛起),我會檢查字典值是否全爲真,在這種情況下玩家獲勝。用特殊的配對鍵初始化Python字典

兩個問題:

  1. 請問上述表示的聲音是否合理?

  2. 如果是這樣,就會產生密鑰以解釋重複字母的問題。我想過使用元組;例如,這裏是字的初始表示「編程」

('p', 0) : False 

('r', 0) : False 

('o', 0) : False 

('g', 0) : False 

('r', 1) : False 

('a', 0) : False 

('m', 0) : False 

('m', 1) : False 

('i', 0) : False 

('n', 0) : False 

('g', 1) : False 

在該對中的第二項僅僅是該字母的發生的索引;因此,當我迭代單詞時,第一項仍可用於標記正確猜測的字母。

給一個字作爲一個字符串,是否有一種緊湊的方式來創建一個字典如上?我可以看到類似這樣的東西:

word = "programming" 
word_dict = { (letter, ???) : False for letter in word } 

,其中???是一些聰明的計數表達。還是我需要明確地做,並跟蹤循環中的事情?

+1

如果一個字母重複與否沒關係;玩家猜對了或者他們沒有。重複不會涉及到這一點。 – 2014-09-19 17:30:34

+0

*拍自拍*哦。儘管有類似的結構來顯示進度,但它可能還是有用的嗎? (例如,'_ A _ _A L _'在轉彎後被印刷到控制檯上) – nicole 2014-09-19 21:38:10

+0

不是;請參閱下面的答案;你只需要循環猜字,並檢查字典,看看字母是否已被猜到。 – 2014-09-19 22:32:48

回答

2

你是你的過於複雜的問題;你真正需要的是一本TrueFalse的字典;如果信件重複或不重複,就像玩家猜到了他們猜測的那封信一旦重複了那封信一樣。

創建字典是那麼簡單:

word_dict = dict.fromkeys(word, False) 

這將創建每獨特字母一個鍵,每個默認爲False字典。

打劊子手然後一樣容易:

guessed = set() 
misses = 0 

while misses < 6: 
    if guess in guessed: 
     # already guessed at this before 
     # error message, user must try again 
     continue 

    guessed.add(guess) 
    if guess not in word_dict: 
     # wrong guess 
     # hang the user some more 
     misses += 1 
    else: 
     word_dict[guess] = True 
     display = ''.join([c if word_dict[c] else '_' for c in word]) 
     print 'Guessed so far: {}'.format(display) 
     if all(word_dict.values()): 
      # guessed the whole word! 
      # show congratulations 
      break 
else: 
    # player died, show commiserations 
1
>>> from collections import Counter 
>>> word = 'programming' 
>>> c = Counter(word) 
Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1}) 

您可以使用它來這樣做

dead = 5 # maximum number of incorrect guesses 
missed = 0 # current number of incorrect guesses 
while missed < dead: 
    guess = raw_input("guess a letter") 
    if c.get(guess): 
     # they guessed a correct letter, display something nice :) 
     # more importantly, keep track of how much of the word they correctly know 
    else: 
     missed += 1 
     print guess, "not a letter in the word"