2014-10-28 85 views
-3

我已经为Hang子手游戏编写了此代码,其中对手是计算机。但是我不断收到我不知道如何解决的错误。请看看我。例如,我现在的错误是:“Hang子手”游戏蟒蛇代码测试

Traceback (most recent call last): 
    File "C:\Users\User\Desktop\Python code\hangmangame_test.py", line 112, in <module> 
    hangman(a) 
    File "C:\Users\User\Desktop\Python code\hangmangame_test.py", line 91, in hangman 
    if isWordGuessed(secretWord, lettersGuessed) == "True": 
    File "C:\Users\User\Desktop\Python code\hangmangame_test.py", line 12, in isWordGuessed 
    if i in lettersGuessed: 
TypeError: argument of type 'NoneType' is not iterable 

import string 
def isWordGuessed(secretWord, lettersGuessed): 
    ''' 
    secretWord: string, the word the user is guessing 
    lettersGuessed: list, what letters have been guessed so far 
    returns: boolean, True if all the letters of secretWord are in lettersGuessed; 
     False otherwise 
    ''' 
    # FILL IN YOUR CODE HERE... 
    new = "" 
    for i in secretWord: 
     if i in lettersGuessed: 
      new += i 
      if new == secretWord: 
       return True 
     else: 
      return False 

def getGuessedWord(secretWord, lettersGuessed): 
    ''' 
    secretWord: string, the word the user is guessing 
    lettersGuessed: list, what letters have been guessed so far 
    returns: string, comprised of letters and underscores that represents 
     what letters in secretWord have been guessed so far. 
    ''' 
    # FILL IN YOUR CODE HERE... 
    result = list(secretWord) 
    for i in result: 
     if i not in lettersGuessed: 
      result[result.index(i)] = " _ " 
    transtring = ''.join(result) 
    return transtring 


def getAvailableLetters(lettersGuessed): 
    ''' 
    lettersGuessed: list, what letters have been guessed so far 
    returns: string, comprised of letters that represents what letters have not 
     yet been guessed. 
    ''' 
    # FILL IN YOUR CODE HERE... 
    Alletters = string.ascii_lowercase 
    result = list(Alletters) 
    for i in lettersGuessed: 
     if i in result: 
      result.remove(i) 
    transtring = ''.join(result) 
    return transtring 



def hangman(secretWord): 
    ''' 
    secretWord: string, the secret word to guess. 

    Starts up an interactive game of Hangman. 

    * At the start of the game, let the user know how many 
     letters the secretWord contains. 

    * Ask the user to supply one guess (i.e. letter) per round. 

    * The user should receive feedback immediately after each guess 
     about whether their guess appears in the computers word. 

    * After each round, you should also display to the user the 
     partially guessed word so far, as well as letters that the 
     user has not yet guessed. 

    Follows the other limitations detailed in the problem write-up. 
    ''' 
    # FILL IN YOUR CODE HERE... 
    print("Welcome to the Hangman game!") 
    print('\n') 
    print("My word has " + str(len(secretWord)) + " letters!") 
    guesses = 8  # No. of guesses 
    lettersGuessed = [] # Creating empty list 
    Alletters = string.ascii_lowercase # String containing all the lowercase letters 
    while guesses > 0: # Game starts 
     print("You have " + str(guesses) + " guesses left!") 
     print("Available letters: " + str(Alletters)) 
     letters = input("Please guess a letter: ") 
     if type(letters) != str: 
      print("Invalid input! please enter one letter!") 
     else: 
      letterslower = letters.lower()  # Transfering input into lowercase 
      lettersGuessed = lettersGuessed.append(letterslower) # Inserting inputs into a list 
      if letterslower not in Alletters: 
       print("Opps! you have already guessed that letter: " + getGuessedWord(secretWord, lettersGuessed)) 
      else: 
       if isWordGuessed(secretWord, lettersGuessed) == "True": 
        print("Congradualation! you won!") 
       else: 
        print("Good guess: " + getGuessedWord(secretWord, lettersGuessed)) 
        guesses -= 1 
        Alletters = getAvailableLetters(lettersGuessed) 
    print("You have ran out of guess, the word is " + str(secretWord)) 







# a = "puck" 
# b = ["f", "a", "c", "t"] 
# print(isWordGuessed(a, b)) 
# print(getGuessedWord(a, b)) 
# print(getAvailableLetters(b)) 

a = "junior" 
hangman(a) 
+3

从我们的规则:“(为什么不是这个代码工作“?)寻求帮助调试问题”必须包括所期望的行为,一个特定的问题或错误的和必要的最短的代码在问题本身中重现它“。只是说“我得到错误,请修复”是不够的。 – georg 2014-10-28 10:00:20

+0

'lettersGuessed = lettersGuessed.append(letterslower)'不会做你的想法--' list.append'是** in-place **,它修改列表并返回'None'。 – jonrsharpe 2014-10-28 10:05:50

回答

0

你的错误是由这一行造成的:

lettersGuessed = lettersGuessed.append(letterslower) 

append方法在原地工作,并返回None,因此您的列表将变为NoneType,因为您将其设置为等于该调用。刚刚摆脱分配的:

lettersGuessed.append(letterslower) 
+0

ahha,thx男人。现在我正在运行这个代码,猜测只是继续下降,即使我猜对了! – 2014-10-28 10:11:55

+0

@CharlesLi我相信你知道这需要一个单独的问题。祝你好运。 :) – 2014-10-28 10:13:18

+0

公顷。好 。 NP。谢谢 – 2014-10-28 10:21:00

0

线87:的lettersGuessed.append(letterslower)代替lettersGuessed = lettersGuessed.append(letterslower)

追加不返回任何

+0

Thx男子。欣赏它。 – 2014-10-28 10:12:25

0

如果你有

lettersGuessed = lettersGuessed.append(letterslower) 

要分配给NonelettersGuessed,因为这是append回报。

只需使用:

lettersGuessed.append(letterslower)