python 进行递归的时候出现了一个不能理解的 bug,求各路大神解惑
是一道24点的问题,出现了一个很诡异的现象,为了不影响逻辑,把其他的操作删掉了,可以简单地把这个看做一个对数组中的数据进行任意两个数字的相乘的操作。
逻辑:对输入的列表进行任意组合的弹出两个数字,对这两个数字进行相乘的操作,然后再将乘积加入到列表中进行递归操作。
目前遇到的问题:
会出现 pop index out of range的情况,但是我在代码里面已经加了限制条件,按理说列表长度为1的是不会循环两次的,
加了打印之后发现:最后一句 print(j,tlist,len(tlist))会出现:1 [6] 1 然后报错pop index out of range,在twentyfour(mul)后打印print('a4') print('a5'),发现这俩在一次循环中会执行两次
实在费解,希望大神能来帮我解答一下这个问题
代码
import copy
def twentyfour(alist):
if len(alist)<2:
if alist[0]==24:
print("yes")
else:
print("no")
else:
for i in range(len(alist)):
tlist=copy.deepcopy(alist)
first=tlist.pop(i)
print(len(tlist))
print('a1')
for j in range(len(tlist)):
print('a2')
print(j,tlist,len(tlist))
second=tlist.pop(j)
mul=copy.deepcopy(tlist)
mul.append(first*second)
print('a3')
twentyfour(mul)
print('a4')
print('a5')
def func():
_input=input().split()
a=[]
for i in range(len(_input)):
if _input[i]=="A":
a.append(1)
elif _input[i]=="J":
a.append(11)
elif _input[i]=="Q":
a.append(12)
elif _input[i]=="K":
a.append(13)
else:
a.append(int(_input[i]))
twentyfour(a)
if __name__ == "__main__":
func()
推荐文章: