“猜字游戏” Python 代码测试

-3 投票
3 回答
2973 浏览
提问于 2025-04-30 02:59

我写了一个猜单词游戏的代码,在这个游戏里,电脑是对手。但是我一直遇到一些错误,不知道怎么解决。请帮我看看。比如,我现在遇到的错误是:

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 个回答

0

第87行:应该用 lettersGuessed.append(letterslower),而不是 lettersGuessed = lettersGuessed.append(letterslower)

因为 append 这个方法不会返回任何东西

0

在这里,你有

lettersGuessed = lettersGuessed.append(letterslower)

你把 None 赋值给了 lettersGuessed,因为 append 方法返回的就是 None

你只需要这样做:

lettersGuessed.append(letterslower)
0

你的错误是由这一行代码引起的:

lettersGuessed = lettersGuessed.append(letterslower)

append这个方法是直接在原来的列表上操作的,它返回的是None,所以当你把它的结果赋值给你的列表时,你的列表就变成了NoneType。只需要去掉这个赋值就可以了:

lettersGuessed.append(letterslower)

撰写回答