3.2 多重条件判断

我们来介绍继续介绍复杂些的条件判断语句。

我们朝着预定的目标再次前进。这次准备再次区分优秀,所谓优秀,就是指大于等于90分。先试着按照最直观的汉字方式写出来:

对应的Python代码是:

grade = int(input())
if grade >= 90:
    print('优秀')
if grade >= 60 and grade < 90:
    print('及格')
if grade < 60:
    print('不及格')

这个应该不难理解。其中最为复杂的就是中间那个判断条件,大家应该能猜的出来,是的,and就表示并且的意思,只有两个条件都满足才表示为真,即条件满足。

不过,代码显得很麻烦,而且刚才那个问题依然存在,也就是,如果已经判断为优秀,剩下的就不用再判断了。先写成汉字版本:

再次使用else写成Python代码:

grade = int(input())
if grade >= 90:
    print('优秀')
else:
    if grade >= 60 and grade < 90:
        print('及格')
    if grade < 60:
        print('不及格')

虽然嵌套有点复杂,但是大家一定要保证代码良好的缩进格式,这种代码的对齐不仅可以表达准确的嵌套结构,同时也有助于我们看清程序的结构,防止潜在的错误。

同样我们再次将else里面的那个第二个条件也变成else:

grade = int(input())
if grade >= 90:
    print('优秀')
else:
    if grade >= 60 and grade < 90:
        print('及格')
    else:
        if grade < 60:
            print('不及格')

这种写法虽然缩进略显复杂,但是整体代码运行效果很高,任何情况只要有一个条件判断通过,就不再进行下面的其他判断了。

能不能把代码简化呢?我们大胆的将else:和下面的if连成一个elif,看看效果:

代码为:

grade = int(input())
if grade >= 90:
    print('优秀')
elif grade >= 60 and grade < 90:
    print('及格')
elif grade < 60:
    print('不及格')

完全可以,效果一样,代码即保证了较高的执行效率,同时在排版上也很清楚。这其实构成了多重条件判断,也就是说,通过多个elif,可以继续增加更多条件的判断,这里是三重,继续增加条件,四重五重都可以,这在很多代码判断中用途很广。

按照这个思路,我们写出了完整的代码:

grade = int(input())
if grade >= 90:
    print('优秀')
elif grade >= 80 and grade < 90:
    print('良')
elif grade >= 70 and grade < 80:
    print('中')
elif grade >= 60 and grade < 70:
    print('及格')
elif grade < 60:
    print('不及格')

正如前文所说,编写出代码往往难度并不很大,但是要想调试成功保证不出错,那就需要经验和能力了。这段代码有没有问题呢?

如果我们输入101或者-1会怎么样?

 

虽然程序似乎还能正常输出,但是我们此时输入的成绩明显有问题,正确的程序反映应该予以提示,而不是仍然显示对应的等级。

进一步修改,加入的必要的验证,这是目前我们写出的最终代码:

grade = int(input())
if grade >= 90 and grade <= 100:
    print('优秀')
elif grade >= 80 and grade < 90:
    print('良')
elif grade >= 70 and grade < 80:
    print('中')
elif grade >= 60 and grade < 70:
    print('及格')
elif grade >= 0 and grade < 60:
    print('不及格')
else:
    print('错误的成绩输入')

最后,我们对判断条件再次说明两个常见的问题:

第一,虽然一般都是使用一些诸如大于、等于之类的逻辑判断和诸如并且、或者之类的条件运算符来表达这些条件,但是正如前文所说,Python的真假布尔类型其实是整数,因此只要条件结果不为0,就是表示为真,即条件满足。

观察下面的代码输出:

grade = int(input())
if grade:
    print(grade)

你会发现如果你输入0,没有输出,但是你输入其他任何数值,都会显示输入的数值。

原因就在于此,grade为0表示条件不满足,自然没有输出。

第二,对于浮点数,大家在进行比较时,不能简单判断相等不相等。

num = 1 / 3
if num == 0.33333333333333:
    print('OK')

按照更多人的理解,两种表示就是一个数值。但是你会发现可能系统会认为不相等,而没有任何输出。原因也好理解,因为Python默认的浮点数精度更高,确实比条件中的那个小数还有更多的小数位3,显然更大一些。事实上,在绝大多数64位电脑上你输入0.3333333333333333(16个3)来替换上述的小数,你会发现Python认为条件满足了。

这显然依赖于电脑对浮点数表达的精度。

因此,更为合理的浮点数判断应该通过一种差值范围来进行:

num = 1 / 3
if abs(num - 0.3333) <= 0.0001:
    print('OK')

输出为:OK。这里abs表示绝对值函数,可以保证数值变化具有上下误差范围。

配套学习资源、慕课视频:

Python大数据分析-李树青icon-default.png?t=M1FBhttps://www.njcie.com/python/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

leeshuqing

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值