2016-10-07 8 views
0

私のループは最初の文字を繰り返しているように見えますが、secretWordの各文字を繰り返し処理するはずですが、壊れてしまいます。たとえば、コードは "_pp_e" "_"だけが表示されます。私は理解していない、そのコードの問題は何ですか?forループは最初の文字だけを繰り返します

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

まあ、最初の反復で関数から 'return'します。 'return' **は関数を終了します。そこで、' for'ループは続行しません。 –

+0

あなたの答えを決定する前にループの結果セットを作成する必要があります.Martijnのように、リターンを短絡しています。 – Fallenreaper

+0

教育的な目的のために、これにもリストの理解を使うことができます: ''' .join(xの場合はxの場合はlettersGuardsedを、secretWordの場合はxのために '_')' – Jaco

答えて

2

You return最初の繰り返しの関数からです。 return終了関数があるので、そこにはforループも続行されません。

戻り値を関数に作成する必要があります。

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) 

あなたは冒険を感じているならば、あなたもそれを作ることができる:最後に1つの文字列にまとめたものに参加する最初にすべての文字を保持するために、リストを使用することにより、一度に結果の文字列の文字を構築list comprehensionと1行ですべての作業を行います。

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]) 

いずれかのバージョンが期待される出力を生成します。

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

は、returnキーワードは、CAを終了しますlling機能。

ここ
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'])) 

は、あなたが結果として空の文字列で始まり、どちらか(それがなかった場合)の文字(それがリストに含まれていた場合)、またはアンダースコアを追加し、その後、リターン:これは、トリックを行う必要があります結果の文字列

関連する問題