2016-12-03 10 views
-1

ゲームハンマンのコードを書いています。私は、単語、現在のパターン、および文字を取得し、更新されたパターンを返します(文字が単語にあった場合)。ハングマンゲーム - 更新単語list.python

for example: update_word_pattern("apple", "_ _ _ l _", p) 
will return: ("_ppl_") 

私はコードを書くことを試みたが、私はエラーメッセージが表示されます。ここでは

" updated_pattern = pattern[:i] + letter[i] + pattern[i+1:] 
IndexError: string index out of range" 

は私のコードです:

def update_word_pattern(word, pattern, letter): 
    for i in range(len(pattern) - 1): 
     if letter in word: 
      updated_pattern = pattern[:i] + letter[i] + pattern[i+1:] 
     print(updated_pattern) 
    else: 
     print(updated_pattern) 

update_word_pattern("apple", "_ _ _ _ _", "p") 

私は本当にthis.Iうを解決する方法を知りませんいくつかの助けに感謝します。前もって感謝します!

+0

'for'ループの中で'もし文字の場合: 'をテストするのはなぜですか?ループ内で 'letter'も' word'も変化しないので、毎回同じ結果が出ます。また、 'pattern'のスペースも考慮する必要があります。 'pattern'に' word'と同じ長さのリストを作成し、 'pattern = ['_'] * len(word)'のようにそれを印刷するときにスペースを追加する方が簡単です'print( '' .join(pattern))' –

答えて

0

私はあなたのための宿題を解決するつもりはないが、あなたのエラーは、使用しているという事実に由来:

letter[i] 

しかしlen(letter) == 1、それはあなたが見る、エラーがスローされますので、(あなたがする場合がありますletter[i] ...の代わりにletterを実行してください)。

+0

ありがとうございます。それはエラーメッセージを取り除いたが、私が得た出力は間違っていた:_ _ _ _ p – Adamso

0

IDOSは述べているように、あなたはときi> 0 letterは、1つの文字の文字列であるため、IndexErrorletter[i]ためには、無効であることになっています。

あなたの機能の論理はあまり意味がありません。 letterwordも機能が変わっていないので、それを実行したいのであれば、if letter in wordテストを実行してください。forループ内で行うのはちょっと愚かです。しかし、は本当にのループでテストする必要があります。letterが現在の文字のwordと等しい場合です。

修正されたバージョンのコードです。

def update_pattern(word, pattern, letter): 
    return [letter if w == letter else p 
     for w, p in zip(word, pattern)] 

# test 
word = "apple" 
pattern = ['_'] * len(word) 
for letter in 'petal': 
    print(letter) 
    pattern = update_pattern(word, pattern, letter) 
    print(' '.join(pattern), end='\n\n') 

それは私の以前のバージョンと同じ出力が得られます。

def update_pattern(word, pattern, letter): 
    for i in range(len(word)): 
     if word[i] == letter: 
      pattern = pattern[:i] + letter + pattern[i+1:] 
    return pattern 

# test 
word = "apple" 
pattern = '_' * len(word) 
for letter in 'petal': 
    print(letter) 
    pattern = update_pattern(word, pattern, letter) 
    print(' '.join(pattern), end='\n\n') 

出力ここ

p 
_ p p _ _ 

e 
_ p p _ e 

t 
_ p p _ e 

a 
a p p _ e 

l 
a p p l e 

は、リスト内のpatternを格納し、より効率的な方法です。

関連する問題