b站程序员节的蚂蚁的题目,最后得出的答案和预期不符


'''
有一根长27厘米的细木杆,
在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
木杆很细,不能同时通过两只蚂蚁。
开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。
假设蚂蚁们每秒钟可以走一厘米的距离,求所有蚂蚁都离开木杆的最短时间和最长时间。
'''

all_time_list=[]
zero_list=[None,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,None]

def move_left(lis,i):
    list=lis
    i=int(i)
    a = lis.index(i)
    if list[a-1] != None:
        list[a-1] = i
    list[a] = 0
    return list

def move_right(lis,i):
    list=lis
    i=int(i)
    a=lis.index(i)
    if list[a+1] !=None:
        list[a + 1] = i
    list[a] = 0
    return list

sta=[0,1]
#0=left 1=right


for i in sta:
    for j in sta:
        for r in sta:
            for m in sta:
                for n in sta:
                    list = [None,0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0,None]
                    sta_list=[None,i,j,r,m,n]
                    num_list = [1, 2, 3, 4, 5]
                    a=0
                    while True:
                        if list == zero_list:
                            all_time_list.append(a)
                            break

                        if list !=zero_list:
                            for num in num_list:
                                if num in list:
                                    if list[list.index(num) + 1] == 0 and sta_list[num] == 1:
                                        list = move_right(list, num)


                                    else:
                                        if list[list.index(num) + 1] != 0 and sta_list[num] == 1:
                                            if list[list.index(num) + 1] == None:
                                                list = move_right(list, num)

                                            else:
                                                list = move_left(list, num)
                                                sta_list[num] = 0
                                                sta_list[list[list.index(num) + 1]] = 1

                                        else:
                                            if list[list.index(num) - 1] == 0 and sta_list[num] == 0:
                                                list = move_left(list, num)

                                            else:
                                                if list[list.index(num) - 1] != 0 and sta_list[num] == 0:
                                                    if list[list.index(num) - 1] == None:
                                                        list = move_left(list, num)
                                                    else:
                                                        list = move_right(list, num)
                                                        sta_list[num] = 1
                                                        if list.index(num) - 1 != 0:
                                                            sta_list[list[list.index(num) - 1]] = 0
                            a += 1

print(min(all_time_list))
print(max(all_time_list))

正确答案是11,24
程序输出为:12,25
求指导

all_time_list = []
zero_list = [None, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, None]


def move_left(lis, i):
    list = lis
    i = int(i)
    a = lis.index(i)
    if list[a - 1] != None:
        list[a - 1] = i
    list[a] = 0
    return list


def move_right(lis, i):
    list = lis
    i = int(i)
    a = lis.index(i)
    if list[a + 1] != None:
        list[a + 1] = i
    list[a] = 0
    return list


sta = [0, 1]
# 0=left 1=right

for i in sta:
    for j in sta:
        for r in sta:
            for m in sta:
                for n in sta:
                    list = [None, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0,0, None]
                    sta_list = [None, i, j, r, m, n]
                    num_list = [1, 2, 3, 4, 5]
                    a = 0
                    while True:
                        if list == zero_list:
                            all_time_list.append(a)
                            break
                        if list != zero_list:
                            for num in num_list:
                                if num in list:
                                    if list[list.index(num) + 1] == 0 and sta_list[num] == 1:
                                        list = move_right(list, num)

                                    else:
                                        if list[list.index(num) + 1] != 0 and sta_list[num] == 1:
                                            if list[list.index(num) + 1] == None:
                                                list = move_right(list, num)
                                            else:
                                                list = move_left(list, num)
                                                sta_list[num] = 0
                                                sta_list[list[list.index(num) + 1]] = 1
                                        else:
                                            if list[list.index(num) - 1] == 0 and sta_list[num] == 0:
                                                list = move_left(list, num)
                                            else:
                                                if list[list.index(num) - 1] != 0 and sta_list[num] == 0:
                                                    if list[list.index(num) - 1] == None:
                                                        list = move_left(list, num)
                                                    else:
                                                        list = move_right(list, num)
                                                        sta_list[num] = 1
                                                        if list.index(num) - 1 != 0:
                                                            sta_list[list[list.index(num) - 1]] = 0
                            a += 1
print(min(all_time_list))

答案

img

如果觉得答案对你有帮助,请点击下采纳,谢谢~

你的代码很完美,可是数学没学好。
27厘米长的木头,每隔1厘米一只蚂蚁,一共只有26个位置,你定义了27个位置,那就是28厘米长的木头了


'''
有一根长27厘米的细木杆,
在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
木杆很细,不能同时通过两只蚂蚁。
开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。
假设蚂蚁们每秒钟可以走一厘米的距离,求所有蚂蚁都离开木杆的最短时间和最长时间。
'''

all_time_list=[]
zero_list=[None,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,None]

def move_left(lis,i):
    list=lis
    i=int(i)
    a = lis.index(i)
    if list[a-1] != None:
        list[a-1] = i
    list[a] = 0
    return list

def move_right(lis,i):
    list=lis
    i=int(i)
    a=lis.index(i)
    if list[a+1] !=None:
        list[a + 1] = i
    list[a] = 0
    return list

sta=[0,1]
#0=left 1=right


for i in sta:
    for j in sta:
        for r in sta:
            for m in sta:
                for n in sta:
                    list = [None,0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, None]
                    sta_list=[None,i,j,r,m,n]
                    num_list = [1, 2, 3, 4, 5]
                    a=0
                    while True:
                        if list == zero_list:
                            all_time_list.append(a)
                            break

                        if list !=zero_list:
                            for num in num_list:
                                if num in list:
                                    if list[list.index(num) + 1] == 0 and sta_list[num] == 1:
                                        list = move_right(list, num)


                                    else:
                                        if list[list.index(num) + 1] != 0 and sta_list[num] == 1:
                                            if list[list.index(num) + 1] == None:
                                                list = move_right(list, num)

                                            else:
                                                list = move_left(list, num)
                                                sta_list[num] = 0
                                                sta_list[list[list.index(num) + 1]] = 1

                                        else:
                                            if list[list.index(num) - 1] == 0 and sta_list[num] == 0:
                                                list = move_left(list, num)

                                            else:
                                                if list[list.index(num) - 1] != 0 and sta_list[num] == 0:
                                                    if list[list.index(num) - 1] == None:
                                                        list = move_left(list, num)
                                                    else:
                                                        list = move_right(list, num)
                                                        sta_list[num] = 1
                                                        if list.index(num) - 1 != 0:
                                                            sta_list[list[list.index(num) - 1]] = 0
                            a += 1

print(min(all_time_list))
print(max(all_time_list))

感谢各位,这是我修改后的成品源码