本帖最后由 junjie0927 于 2022-1-13 16:04 编辑
[Python] 纯文本查看 复制代码 price = [8.849558,11.504425,1.769912,9.734513]
accu = 0.005
i = 0.13
index = 0
def cal(num):
x = round(num * (1 + i), 4)
if abs(x - round(x,1)) < accu:
return True
def judge(list): # 在 i 给定的情况下,判断列表内所有元素是否满足
global index
if cal(list[index]):
if index < (len(list)-1):
index = index + 1
print(list[index],'满足')
judge(list)
print(list[index], '满足2') #reture True之后会执行(len(price)-1)次,很奇怪
else:
print(index,'True')
return True # reture True之后不知道为什么会执行if分支最后一行代码
else:
return False
judge(price)
因为第17行代码是最关键的
python的执行方式是从上到下。
第17行代码 judge(list)相当于调用函数。
也就是说:
第1次执行的时候,执行到judge(list)就第1次重judge(list),然后再第1重judge(list)中再次遇到第2重的judge(list),又在第2重的judge(list)再再次遇到第3重的judge(list).
此时因为index = index + 1的原因,此时的index = 4
不符合 if index < (len(list)-1),所以第三重judge(list)直接抛出return true,之后第二重抛出结果,第一重抛出结果,最后第1次执行的函数也等着抛出结果。
[Python] 纯文本查看 复制代码
>>11.504425 满足 #第1次index = 0,执行judge(list), print(list[index],'满足'), 遇到第2重judge(list),index = index + 1 = 1
>>1.769912 满足 #第2重index = 1,执行第2重judge(list), print(list[index],'满足'), 遇到第3重judge(list),index = index + 1 = 2
>>9.734513 满足 #第3重index = 2,执行第3重judge(list), print(list[index],'满足'), 遇到第4重judge(list),index = index + 1 = 3
>>3 True #第4重index = 3,执行第3重judge(list), len(list)-1 = 3,所以index < (len(list)-1)不符合,抛出return True,第4重judge(list)结束
>>9.734513 满足2 #第3重judge(list)继续执行,print(list[index], '满足2'),第3重judge(list)结束
>>9.734513 满足2 #第2重judge(list)继续执行,print(list[index], '满足2'),第2重judge(list)结束
>>9.734513 满足2 #第1次judge(list)继续执行,print(list[index], '满足2'),第1次judge(list)结束
|