《手把手陪您学Python》15——判断语句if

在上一篇《手把手陪您学Python》14——交互式输入中,我们了解了使用input()函数与计算机实现交互输入的方法,同时学习了如何使用PyCharm编写和运行程序。

另外,在上一篇的文末还给大家留了一道思考题,就是如何在提示内容显示完成后,换行让使用者进行输入。答案是不是很简单,只要在提示内容字符串的最后加上换行符“\n”就可以了。

从本篇开始,将与大家一起,在学习控制流语句的过程中,应用过去学习的知识,编写一些我们自己的小程序,让大家真正进入程序员的行列。

今天我们将要介绍的控制流语句是判断语句if,也可以叫做条件语句,都是一个意思。

一个典型的if语句结构如下所示:

if 判断条件:
    执行语句1
else:
    执行语句2

且不说这个规则的语法结构,其本身的含义就很好理解,翻译成自然语言就是:

如果判断条件为真,就执行语句1,否则(即判断条件为假)就执行语句2。

使用流程图来表示,更是一目了然:

 

这其中,关键词if是必须的,else是可以省略的。也就是当判断条件为真时执行语句,判断条件为假时什么也不执行。

关于if语句,还有如下几个知识点需要介绍:

1、判断条件:

只要输出结果是布尔值类型(也就是True或者False)的运算,都可以作为判断条件。比如我们之前学习的比较运算(>、>=、<、<=、==、!=)、成员运算(in、not in)、身份运算(is、not is)等,这其中最常用的又是比较运算。

由于在演示实例时,Jupyter Notebook的界面更加友好,在知识点的学习过程中,我们还是先使用Jupyter Notebook进行实例的演示,等到最后编写程序的时候,我们再使用PyCharm。(以后的文章中也会采取这样的方式。)

In [1]: if 2 > 1:   # 比较运算
            print("判断条件为真。")
        else:
            print("判断条件为假。")
Out[1]: 判断条件为真。
​
In [2]: if 1 in [2, 3, 4]:   # 成员运算
            print("判断条件为真。")
        else:
            print("判断条件为假。")
Out[2]: 判断条件为假。
​
In [3]: a = 257
        b = 257
        if a is b:   # 身份运算,为什么判断条件为假?请参考《手把手陪您学Python》13——运算
            print("判断条件为真。")
        else:
            print("判断条件为假。")
Out[3]: 判断条件为假。

如果需要同时对多个条件进行判断,还需要使用到逻辑运算(and、or、not)。

In [4]: if 2 > 1 and 3 < 2:   # 逻辑运算and
            print("判断条件为真。")
        else:
            print("判断条件为假。")
Out[4]: 判断条件为假。
​
In [5]: if 2 > 1 or 3 < 2:   # 逻辑运算or
            print("判断条件为真。")
        else:
            print("判断条件为假。")
Out[5]: 判断条件为真。
​
In [6]: if not 2 > 1:   # 逻辑运算not
            print("判断条件为真。")
        else:
            print("判断条件为假。")
Out[6]: 判断条件为假。
​
In [7]: if not 2 > 1 and 3 > 2 or (4 > 3 and 3 < 5):   # 混合逻辑运算
            print("判断条件为真。")
        else:
            print("判断条件为假。")
Out[7]: 判断条件为真。

另外,之前讲到过,0可以代表False,非0数字可以代表Ture,所以理论上以数字作为输出值的运算,都可以作为判断条件。只不过这样的判断条件没有任何意义,没有人这么写程序,完全可以用比较函数a == 0或者a != 0代替作为判断条件。

In [8]: if 2 * 3:   # 数字运算,只要结果不为零就为真,一般不这样设置判断条件
            print("判断条件为真。")
        else:
            print("判断条件为假。")
Out[8]: 判断条件为真。
​
In [9]: a = 2 * 3
        if a != 0:   # 使用a == 0或者a != 0,作为判断条件
            print("判断条件为真。")
        else:
            print("判断条件为假。")
Out[9]: 判断条件为真。

2、多条件判断

之前我们介绍的if...else..是一种典型的if语句结构,但常用的if语句结构中,还包括了elif这样一个判断条件标识符。而且还可以通过使用多个elif,实现多条件判断。其语句结构如下所示:

if 判断条件1:
    执行语句1
elif 判断条件2:
    执行语句2
elif 判断条件3:
    执行语句3
else:
    执行语句4

翻译成自然语言就是:

如果判断条件1为真,就执行语句1,否则就看判断条件2;如果判断条件2为真,就执行语句2,否则就看判断条件3;如果判断条件3为真,就执行语句3,否则就执行语句4。

在进行多条件判断时,else也是可以省略的。因为无论是在普通的if语句结构中,还是在这种多条件判断中,else都代表着“其它”情况。如果不想对“其它”情况执行任何语句,就可以进行省略。

 

 

多条件判断应用场景很多,我们最后要做的project就是一个多条件判断的实例。现在先用一个简单的实例进行说明。

In [10]: a = 3.5
         if a < 0:
             print("a为负数。")
         elif a % 2 == 0:
             print("a为偶数。")
         elif a % 2 == 1:
             print("a为奇数。")
         else:
             print("a不是正整数。")
Out[10]: a不是正整数。

3、语句嵌套

除了使用elif实现多条件判断外,还可以通过多个if语句嵌套的方式,实现多条件的判断。虽然叫做语句嵌套,但并不必把它理解为一个多么高深的技术,只不过就是某一判断条件下的执行语句本身就是一个if语句结构而已。这么理解的话,就更加方便大家日后的应用了,而不必想着如何去进行嵌套。

if 判断条件1:
    执行语句1
elif 判断条件2:
    执行语句2
        if 判断条件2-1:
            执行语句2-1
        elif 判断条件2-2:
            执行语句2-2
        else:
            执行语句2-3
else:
    执行语句3

虽然上面的语句结构看上去有点复杂,但换汤不换药,都是从if语句的基础结构衍生出来的。大家可以尝试将其翻译成自然语言,如果没有问题,那么就说明已经对if语句的含义完全掌握了。

最后,再将上面的例子用语句嵌套的方式表达一下,请大家注意其中的区别。

In [11]: a = 3.5
         if a < 0:
             print("a为负数")
         elif a > 0:
             if a % 2 == 0:
                 print("a为偶数。")
             elif a % 2 == 1:
                 print("a为奇数。")
             else:
                 print("a不是正整数")
         else:
             print("a为0。")
Out[11]: a不是正整数

4、语法格式:

掌握了if语句的含义,剩下的就是格式要求了。

因为我们之前学习的都是单行的代码,所以并没有太多的格式要求。但是到了控制流语句这里就不一样了,它们有着严格的符号、格式和缩进要求,否则就会报错。但说起来也很简单,只要注意两点就可以了。

一是在每一个关键词语句后都要有一个“:”(注意是英文冒号),也就是if、elif、else所在的语句行。

二是在每一个冒号后的执行语句,都要缩进,代表是下一层级的语句。一般用Tab键就可以直接实现缩进,Jupyter Notebook和PyCharm等软件也会在输入“:”后回车,自动完成缩进动作。如果在语句嵌套等情况下,存在多层级的语句结构,那么就要在上一层级的缩进位置再次缩进,程序一般也都能自动实现。

这种格式要求与显示方式,正是Python语言友好的体现。语句的层级结构通过缩进一目了然,非常易读。实现方式也非常简便,Tab一下就能搞定。

5、三元运算

《手把手陪您学Python》13——运算一文中,我们提到过三元运算,因为当时没有介绍if语句,所以省略的该部分内容。现在,有了上面的基础,就可以了解一下三元运算了。

三元运算其实就是简化的if...else...语句结构,只要把整个语句都写在同一行就可以了,语义上没有任何区别,也没有“:”、缩进等格式要求。唯一需要注意的是,三元运算是一个运算,其结果是要赋值给一个变量的,而这个值是通过if...else...语句结构和其中的表达式来计算的。

三元运算可以用如下结构来表示:

a = 表达式1 if 判断条件 else 表达式2

翻译成自然语言就是:

如果判断条件为真,a的值等于表达式1的结果,否则a的值等于表达式2的结果。

In [12]: a = 2
         b = "奇数" if a % 2 == 1 else "偶数"   # 这里的表达式是字符串
         print("a是{}。".format(b))
Out[12]: a是偶数。
​
In [13]: a = 2
         b = a * 2 if a < 2 == 1 else a ** 2   # 这里的表达式是算数运算
         print(b)
Out[13]: 4

以上就是有关判断语句if的知识点,下面我们将编写一个实例,使用的就是判断语句if,以及我们以前学过的知识。现在,大家可以先关闭Jupyter Notebook了,我们将使用PyCharm来编写这个程序。

