python54-Python流程控制if分支的逻辑错误

对于if 分支,还有一个很容易出现的逻辑错误,这个逻辑错误并不属于语法问题,但引起错误的可能性更大。看下面程序。

# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time   : 2024/01
# @Author : Laopi
age = 50
if age >18:
    print('青年人')
elif age>40:
    print('中年人')
elif age>60:
    print('老年人')

从表面上看,上面的程序没有任何问题:人的年龄大于18岁是青年人,年龄大于40岁是中年人,年龄大于60岁是老年人。但运行上面程序,就会发现打印结果是:青年人。而实际上希望45岁应被判断为中年人-这显然出现了一个问题。

对于任何的if else语句,从表面上看,else 后没有任何条件,或者elif后只有一个条件,但这不是真相,因为else 的含义是“否则”,else本身就是一个条件。这也是把if,else 后的代码块统称为条件执行体的原因,else 的隐含条件是对前面条件取反。因此,上面代码实际上可改写为

age = 50
if age >18 and age<=40:
    print('青年人')
elif age>40 and age <=60:
    print('中年人')
elif age>60:
    print('老年人')

也可以更简洁写到下面这种

age = 50

if age>60:

print('老年人')

elif age>40:

print('中年人')

elif age>18:

print('青年人')

上面的程序其实暗含很多含义,如下:

age = 50

if age>60:

print('老年人')

#在原本的if条件中增加了else的隐含条件

elif age>40 and age<=60:

print('中年人')

#在原本的if条件中增加了else的隐含条件

elif age>18 and age<=60 and age<=40:

print('青年人')

上面程序的判断逻辑即转为如下三种情形。

1)age大于60岁,判断为“老年人”

2)age大于40岁,且age小于或等于60岁,判断为“中年人”

3)age大于18岁,且age小于或等于40岁,判断为“青年人”

上面的判断逻辑才是实际希望看到的。

因此,当使用ifelse 语句进行流程控制时,一定不要忽略了else所带的隐含条件。

如果每次都去计算if 条件和else 条件的交集也是一件非常烦的事情,为了避免出现上面的错误,在使用 if else 语句时有一条基本规则:总是优先把包含范围小的条件放在前面处理。对比age>60和age>18两个条件,明显age>60的范围更小,所以应该先处理age>60的情形。

小技巧:在使用 if else分支语句时,一定要先处理包含范围更小的情形。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件测试老痞

你的支持,是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值