2016-10-07 2 views
0

Meine Schleife scheint über den ersten Buchstaben zu iterieren und bricht dann, obwohl es durch jeden Buchstaben im secretWord iterieren soll, zum Beispiel soll der Code unten "_pp_e" aber stattdessen drucken es druckt nur "_". Ich verstehe nicht, was ist das Problem mit diesem Code?For Schleife iteriert nur über den ersten Buchstaben

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... 
    for letter in secretWord: 
     if letter in lettersGuessed: 
      return letter 
     else: 
      return '_' 

print(getGuessedWord("apple", ['e', 'i', 'k', 'p', 'r', 's'])) 
+1

Nun, Sie kommen von der Funktion in der ersten Iteration zurück. 'return' ** beendet ** eine Funktion, da und dann, so dass die 'for'-Schleife nicht fortgesetzt wird. –

+0

Sie sollten eine Reihe von Ergebnissen aus Ihrer Schleife erstellen, bevor Sie Ihre Antwort bestimmen, da Sie die Rückgabe kurzschließen, wie das, was Martijn gesagt hat. – Fallenreaper

+0

Für pädagogische Zwecke können Sie das Listenverständnis auch dafür verwenden: ''. .join ([x wenn x in lettersGuessed else' _ 'für x in secretWord])' – Jaco

Antwort

2

Sie return aus der Funktion in der ersten Iteration. returnendet eine Funktion, dort und dann, so dass die for Schleife wird auch nicht weiter.

Sie müssen Ihren Rückgabewert in der Funktion selbst aufbauen. Bauen Sie die resultierende Zeichenfolge ein Zeichen in einer Zeit, indem Sie eine Liste mit allen Zeichen zu halten, zuerst dann diejenigen zusammen in eine Zeichenfolge am Ende verbindet:

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. 
    ''' 
    guessed = [] 
    for letter in secretWord: 
     if letter in lettersGuessed: 
      guessed.append(letter) 
     else: 
      guessed.append('_') 
    return ''.join(guessed) 

Wenn Sie abenteuerlich fühlen, könnten Sie sogar, dass ein list comprehension und alles tun, die Arbeit in einer Zeile:

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. 
    ''' 
    return ''.join([l if l in lettersGuessed else '_' for l in secretWord]) 

Entweder Version erzeugt die erwartete Ausgabe:

>>> print(getGuessedWord("apple", ['e', 'i', 'k', 'p', 'r', 's'])) 
_pp_e 
0

Das Schlüsselwort return verlässt den ca lling-Funktion. Dies sollte den Trick:

def getGuessedWord(secretWord, lettersGuessed): 

    result = '' 
    for letter in secretWord: 
     if letter in lettersGuessed: 
      result += letter 
     else: 
      result += '_' 
    return result 

print(getGuessedWord("apple", ['e', 'i', 'k', 'p', 'r', 's'])) 

Hier legen Sie mit einem leeren String als Ergebnis beginnen und entweder anhängen einen Brief (wenn es in der Liste aufgenommen wurde) oder ein Unterstrich (wenn es nicht), dann Rückkehr die Ergebniszeichenfolge.

Verwandte Themen