我的代码中不断收到此错误消息,但我不明白为什么。
错误:
请提供消息:该死的男孩
Traceback (most recent call last):
File "bleep.py", line 40, in <module>
main()
File "bleep.py", line 26, in main
user_list_lower[item] = beep[0]
TypeError: list indices must be integers or slices, not str
代码:
#x.strip() for x in
import sys
def main():
if len(sys.argv) < 2:
sys.exit("Must enter text. status code 1")
with open(sys.argv[1], 'r') as f:
content = f.read()
content_list = content.split("\n")
user_input = input("Please provide a message: ")
user_list = user_input.split()
while '' in content_list:
content_list.remove('')
user_list_lower = [x.lower() for x in user_list]
for item in user_list_lower:
if item in content_list:
beep = [len(item) * '*']
user_list_lower[item] = beep[0]
print (user_list_lower)
print(beep)
else:
break
print(content_list)
print(user_list_lower)
return content
if __name__== "__main__":
main()
作为用户输入,我使用:天哪!它并不会像应有的那样将darn更改为****。
在命令行参数中,我给出了一个文本文件,该文件包含很少的脏话,其中“织补”是一个。我的代码可以工作,但不会将darn字样更改为“ ****”
答案 0 :(得分:0)
在循环中,您尝试使用item
来索引user_list_lower
,但是item是列表元素,而不是其索引。尝试使用enumerate
:
for idx, item in enumerate(user_list_lower):
if item in content_list:
beep = [len(item) * '*']
user_list_lower[idx] = beep[0]
print (user_list_lower)
print(beep)
else:
break
除此之外,请考虑将content_list
改成set
,这将使检查if item in content_list
的速度更快。