正确的代码,但仍然测试用例没有在python中运行

时间:2016-10-08 13:14:37

标签: python python-3.x

给定一个int数组,如果.. 1,2,3,..出现在某个数组中,则返回True。

def array123(nums):
    for i in  nums:
       if nums[i:i+3] == [1,2,3]:
          return True
    return False

Coding bat problem

我的代码满足所有测试用例,除了nums = [1,2,3] 谁能告诉我我的代码有什么问题

3 个答案:

答案 0 :(得分:1)

您的代码并不完全正确。您正在使用列表中的项目切割列表,而不是使用索引。幸运的是,这并没有抛出任何错误,因为列表中的项目在列表索引的范围内,或者当完成correclty时,切片不会引发错误,无论开始和/或停止索引如何。

您可以使用range(len(...))生成索引,也可以在len(nums) - len(sublist)停止搜索,因此您不会检查切片小于子列表。随着子列表的长度变大,这会更方便。

def array123(nums, sublist):
    j = len(sublist)
    for i in range(len(nums)-j):
       if nums[i:i+j] == sublist:
          return True
    return False

# Call function
array123(nums, [1,2,3])

有用的参考:

Explain Python's slice notation

答案 1 :(得分:1)

应该是这样的。

Paragraph para3 = new Paragraph(metroComboBox1.Text + " from " + 
DateTime.Parse(metroDateTime1.Text) + " to " +
DateTime.Parse(metroDateTime2.Text));

试试这个。希望这可以帮助。 :)

答案 2 :(得分:0)

你得到了错误的结果,因为你正在迭代不在元素元素索引上的元素的值。请尝试以下代码

def array123(nums):
    for i in range(len(nums)-2):
       if nums[i:i+3] == [1,2,3]:
          return True
    return False

并且记得给出列表的结束索引(范围(len(nums)-2))因为假设你的数组的长度是4那么(范围(len(nums)-2))将是

(范围(2))= [0,1]

因此循环将迭代0,1作为起始索引