吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1070|回复: 21
收起左侧

[已解决] python条件判断中遇到的问题,百思不得其解

[复制链接]
土豆焗薯条 发表于 2022-1-13 14:39
本帖最后由 土豆焗薯条 于 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)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wslans 发表于 2022-1-13 15:26
第二个if和第二个else是不是没有对齐?
wslans 发表于 2022-1-13 15:28
肉眼可见的嵌套内的if对应的else前突了一个字符的位置
lion411 发表于 2022-1-13 15:39
wslans 发表于 2022-1-13 15:28
肉眼可见的嵌套内的if对应的else前突了一个字符的位置

顶你,虽然我也看出来了,比你晚了一步
markhoo911 发表于 2022-1-13 15:41
是不是缩进问题,你提问的时候,可以吧代码粘贴到编辑器,上面尖括号<>插入代码里面
这样格式就不会错乱了
 楼主| 土豆焗薯条 发表于 2022-1-13 15:42
wslans 发表于 2022-1-13 15:28
肉眼可见的嵌套内的if对应的else前突了一个字符的位置

不是对齐问题,我粘贴过来之后格式乱了
 楼主| 土豆焗薯条 发表于 2022-1-13 15:43
lion411 发表于 2022-1-13 15:39
顶你,虽然我也看出来了,比你晚了一步

不是对齐问题,我粘贴过来之后格式乱了
 楼主| 土豆焗薯条 发表于 2022-1-13 15:46
补一个代码截图和运行结果
微信截图_20220113154541.png
junjie0927 发表于 2022-1-13 15:50
本帖最后由 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)结束
 楼主| 土豆焗薯条 发表于 2022-1-13 15:53
junjie0927 发表于 2022-1-13 15:50
[mw_shl_code=python,true]price = [8.849558,11.504425,1.769912,9.734513]

accu = 0.005

谢谢你!第一次发帖,不会这样发
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表