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

论坛 期权论坛 期权     
亦说Python   2019-7-28 23:29   3883   0
在上一篇《手把手陪您学Python》14——交互式输入中,我们了解了使用input()函数与计算机实现交互输入的方法,同时学习了如何使用PyCharm编写和运行程序。

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

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

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

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

  1. if 判断条件:
复制代码
  1.     执行语句1
复制代码
  1. else:
复制代码
  1.     执行语句2
复制代码
且不说这个规则的语法结构,其本身的含义就很好理解,翻译成自然语言就是:

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

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




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

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

1、判断条件:

只要输出结果是布尔值类型(也就是True或者False)的运算,都可以作为判断条件。比如我们之前学习的比较运算(>、>=、 1 and 3 < 2:   # 逻辑运算and[/code]
  1.             print("判断条件为真。")
复制代码
  1.         else:
复制代码
  1.             print("判断条件为假。")
复制代码
  1. Out[4]: 判断条件为假。
复制代码
  1. [/code][code] In[5]: if 2 > 1 or 3 < 2:   # 逻辑运算or
复制代码
  1.             print("判断条件为真。")
复制代码
  1.         else:
复制代码
  1.             print("判断条件为假。")
复制代码
  1. Out[5]: 判断条件为真。
复制代码
  1. [/code][code] In[6]: if not 2 > 1:   # 逻辑运算not
复制代码
  1.             print("判断条件为真。")
复制代码
  1.         else:
复制代码
  1.             print("判断条件为假。")
复制代码
  1. Out[6]: 判断条件为假。
复制代码
  1. [/code][code] In[7]: if not 2 > 1 and 3 > 2 or (4 > 3 and 3 < 5):   # 混合逻辑运算
复制代码
  1.             print("判断条件为真。")
复制代码
  1.         else:
复制代码
  1.             print("判断条件为假。")
复制代码
  1. Out[7]: 判断条件为真。
复制代码
另外,之前讲到过,0可以代表False,非0数字可以代表Ture,所以理论上以数字作为输出值的运算,都可以作为判断条件。只不过这样的判断条件没有任何意义,没有人这么写程序,完全可以用比较函数a == 0或者a != 0代替作为判断条件。

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

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

  1. if 判断条件1:
复制代码
  1.     执行语句1
复制代码
  1. elif 判断条件2:
复制代码
  1.     执行语句2
复制代码
  1. elif 判断条件3:
复制代码
  1.     执行语句3
复制代码
  1. else:
复制代码
  1.     执行语句4
复制代码
翻译成自然语言就是:

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

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




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

  1. In[10]: a = 3.5
复制代码
  1.          if a < 0:
复制代码
  1.              print("a为负数。")
复制代码
  1.          elif a % 2 == 0:
复制代码
  1.              print("a为偶数。")
复制代码
  1.          elif a % 2 == 1:
复制代码
  1.              print("a为奇数。")
复制代码
  1.          else:
复制代码
  1.              print("a不是正整数。")
复制代码
  1. Out[10]: a不是正整数。
复制代码
3、语句嵌套

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

  1. if 判断条件1:
复制代码
  1.     执行语句1
复制代码
  1. elif 判断条件2:
复制代码
  1.     执行语句2
复制代码
  1.         if 判断条件2-1:
复制代码
  1.             执行语句2-1
复制代码
  1.         elif 判断条件2-2:
复制代码
  1.             执行语句2-2
复制代码
  1.         else:
复制代码
  1.             执行语句2-3
复制代码
  1. else:
复制代码
  1.     执行语句3
复制代码
虽然上面的语句结构看上去有点复杂,但换汤不换药,都是从if语句的基础结构衍生出来的。大家可以尝试将其翻译成自然语言,如果没有问题,那么就说明已经对if语句的含义完全掌握了。

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

  1. In[11]: a = 3.5
复制代码
  1.          if a < 0:
复制代码
  1.              print("a为负数")
复制代码
  1.          elif a > 0:
复制代码
  1.              if a % 2 == 0:
复制代码
  1.                  print("a为偶数。")
复制代码
  1.              elif a % 2 == 1:
复制代码
  1.                  print("a为奇数。")
复制代码
  1.              else:
复制代码
  1.                  print("a不是正整数")
复制代码
  1.          else:
复制代码
  1.              print("a为0。")
复制代码
  1. 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的结果。

  1. In[12]: a = 2
复制代码
  1.          b = "奇数" if a % 2 == 1 else "偶数"   # 这里的表达式是字符串
复制代码
  1.          print("a是{}。".format(b))
复制代码
  1. Out[12]: a是偶数。
复制代码
  1. [/code][code] In[13]: a = 2
复制代码
  1.          b = a * 2 if a < 2 == 1 else a ** 2   # 这里的表达式是算数运算
复制代码
  1.          print(b)
复制代码
  1. Out[13]: 4
复制代码
以上就是有关判断语句if的知识点,下面我们将编写一个实例,使用的就是判断语句if,以及我们以前学过的知识。现在,大家可以先关闭Jupyter Notebook了,我们将使用PyCharm来编写这个程序。

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

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

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

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

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

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



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

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

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

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

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

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






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

要阅读《手把手陪您学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——交互式输入



ForFANS粉丝福利长按下方二维码,关注“亦说Python”。
回复“手15”,即可免费下载本篇文章所用示例语句。

欢迎关注“亦说Python”Python爱好者的学习分享园地



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:10
帖子:2
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP