![Python程序设计案例教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/975/40680975/b_40680975.jpg)
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 比较运算符
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/46_02.jpg?sign=1738822604-iRhWkEzRMOb0H7GU2lOpTtSRp4u8h3Xg-0-dc587914bc510d0207bcb90fdc3ec49d)
(续)
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/47_01.jpg?sign=1738822604-dEZrSPL0fC27CS3ez0LKGdFuB33WsE2D-0-266f4a6cd36f2b11c23cfc40af5e14e9)
例如:
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/47_02.jpg?sign=1738822604-MlQlqNwMfLylptwFmzJgJemkGQVikuXd-0-41c5e2d3b38e03086ecb185421f9bb88)
Python中比较运算符可以连用,如x<y<=z就相当于x<y and y<=z。
例如:
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/47_03.jpg?sign=1738822604-XdB5YbIpaisQcaMQjZHQFyOZrgdh9ghf-0-70dd25c15ed0f73134d8310e71a2f882)
2.逻辑运算符
高中数学中就涉及逻辑运算。例如,p为真命题,q为假命题,那么“p且q”为假,“p或q”为真,“非q”为真。Python中也有类似的逻辑运算和逻辑运算符。逻辑运算符可以用来操作任何类型的表达式,不管表达式是不是布尔型,同时,逻辑运算的结果不一定是布尔型,它可以是任意类型。常用的逻辑运算符如表2-7所示。
表2-7 逻辑运算符
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/47_04.jpg?sign=1738822604-AsD277JTzzCTE9nO5fbmJQyzHQJRSEEU-0-64caee8048a00ffb27073e4799ba2eb9)
逻辑运算符还有一个特点:惰性求值。所谓惰性求值也就是延迟求值,即在需要时才进行求值的计算方式。例如,表达式a and b,如果a为假,则不需要计算b是否为真,只有当a为真时,才需要计算b的值;同理,表达式a or b,如果a为真,则不需要计算b是否为真,只有当a为假时,才需要计算b的值。
例如:
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/48_01.jpg?sign=1738822604-kPlpOXnd9LPcPpMtK7GTIGWepX0Y10Nr-0-4f3b41179c8535739d369a17d3949666)
在编写复杂的条件表达式时,可充分利用惰性求值这个特点,合理安排不同条件的先后顺序,在一定程度上可以提高代码运行速度。
在Python中,逻辑运算符是有优先级的,逻辑运算符的优先级为not>and>or。
例如:
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/48_02.jpg?sign=1738822604-Zjoo4LbtyKBe0LyFxIsfVnPwSSQBzSCS-0-f5b61e8f9eb15fe6ebec5491ec63b64c)
表达式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中的一个,而且只执行两者中的一个。语法格式如下。
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/48_03.jpg?sign=1738822604-JNU22orMoAQuTSVgCQcqE0FmEv8eeWAr-0-bc4c33c4fff27bb6d75250d3f308b6c2)
【例2-2】 模拟用户登录功能。如果用户名为admin且登录密码为123456,则输出“登录成功!”,否则输出“登录失败”,请重新登录!。
分析:模拟用户登录,若用户输入的用户名、登录密码和初始用户名、登录密码相同则登录成功,否则登录失败。
代码如下。
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/48_04.jpg?sign=1738822604-ltAGE4zSavJ0zTybHRpqTqWYShVMYsTV-0-80f97028f51b7943f30a206a5791a7cf)
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/49_01.jpg?sign=1738822604-D4rZ9WKvfszF2mUO93rFpHari9o465HQ-0-ba4afe516db70c6b4718bb41b1472827)
【例2-3】 判断一个数是否是水仙花数。所谓水仙花数是指1个三位的十进制数,其各个位上数字的立方和等于该数本身。例如,153是水仙花数,因为153=13+53+33。
分析:在案例4中计算出一个三位自然数各个位上的数字,本例其实就是在案例4的基础上进行条件判断,若满足各个位上数字的立方和等于该数本身,则判定这是一个水仙花数,否则不是水仙花数。
代码如下。
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/49_02.jpg?sign=1738822604-I6DnxKfkQADqH8r4b3xMagH1BoyreXkI-0-4e366c5f3555417779129c234263c864)
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)左括号之后,右括号之前,不要加多余的空格。
例如:
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/49_03.jpg?sign=1738822604-24FVD0TJ5kV8AMvkE7tR2otYAGYBZCoy-0-5aac60b34b2e67ae571c5816e0a118cc)
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/50_01.jpg?sign=1738822604-ObL1tg6vRzJVqMt41NvoayFlVayfzFiA-0-5fe6bf2f9e6a7d181df93f7c9bb9581e)
2.2.3 案例实现
基本思路:通过input()函数让用户从控制台输入要判断的年份,并将年份强制转化成整型数值,然后进行条件判断。条件1是不能被100整除,且能被4整除;条件2是能被400整除。条件1和条件2满足其一就为闰年,因此条件1和条件2之间使用or逻辑运算符来连接,而条件1的内部是且的关系,使用and逻辑运算符连接。同时,判断能否整除需要用取余运算符和比较运算符,将组合好的条件表达式放在if语句中即可。
代码如下。
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/50_02.jpg?sign=1738822604-LTt40TS07zVLz2PJyqaqM04YAql03sEl-0-102c53fbc69a18d429aba9686a860511)
注意:在编写复杂表达式时,可使用圆括号来明确其中的优先级和逻辑以提高代码的可读性。