青蛙拼图在python中使用递归

问题描述

问题在于编写一个解决青蛙和蟾蜍难题的程序,并且使用此特定程序必须具有递归功能,因此它必须没有for / while循环。难题基本上是青蛙在左边,蟾蜍在右边,这两个组被一个空白隔开,获胜状态是所有蟾蜍在左边,青蛙在右边,空白是再次之间。该程序的预期结果是,在用户输入所需的青蛙和蟾蜍的数量之后,程序将显示难题的初始状态,然后通过递归将打印已解决的难题,但从已解决的状态返回到初始状态,即:

    |Toad|Toad|Frog| |
    |Toad| |Frog|Toad|
    |Toad|Frog| |Toad|
    | |Frog|Toad|Toad|
    |Frog| |Toad|Toad|


def make_state(num_frogs,num_toads):
    state=['Frog']*num_frogs+['']+['Toad']*num_toads
    return state

def find_space(state):
    return state.index('')

def is_frog(state,index):
    if state[index]=='Frog':
        return True
    else:
        return False

def is_toad(state,index):
    if state[index]=='Toad':
        return True
    else:
        return False

def move(state,index):
    newState=list(state)
    newState[newState.index('')]=newState[index]
    newState[index]=''
    return newState

def print_state(state):
    print(*state,sep='|')

def is_win(state):
    if state==state[::-1]:
        return True
    else:
        return False
def solvable(state):
    if is_win(state) == True:
        print(state)
        return True
    elif is_win(state) == False:
        return False
    else:
        N=find_space(state)
        if is_frog(state,N-1):
            newState=move(state,N-1)
            print(newState)
            return solvable(newState)
        
        elif is_frog(state,N-2):
            newState=move(state,N-2)
            print(newState)
            return solvable(newState)
        
        elif is_toad(state,N-1)
            print(newState)
            return solvable(newState)
        
        elif is_toad(state,N-2)
            print(newState)
            return solvable(newState)
        else:
            print('False')
     
def main():
    num_frogs=int(input('Enter the number of frogs: \n'))
    num_toads=int(input('Enter the number of toads: \n'))
    print()
    print('Here is the intial state:')
    state=make_state(num_frogs,num_toads)
    print_state(state)
    print()
    print('Here is the solution (in reverse):')
    print(solvable(state))
main()```

I have tried changing the solvable function() to be able to print the expected outcome but the actual outcome that I get is always False.

解决方法

比较False,True或None时,应始终使用is

if is_win(state) is True:
    print(state)
    return True
elif is_win(state) is False:
    return False

看到这个尝试

print( 0 == False,0 is False)

但是那不是您的问题... win会返回true或false ...因此,如果前两个语句都完全可以到达,则除了前两个之外什么都没有(例如,else中没有其他命中)