列表超出函数内的范围,但手动完成后工作正常

2024-06-16 08:58:14 发布

您现在位置:Python中文网/ 问答频道 /正文

leaf=[]
leaf.append([1,8])
leaf.append([5])
leaf.append([6,4,7])
leaf.append([9])
leaf.append([3,2])
leaf.append([6,10,2])
max=[]
min=[]
count=0

def childset_max(counter,*arg):
    global max
    if len(arg)==3:
        if arg[0] > arg[1]:
            if arg[0] > arg[2]:
                max.insert(counter,arg[0])
                leaf[counter]=[max[counter]]
            else:
                max.insert(counter,arg[2])
                leaf[counter]=[max[counter]]

        else:
            if arg[1] > arg[2]:
                max.insert(counter,arg[1])
                leaf[counter] = [max[counter]]
            else:
                max.insert(counter,arg[2])
                leaf[counter] = [max[counter]]
    elif len(arg)==2:
        if arg[0]>arg[1]:
            max.insert(counter,arg[0])
            leaf[counter] = [max[counter]]
        else:
            max.insert(counter,arg[1])
            leaf[counter] = [max[counter]]
    else:
        max.insert(counter,arg[0])
        leaf[counter] = [max[counter]]

    return max

def childset_min(counter,*arg):
    global min
    if len(arg)==3:
        if arg[0] < arg[1]:
            if arg[0] < arg[2]:
                min.insert(counter,arg[0])
                leaf[counter]=[min[counter]]
            else:
                min.insert(counter,arg[2])
                leaf[counter]=[min[counter]]

        else:
            if arg[1] < arg[2]:
                min.insert(counter,arg[1])
                leaf[counter] = [min[counter]]
            else:
                min.insert(counter,arg[2])
                leaf[counter] = [min[counter]]
    elif len(arg)==2:
        if arg[0]<arg[1]:
            min.insert(counter,arg[0])
            leaf[counter] = [min[counter]]
        else:
            min.insert(counter,arg[1])
            leaf[counter] = [min[counter]]
    else:
        min.insert(counter,arg[0])
        leaf[counter] = [min[counter]]

    return min

def min_move():
    count=0
    while (count<6):
        if len(leaf[count])==6:
            childset_min(count, leaf[count][0], leaf[count][1], leaf[count]                [2],leaf[count][3],leaf[count][4],leaf[count][5])
        elif len(leaf[count])==5:
            childset_min(count, leaf[count][0], leaf[count][1], leaf[count]    [2],leaf[count][3],leaf[count][4])
        elif len(leaf[count])==4:
            childset_min(count, leaf[count][0], leaf[count][1], leaf[count]    [2],leaf[count][3])
        elif len(leaf[count])==3:
            childset_min(count, leaf[count][0],leaf[count][1],leaf[count][2])
        elif len(leaf[count])==2:
            childset_min(count, leaf[count][0],leaf[count][1])
        elif len(leaf[count])==1:
            childset_min(count, leaf[count][0])
        count=count+1
    return min

def max_move():
    count=0
    while (count<6):
        if len(leaf[count])==6:
            childset_max(count, leaf[count][0], leaf[count][1], leaf[count]    [2],leaf[count][3],leaf[count][4],leaf[count][5])
        elif len(leaf[count])==5:
            childset_max(count, leaf[count][0], leaf[count][1], leaf[count][2],leaf[count][3],leaf[count][4])
        elif len(leaf[count])==4:
            childset_max(count, leaf[count][0], leaf[count][1], leaf[count][2],leaf[count][3])
        elif len(leaf[count])==3:
            childset_max(count, leaf[count][0], leaf[count][1],     leaf[count][2])
        elif len(leaf[count])==2:
            childset_max(count, leaf[count][0], leaf[count][1])
        elif len(leaf[count])==1:
            childset_max(count, leaf[count][0])
        count=count+1
    return max


max_move()
leaf=[]
leaf.insert(0,[max[0],max[1],max[2]])
leaf.insert(1,[max[3],max[4],max[5]])
min_move()
print(leaf[0][2])
childset_min(0,leaf[0][0],leaf[0][1],leaf[0][2])
childset_min(1,leaf[1][0],leaf[1][1],leaf[1][2])
leaf=[]
leaf.insert(0,[min[0],min[1]])
childset_max(0,leaf[0][0],leaf[0][1])
print(leaf)

代码可以优化,我正在这样做的过程中,一些打印只是为了检查一些事情,所以不要介意他们,但在min\u移动调用下面的叶.插入,我得到的错误列表超出范围,但当手动完成时,如下面的函数调用所示,它工作得很好,为什么我得到错误。代码实际上是一个minmax算法


Tags: lenreturnifdefcountcounterargmin