今天,我们要编写的实例是我们非常熟悉的“石头剪刀布”游戏。游戏的整个过程就是我们上一篇讲到的完整的信息流执行过程,先是交互式输入,之后进行程序处理,最后输出结果。

输入部分就是由程序的使用者输入出拳的内容,石头、剪刀还是布。

程序处理包括两个部分,一是电脑随机出拳,二是电脑根据游戏规则,判断胜负。

输出部分就是游戏的胜负结果。

下面就把整个程序文本和PyCharm截屏一并展示给大家,其中对于程序语句的解释都使用注释进行了说明。

In [14]: import random   # 因为要使用随机函数,需要先导入随机函数库
 
         # 交互式输入过程,使用input()函数
         user = input("请输入您要出的拳(石头、剪刀、布):")
         
         # 使用choice()函数,实现在序列中随机选取一个元素,做为电脑出的拳
         computer = random.choice(['石头', '剪刀', '布'])
         
         # 以下是程序处理过程,直接按照游戏规则进行判断,根据判断结果进行输出
         
         # 把所有游戏者赢的情况列举出来,任何一种情况出现,就输出游戏者胜利
         if (user == '石头' and computer == '剪刀') or (user == '剪刀' and computer == '布') or (user == '布' and computer == '石头'):
             print("您出的是:{},电脑出的是:{}。恭喜,您赢了!".format(user, computer))
             
         # 打平的情况最容易描述,所以作为一个判断条件
         elif user == computer:
             print("您出的是:{},电脑出的是:{}。打平了!".format(user, computer))
             
         # 其它情况就是游戏者输的情况,因为描述比较复杂,放在其它情况里,就不用写很复杂的判断条件了
         else:
             print("您出的是:{},电脑出的是:{}。很遗憾,您输了!".format(user, computer))
             
Out[14]: 请输入您要出的拳(石头、剪刀、布):布
​
Out[15]: 您出的是:布,电脑出的是:石头。恭喜,您赢了!

从上面的截图中大家可以看到,程序的最上方有一段注释内容(使用三引号"""),描述了程序的一些基本信息。建议大家也可以这么去做,一是可以记录一下程序的内容,避免日后遗忘;二是可以通过这种记录,看到自己学习Python的历程。有些程序还可能会随着我们学习到的东西越来越多,写的越来越好、越来越简洁,这些都是我们不断成长的过程。

另外,在第20行程序的最后有一个“\”,这个符号是用来把较长的一行代码换行继续输入的标识符。如果不写“\”就会被程序认为是新的一行代码,无论是格式要求上,还是程序内容上,都有可能出错。

在PyCharm输入代码的过程中,会有很多便利性的提示。比如使用过的变量会提供补齐,格式错误或者语法错误都有相应的黄色波浪线或者红色波浪线提示。大家可以将鼠标移到提示处,就能够看到相关的建议或者提示内容了。PyCharm不但功能强大,连很多的细节都做的特别出色,这也是为什么推荐大家使用这款软件的原因了。

至此,我们就完成了第一个真正意义上的Python程序,大家可以多玩几把,享受一下自己的学习成果。

不过在游戏的过程中,大家是否也感觉到了一些不方便的地方?比如每次都要运行完一次程序才能玩,如果输入过程出错就会报错中断等等。

这些确实都是我们这个版本中的不足之处。不过没关系,目前才只是V1.0版本,在后面的学习中,我们不仅会完善这个版本的不足之处,还会不断丰富这个游戏的功能。利用下一篇将要介绍的while()函数,就可以实现游戏的连续运行,而不需要我们每次都手工运行了,敬请关注。

 

 


感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^

欢迎扫描下方二维码,关注“亦说Python”公众号,阅读《手把手陪您学Python》系列文章的其他篇目,或点击下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

《手把手陪您学Python》8——字符串的切片

《手把手陪您学Python》9——字符串的运算

《手把手陪您学Python》10——字符串的函数

《手把手陪您学Python》11——字符串的格式化输出

《手把手陪您学Python》12——数字

《手把手陪您学Python》13——运算

《手把手陪您学Python》14——交互式输入

For Fans:关注“亦说Python”公众号,回复“手15”,即可免费下载本篇文章所用示例语句。

亦说Python——Python爱好者的学习分享园地

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值