Python蓝桥等考六级之三:if语句与浮点数比较运算总结


  if语句基本结构

 

 

 

 

 

 

 

 

 

 

 

 多分支结构中的else块是可选的,请看下面的无else块的多分支结构。

 

 

  例程序和结果:

 

 

  if语句嵌套

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

  多分支结构优化

 

 

 

 

 

 

 

 

  单级嵌套不“优化”关系不大,但如果是多级嵌套另当别论。假如增加一个选项,题目改为:完成八个任务以上获得劳动英雄称号,完成六到八个任务获得劳动之星称号,……。

  多级嵌套代码:

 

  多分支结构代码:

 

  事实上并不见得多分支结构代码有多“优”,只是它们的应用情景不一样而已。请看下面的代码:

 

  结论:if代码块之间不存在关联,可以使用嵌套或多分支结构,否则最好用嵌套结构。

 

  浮点数比较运算总结

 

  我们知道,计算机是用二进制记录数据的,那么小数点后第一位是1/2,第二位是1/4,第三位是1/8,如此类推,因此用二进制表示的小数转为分数之后,它的分母一定是以2为底的幂。例如

二进制数0.11010011

=1/2+1/4+0/8+1/16+0/32+0/64+1/128+1/256

=1/256×(128+64+16+2+1)

=211/256。

  但分数中除了分母是以2为底的幂的分数外,还有其它大量的分数,也就是说浮点数只能准确表示小部分小数,大部分小数只是一个近似值。以一个近似值作为比较基准必然会产生误判的情况,所以浮点数比较运算只适合具体问题具体分析,不像整数一样比较运算适合任何情况。

  在具体的情景中,例如短跑的时间秒数,记录到小数后第二位,即精确度是0.01,那么我们可以认为变化幅度在0.001的浮点数是同一个小数。现假设a和b是精确度c的两个小数,那么它们可以按下面的表格进行比较运算。

对应运算符

功能描述

实现方法

>

大于

a>b+c/10

<

小于

a<b-c/10

>=

大于等于

a>b-c/10

<=

小于等于

b<b+c/10

==

等于

a>b-c/10 and a<b+c/10

!=

不等于

a<b-c/10 or a>b+c/10

  太麻烦了,有没有简单一点的办法啊?当然有,转为整数后再进行比较运算:

int(a/c)  比较运算符  int(b/c)。

 

  练习题

 

  第一题:

 

 

  第二题:

 

 

  第三题:

 

 

  第四题:

  学校开运动会,100米的校记录是11.56秒,现在输入的5个运动员成绩,设计一个程序判断是否破记录。使用浮点数比较和整数比较两种方法。

例:

输入数据:

12.32

11.59

11.54

11.54

11.52

程序输出:

不破纪录

不破纪录

破纪录

不破纪录

破纪录