编码逻辑(Python)



我正在上python课程,遇到了一个让我对逻辑有点困惑的问题。问题是:

编写一个函数,接受一个整数列表,如果它包含007,则返回True:

spy_game([1,2,4,0,0,7,5]) --> True
spy_game([1,0,2,4,0,5,7]) --> True
spy_game([1,7,2,0,4,5,0]) --> False

这是我的解决方案:

def spy_game(nums):
code = ["x",0,0,7] #"x" at index 0
for i in nums:
if i == code[1]: # check if i matches seq index 1
code.pop(1) # if True, remove i at seq index 1
return len(code) == 1

但是,这个解决方案返回一个错误消息:

IndexError                                Traceback (most recent call last)
<ipython-input-41-76ad0cd13e33> in <module>
1 # Check
----> 2 spy_game([1,2,4,0,0,7,5])
<ipython-input-40-54389cdc3f5f> in spy_game(nums)
2     code = ["x",0,0,7]
3     for i in nums:
----> 4         if i == code[1]:
5             code.pop(1)
6     return len(code) == 1
IndexError: list index out of range

这是正确的"解决方案:

def spy_game(nums):
code = [0,0,7,"x"] # "x" placed at index 3 instead
for i in nums:
if i == code[0]: # check i against sequence index 0
code.pop(0)
return len(code) == 1

我很难理解为什么我原来的解决方案失败了。为什么索引[1]"超出范围"?当列表的索引为0-3时?我在逻辑中遗漏了什么?有人能解释一下吗?提前谢谢。

您应该写下for i in nums每次迭代后code的情况。

你会发现遇到0,0,7之后,nums可能仍然不是空的。0、0和7将从code中弹出,留下长度为1的列表,使code[1]在下一次迭代时抛出IndexError。

相关内容

  • 没有找到相关文章

最新更新