我正在尝试创建一个代码破解游戏,其中用户将字符/字母对提交到字典以破解代码,然后我希望代码使用字典用配对字母替换符号的每个实例。
我有以下几段代码:
words = imported list of coded words where each letter is replaced by a symbol. from a text file so i can change later
clues = dictionary of symbol and letter pairs that can be added to, removed from
我尝试了以下操作,但失败了:TypeError: list indices must be integers, not str
def converter(words,clues):
progression = words
for words in progression:#cycles through each coded word in the list
for key in clues: #for each symbol in the dictionary
progression[words] = progression[words].replace(key, clues[key]) #replaces
return progression
任何人都可以提供任何帮助我将非常感激。
亚当
答案 0 :(得分:2)
progression
是一个列表。要从中访问内容,您需要使用索引值,它是一个整数,而不是字符串,因此错误。
你可能想要:
for i, j in enumerate(words):
words[i] = clues.get(j)
枚举的作用是遍历单词列表,其中i
是索引值,j
是内容。 .get()
与dict['key']
类似,但如果未找到密钥,则返回None
而不是引发错误。
然后words[i]
使用单词的索引号
答案 1 :(得分:1)
Haidro解释得很好,但我想我会扩展他的代码,并解决另一个问题。
首先,正如Inbar Rose指出的那样,你的命名惯例很糟糕。它使代码更难以阅读,调试和维护。选择简洁的描述性名称,并确保遵循PEP-8。避免为不同的事物重复使用相同的变量名,尤其是在同一范围内。
现在,代码:
words = ['Super', 'Random', 'List']
clues = {'R': 'S', 'd': 'r', 'a': 'e', 'o': 'e', 'm': 't', 'n': 'c'}
def decrypter(words, clues):
progression = words[:]
for i, word in enumerate(progression):
for key in clues:
progression[i] = progression[i].replace(key, clues.get(key))
return progression
现在替换progression[i]
内容中的字符,而不是使用progression[i]
中的密钥替换clues
。
此外,将progression = words
更改为progression = words[:]
以创建要执行的列表副本。您传入对单词的引用,然后将相同的引用分配给进度。当您操纵progression
时,操纵words
,在这种情况下渲染progression
无用。
使用示例:
print words
print decrypter(words, clues)
print words
使用progression = words
输出:
['超级','随机','列表']
['超级','秘密','名单']
['超级','秘密','列表']
使用progression = words[:]
输出:
['超级','随机','列表']
['超级','秘密','名单']
['超级','随机','列表']