2014-10-28 50 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)