问题描述
问题在于编写一个解决青蛙和蟾蜍难题的程序,并且使用此特定程序必须具有递归功能,因此它必须没有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中没有其他命中)