我为游戏刽子手编写代码。我需要编写一个函数来获取:一个单词,一个当前模式和一个字母,并返回更新的模式(如果该单词中有字母)。
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")
我真的不知道如何解决这个问题。我会很感激一些帮助。提前谢谢!
答案 0 :(得分:0)
我不打算为你解决作业,但你的错误源于你正在使用的事实:
letter[i]
但是len(letter) == 1
,因此会引发您看到的错误(您可能希望letter
代替letter[i]
...)。
答案 1 :(得分:0)
正如Idos所提到的,当IndexError
> letter[i]
i
时,letter
无效0,因为letter
是一个char字符串。
你的功能逻辑没有多大意义。函数内部word
和if 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
它为我以前的版本提供了相同的输出。