“猜字游戏” Python 代码测试
我写了一个猜单词游戏的代码,在这个游戏里,电脑是对手。但是我一直遇到一些错误,不知道怎么解决。请帮我看看。比如,我现在遇到的错误是:
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)