2.2 案例5:判断一个给定年份是否为闰年
2.2.1 案例描述
输入一个年份,判断该年份是否为闰年。
分析:有这样一句俗语“四年一闰,百年不闰,四百年再闰”。闰年分为普通闰年和世纪闰年,普通闰年是指年份不能被100整除且是4的倍数,如2004年就是普通闰年;世纪闰年是指年份能被400整除,如1900年不是世纪闰年,因为1900年虽然是整百数,但1900不能被400整除,而2000年是世纪闰年,因为2000能被400整除。也就是说,判断是否为闰年需要满足两个条件中的任一个。条件1是不能被100整除,且能被4整除;条件2是能被400整除。只学习算术运算符还不够,还需要学习比较运算符和逻辑运算符才能完成本案例的编写,本节就来学习这两种运算符及简单的if条件判断语句。
2.2.2 相关知识
2.2.2.1 比较运算符和逻辑运算符
1.比较运算符
比较运算符也称关系运算符,用于对常量、变量或表达式的结果进行大小比较。如果这种比较是成立的,则返回True(真),否则返回False(假)。比较运算符的运算结果非真即假,因此比较运算符经常用在条件判断中。Python中的比较运算符如表2-6所示。
表2-6 比较运算符
(续)
例如:
Python中比较运算符可以连用,如x<y<=z就相当于x<y and y<=z。
例如:
2.逻辑运算符
高中数学中就涉及逻辑运算。例如,p为真命题,q为假命题,那么“p且q”为假,“p或q”为真,“非q”为真。Python中也有类似的逻辑运算和逻辑运算符。逻辑运算符可以用来操作任何类型的表达式,不管表达式是不是布尔型,同时,逻辑运算的结果不一定是布尔型,它可以是任意类型。常用的逻辑运算符如表2-7所示。
表2-7 逻辑运算符
逻辑运算符还有一个特点:惰性求值。所谓惰性求值也就是延迟求值,即在需要时才进行求值的计算方式。例如,表达式a and b,如果a为假,则不需要计算b是否为真,只有当a为真时,才需要计算b的值;同理,表达式a or b,如果a为真,则不需要计算b是否为真,只有当a为假时,才需要计算b的值。
例如:
在编写复杂的条件表达式时,可充分利用惰性求值这个特点,合理安排不同条件的先后顺序,在一定程度上可以提高代码运行速度。
在Python中,逻辑运算符是有优先级的,逻辑运算符的优先级为not>and>or。
例如:
表达式1的运行结果为20。计算过程为:首先计算逻辑与,10 and 20中10为真,因此10 and 20的结果为20,然后再计算20 or 5,20为真,所以最后结果为20。
表达式2的运行结果为5。计算过程为:首先计算逻辑非,not 10的结果为False,False and 20的结果为False,False or 5的结果为5,所以最后结果为5。
2.2.2.2 简单的if语句
选择结构是程序根据条件判断结果而选择不同执行路径的一种方式。if双分支结构是最常用的选择语句。双分支结构就是有两个分支,当程序执行到if…else…语句时,一定会执行if或else中的一个,而且只执行两者中的一个。语法格式如下。
【例2-2】 模拟用户登录功能。如果用户名为admin且登录密码为123456,则输出“登录成功!”,否则输出“登录失败”,请重新登录!。
分析:模拟用户登录,若用户输入的用户名、登录密码和初始用户名、登录密码相同则登录成功,否则登录失败。
代码如下。
【例2-3】 判断一个数是否是水仙花数。所谓水仙花数是指1个三位的十进制数,其各个位上数字的立方和等于该数本身。例如,153是水仙花数,因为153=13+53+33。
分析:在案例4中计算出一个三位自然数各个位上的数字,本例其实就是在案例4的基础上进行条件判断,若满足各个位上数字的立方和等于该数本身,则判定这是一个水仙花数,否则不是水仙花数。
代码如下。
2.2.2.3 Python语言的编码规范
1.标识符和关键字
标识符是开发人员在编程时自定义的一些符号和名称,用于给变量、常量、函数、语句块、类等命名。标识符由字母、数字和下画线组成,且长度不限。标识符的命名必须遵循一定的命名规则,具体如下。
1)标识符由字母、数字和下画线组成,且不能以数字开头。
2)Python中的标识符是大小写敏感的。例如,Num和num是不同的标识符。
3)Python中的关键字是不能作为标识符的,否则会引起语法错误(SyntaxError异常)。
每种语言都有相应的关键字,Python也不例外,那什么是关键字呢?Python中一些具有特殊功能的标识符就是关键字,如前面讲过的print、input、help等。
注意:方法名、函数名、普通变量名在命名时,一般采用全部小写字母,并且以下画线分隔单词的形式命名,如max_num、num_1。
2.和运算符相关的编码规范
1)在二元运算符两边各空一个空格。
2)左括号之后,右括号之前,不要加多余的空格。
例如:
2.2.3 案例实现
基本思路:通过input()函数让用户从控制台输入要判断的年份,并将年份强制转化成整型数值,然后进行条件判断。条件1是不能被100整除,且能被4整除;条件2是能被400整除。条件1和条件2满足其一就为闰年,因此条件1和条件2之间使用or逻辑运算符来连接,而条件1的内部是且的关系,使用and逻辑运算符连接。同时,判断能否整除需要用取余运算符和比较运算符,将组合好的条件表达式放在if语句中即可。
代码如下。
注意:在编写复杂表达式时,可使用圆括号来明确其中的优先级和逻辑以提高代码的可读性。