河内的塔,我怎样才能完善我的功能?

时间:2015-12-16 13:55:12

标签: python python-3.x

我正在尝试创建一个实际将项目从一个堆栈移动到另一个堆栈的函数,但是我有很多重复。任何人都可以帮我改进它吗? (还有一些位需要添加)

def guess2(frompeg, topeg):
    temp = -1
    if frompeg == 'a':
        if a != []:
            temp = a.pop()
        else:
            print('Error Popping a')
            return ()
    if frompeg == 'b':
        if b != []:
            temp = b.pop()
        else:
            print('Error Popping b')
            return ()
    if frompeg == 'c':
        if c != []:
            temp = c.pop()
        else:
            print('Error Popping c')
            return ()

    if topeg == 'a':
        if a == []:
            a.append(temp)
        elif temp < a[-1]:
            a.append(temp)
        else:

            print('Error')
    if topeg == 'b':
        if b == []:
            b.append(temp)
        elif temp < b[-1]:
            b.append(temp)
        else:
            print('Error')
    if topeg == 'c':
        if c == []:
            c.append(temp)
        elif temp < c[-1]:
            c.append(temp)

        else:
            print('Error')


print(a,b,c)
guess2('a','b')
print(a,b,c)

1 个答案:

答案 0 :(得分:1)

你可以做的一件事就是对象图:

a = [7,6,5,4,3,2,1]
b = []
c = []

dd = {'a':a, 'b':b, 'c':c}

def guess2(frompeg, topeg):
    if dd[frompeg] != []:
       temp = dd[frompeg].pop()       
    else:
        print('Error Popping', frompeg)
        return  

    if dd[topeg] == []:
        dd[topeg].append(temp)
    elif temp < dd[topeg][-1]:
        dd[topeg].append(temp)
    else:
        dd[frompeg].append(temp) # put it back
        print('Error')