Ich muss ein paar Funktionen schreiben, die ein Hangman-Spiel ausmachen. Ich habe den Code, aber ich bekomme immer einen Fehler und mein Code läuft nicht vollständig, so dass ich nicht einmal weiß, ob mein Code korrekt ist. Dies ist der Code, den ich habe:Ausgabefehler im Hangman-Spiel
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
'''
if lettersGuessed == []:
return False
else:
for i in secretWord:
if i not in lettersGuessed:
return False
else:
if i == secretWord[-1]:
return True
def getGuessedWord(secretWord, lettersGuessed):
lst= ''
for e in secretWord:
if e in lettersGuessed:
lst += e
else:
lst += '_'
return lst
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.
'''
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.
'''
print("Welcome to the Hangman game!")
print("I am thinking of a word that is " + str(len(secretWord)) + " letters!")
guesses = 8
lettersGuessed = []
Alletters = string.ascii_lowercase
while guesses > 0:
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()
lettersGuessed = lettersGuessed.append(letterslower)
if letterslower not in Alletters:
print("Opps! you have already guessed that letter: " + getGuessedWord(secretWord, lettersGuessed))
else:
if isWordGuessed(secretWord, lettersGuessed) == "True":
print("Congradualations, 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))
Dies ist der Ausgang (der Fehler ist in gelb):
Welcome to the Hangman game!
I am thinking of a word that is 1 letters!
You have 8 guesses left
Available letters: abcdefghijklmnopqrstuvwxyz
Please guess a letter: c
Traceback (most recent call last):
File "submission.py", line 81, in hangman
if isWordGuessed(secretWord, lettersGuessed) == "True":
File "simple_grade_hangman.py", line 107, in isWordGuessed
if letter not in lettersGuessed:
TypeError: argument of type 'NoneType' is not iterable
Was hier passiert?
Warum vergleichen Sie einen Booleschen Wert mit einer Zeichenfolge "True"? – Carcigenicate
Ändern 'if isWordGuessed (secretWord, lettersGuessed) ==" True ":' zu nur 'wenn isWordGuessed (secretWord, lettersGuessed):'. 1. Vergleiche nie gegen wahr; es ist unnötig überflüssig. 2. Sie haben mit einer Zeichenfolge verglichen, nicht mit einem booleschen Wert. Um zu verdeutlichen, warum dies falsch ist, wird "False" in einem booleschen Kontext zu "True" ausgewertet (wie auch jede nicht leere Zeichenkette). – Carcigenicate
@Carcigenicate Danke für die Erklärung - das macht Sinn. – EllaP