python条件判断中遇到的问题,百思不得其解
本帖最后由 土豆焗薯条 于 2022-1-13 16:19 编辑各位大佬救命,在写一段程序的时候遇到一个奇怪的问题,代码运行到else分支里面 return True之后又会莫名其妙回到if分支运行if分支最后一行代码,而且运行if分支最后一行代码的次数和列表长度有关,调了好久都没调明白。
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) 第二个if和第二个else是不是没有对齐? 肉眼可见的嵌套内的if对应的else前突了一个字符的位置 wslans 发表于 2022-1-13 15:28
肉眼可见的嵌套内的if对应的else前突了一个字符的位置
顶你,虽然我也看出来了,比你晚了一步 是不是缩进问题,你提问的时候,可以吧代码粘贴到编辑器,上面尖括号<>插入代码里面
这样格式就不会错乱了 wslans 发表于 2022-1-13 15:28
肉眼可见的嵌套内的if对应的else前突了一个字符的位置
不是对齐问题,我粘贴过来之后格式乱了 lion411 发表于 2022-1-13 15:39
顶你,虽然我也看出来了,比你晚了一步
不是对齐问题,我粘贴过来之后格式乱了 补一个代码截图和运行结果 本帖最后由 junjie0927 于 2022-1-13 16:04 编辑
price =
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):
if index < (len(list)-1):
index = index + 1
print(list,'满足')
judge(list)
print(list, '满足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次执行的函数也等着抛出结果。
>>11.504425 满足 #第1次index = 0,执行judge(list), print(list,'满足'), 遇到第2重judge(list),index = index + 1 = 1
>>1.769912 满足 #第2重index = 1,执行第2重judge(list), print(list,'满足'), 遇到第3重judge(list),index = index + 1 = 2
>>9.734513 满足 #第3重index = 2,执行第3重judge(list), print(list,'满足'), 遇到第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, '满足2'),第3重judge(list)结束
>>9.734513 满足2 #第2重judge(list)继续执行,print(list, '满足2'),第2重judge(list)结束
>>9.734513 满足2 #第1次judge(list)继续执行,print(list, '满足2'),第1次judge(list)结束
junjie0927 发表于 2022-1-13 15:50
price =
accu = 0.005
谢谢你!第一次发帖,不会这样发{:1_907:}