我定义了一个函数,用于返回列表中某些事件的索引。但是,当我尝试运行doctests时,它返回一个NameError,但退出时带有“退出代码0”,这意味着它没有问题。
Field
运行此命令后,出现以下错误消息:
GameManager
我不明白我的代码的哪一部分导致了这个问题。
答案 0 :(得分:1)
您的错误在这里:
for value in item:
value += 1
item
是shoes
列表的元素,shoes
的所有元素都是字符串。您不能在字符串中添加整数。因此value += 1
会引发错误,因此整个函数都会失败。您永远不会获得return
变量。从这里错误。
乍看之下,您根本不需要这两行,之后就再也不会使用value
了。尝试删除它们。
编辑
如果这些行背后的含义是使每个索引值增加1(如我从文档字符串中所怀疑的那样(感谢@ekhumoro使我意识到这一点),则可以编辑列表理解以实现预期的目标。
indices = [i+1 for i, x in enumerate(shoes) if x == item]
答案 1 :(得分:0)
我写了一个简短的
def build_placements(shoes):
"""Return a dictionary where each key is a company, and each value
is a list of placements by people wearing shoes made by that company.
>>> result = build_placements(['Saucony', 'Asics', 'Asics', 'NB', 'Saucony', 'Nike', 'Asics', 'Adidas', 'Saucony', 'Asics'])
>>> result == {'Saucony': [1, 5, 9], 'Asics': [2, 3, 7, 10], 'NB': [4], 'Nike': [6], 'Adidas': [8]}
True
"""
return {i:[j+1 for j,k in enumerate(shoes) if k == i] for i in set(shoes)}
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
这是产生的
Trying:
result = build_placements(['Saucony', 'Asics', 'Asics', 'NB', 'Saucony', 'Nike', 'Asics', 'Adidas', 'Saucony', 'Asics'])
Expecting nothing
ok
Trying:
result == {'Saucony': [1, 5, 9], 'Asics': [2, 3, 7, 10], 'NB': [4], 'Nike': [6], 'Adidas': [8]}
Expecting:
True
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.build_placements
2 tests in 2 items.
2 passed and 0 failed.
Test passed.