Udacity Python课程自定义enumerate生成器提交报错如何解决
代码错误原因分析
- 硬编码全局变量
lessons:你的函数实现里用了range(len(lessons)),直接读取全局作用域的lessons列表,没有使用参数传入的iterable。如果平台测试时传入其他可迭代对象,代码会直接运行错误,只有在全局刚好存在lessons变量的场景下才能正常运行。 - 未正确使用
start参数:你把循环变量命名为start,直接覆盖了函数接收的start参数值,导致传入的起始值完全失效。你当前传1刚好输出正确是巧合:你循环里取的索引是04,再手动+1得到15,刚好匹配这次调用的预期,要是调用时传start=3,输出的序号还是1~5,完全不符合要求。 - 不支持非序列类型的可迭代对象:你用下标
iterable[start]的方式读取元素,只能适配列表、元组这类支持索引访问的序列,对于集合、生成器这类没有索引的可迭代对象会直接报错,不符合内置enumerate的通用实现要求。
正确实现参考
lessons = ["Why Python Programming", "Data Types and Operators", "Control Flow", "Functions", "Scripting"] def my_enumerate(iterable, start=0): count = start for item in iterable: yield count, item count += 1 for i, lesson in my_enumerate(lessons, 1): print("Lesson {}: {}".format(i, lesson))
内容的提问来源于stack exchange,提问作者Aleeng730
相关产品推荐
相关产品推荐

