【发布时间】:2018-04-09 16:07:30
【问题描述】:
我正在尝试编写一个简单的代码,它采用一个列表 (nums) 并对列表中的数字求和,只要数字不是 13 或不会在 13 之后立即出现。这是我的代码:
def sum13(nums):
sum = 0
if nums[0] != 13:
sum += nums[0]
for i in range(len(nums)):
if nums[i] != 13 and nums[i - 1] != 13:
sum += nums[i]
return sum
我不断收到编译错误:“列表索引超出范围”。我没有更改列表的索引,当我调用 nums[0] 时,它位于将 i 限制在 0 和 len(nums) 之间的 for 循环之外,所以我不知道如何解决这个问题,或者如何以更优雅的方式编写代码以消除问题。
【问题讨论】:
-
列表是否为空? E:你确定错误没有显示在这一行:
if nums[i] != 13 and nums[i - 1] != 13:? -
顺便说一下,这是运行时错误,而不是编译错误
-
你需要包含调用这个函数的代码,我怀疑这将是错误的根源。
-
您还需要提供输入和输出的样本
-
如果 nums 为空,则会引发错误。顺便说一句,我认为在这种情况下“C 风格的语句”可能会更好,因为可以在循环中修改迭代变量,如果当前元素是 13,则可以跳过下一个元素。Python 中没有这样的
for statement,幸运的是,您可以使用while来做到这一点。