刽子手游戏 - 更新单词list.python

时间:2016-12-03 09:56:10

标签: 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")

我真的不知道如何解决这个问题。我会很感激一些帮助。提前谢谢!

2 个答案:

答案 0 :(得分:0)

我不打算为你解决作业,但你的错误源于你正在使用的事实:

letter[i]

但是len(letter) == 1,因此会引发您看到的错误(您可能希望letter代替letter[i] ...)。

答案 1 :(得分:0)

正如Idos所提到的,当IndexError> letter[i] i时,letter无效0,因为letter是一个char字符串。

你的功能逻辑没有多大意义。函数内部wordif letter in word均未发生变化,因此如果您要执行for测试,则在letter循环内执行该操作有点愚蠢。但是,真正需要在循环中测试的是word是否等于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

这是一种将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') 存储在列表中的更有效方式:

SELECT *
FROM A.tableA JOIN B.tableB 

它为我以前的版本提供了相同的输出。