编写一个接受整数列表的函数,如果该函数按顺序包含007,则返回True

时间:2019-06-15 14:36:52

标签: python

代码不适用于spy_games([1,0,3,0,4,7])##

 def spy_games(arr):
          net=0
            for num in arr:
            if num==0:
            num +=net
            break
            if num==0:
            num +=net
            break
             if num==7:
                  return True
                else:
                 return False
        

2 个答案:

答案 0 :(得分:1)

在您的原始方法中,即使看到num0彼此不靠近,7也会递增[0,0,7],因此当前的方法行不通

一种解决它的方法是在遍历列表时采用长度为3的切片,并查看切片是否与[0,0,7]相匹配

def spy_games(li):

    #Iterate over the list
    for idx in range(len(li)):
        #If a slice of length 3 matches [0,0,7] return True
        if [0,0,7] == li[idx:idx+3]:
            return True

    #If no such slice found, return False
    return False

print(spy_games([1, 0, 3, 0, 6, 7]))
print(spy_games([1, 0, 3, 0, 0, 7]))
print(spy_games([0, 0, 7, 1, 0, 3]))
print(spy_games([1, 0, 0, 7, 2, 3]))

输出将为

False
True
True
True

答案 1 :(得分:0)

您可以将整数列表转换为字符串(例如,列表[1,0,3,0,6,7]变为'103067'),然后测试是否包含子字符串'007'

list_of_integers1 = [1,0,3,0,6,7]
list_of_integers2 = [0,0,7,0,6,7]

def spy_games(arr):
    return '007' in ''.join(str(i) for i in arr)

print(spy_games(list_of_integers1))
print(spy_games(list_of_integers2))

打印:

False
True