无法在Hangman游戏中猜出正确的字母

时间:2015-08-14 09:32:57

标签: python

我正在编写一个刽子手游戏,它会让用户猜到一个秘密字母的字母。用户得到8个猜测。如果用户猜错了,他们就会失去一个猜测。如果他们做出正确的猜测,他们需要猜出单词中的另一个字母,直到找到密码。

我怀疑这个if阻止无效:

 if guessletter in lettersGuessed:
     pass
     print(lettersGuessed)    
     print("Oops you have already guessed the letter", + getGuessedWord(secretWord,lettersGuessed))
     print("NO of Guesses left",+ int(guesses))
     print("Available letters",+getAvailableLetters(lettersGuessed))

lettersGuessed是一个我认为导致问题的列表。

我的输出: 请猜一封信:a 你还有8个猜测 可用信件abcdefghijklmnopqrstuvwxyz 请猜一封信:x 你还有8个猜测 可用信件abcdefghijklmnopqrstuvwxyz 请猜一封信:x

[完整代码共享](http://codeshare.io/0U9zV

Here's the full code

我该如何解决这个问题?

获胜游戏的输出应该如下......

从文件中加载单词列表... 已加载55900个单词。 欢迎来到游戏,Hangman!

我想的是一个长4个字母的单词。

你还有8个猜测。 可用信件:abcdefghijklmnopqrstuvwxyz 请猜一封信:a

好猜:_ a_ _

你还有8个猜测。 可用的信件:bcdefghijklmnopqrstuvwxyz 请猜一封信:a

糟糕!你已经猜到了那封信:_ a_ _

你还有8个猜测。 可用的信件:bcdefghijklmnopqrstuvwxyz 请猜一封信:s

糟糕!那封信不在我的意思中:_ a_ _

你还有7个猜测。 可用字母:bcdefghijklmnopqrtuvwxyz 请猜一封信:t

好猜测:ta_ t

你还有7个猜测。 可用的信件:bcdefghijklmnopqruvwxyz 请猜一封信:r

糟糕!那封信不在我的意思中:ta_ t

你还有6个猜测。 可用的信件:bcdefghijklmnopquvwxyz 请猜一封信:m

糟糕!那封信不在我的意思中:ta_ t

你还有5个猜测。 可用信件:bdefghijklmnopquvwxyz 请猜一封信:c 好猜:机智

2 个答案:

答案 0 :(得分:1)

从指定的site下载代码后,我发现您有缩进问题:

def hangman(secretWord):
    while isWordGuessed(secretWord, lettersGuessed) != True:
        guessletter= input("Please Guess a letter: ").lower()
        ...
    lettersGuessed+=guessletter           
    if isWordGuessed(secretWord,lettersGuessed):
    ...

实际应该是:

def hangman(secretWord):
    while isWordGuessed(secretWord, lettersGuessed) != True:
        guessletter= raw_input("Please Guess a letter: ").lower()
        ...
        lettersGuessed+=guessletter           
        if isWordGuessed(secretWord,lettersGuessed):
        ...

另请注意从inputraw_input的更改。这使得可以插入单个字母作为答案,而不必在其周围写入'。差异比这更深,因为input解析给它的内容(就像你在Python提示中写的那样)而raw_input只返回输入的字符串。通常更安全的是只加载一个字符串然后定义自己的解析规则以满足您的需要,以避免不必要的代码运行。

最重要的是,你有几个,+分隔print()个参数。这似乎是从python 2到3的过渡问题,请仅使用一个符号(将参数加到单个字符串中,或​​者在+之后提供不带,的多个字符串。

出于主题,但我也冒昧地使用其他功能:

def getAvailableLetters(lettersGuessed):
    text = ''
    for i in range(ord('a'), ord('z')+1): #97-122
        if chr(i) not in lettersGuessed:
            text += chr(i)
        else:
            text += '_'

最后,您不应该为变量使用导入模块的名称(例如string) - 使用text或类似的东西。虽然在您的代码中重新定义的范围有限,但需要注意这一点。

答案 1 :(得分:0)

我看过你的代码。我可以看到一些问题,我将命名那些导致你最困难的问题。

  1. 首先删除+旁边的逗号。即:

    print("No. of Guesses left: " + int(guesses))

  2. 将胜利条件置于while循环中也是一个好主意。

  3. 在此之后我还会考虑其他一些问题,但看看你是如何继续的。