《从零开始PYTHON3》第七讲

人生是由无数个选择组成,每个选择都有不同的限定条件。现在来说人生有点早是吧:)不过事实的确是这样的。

程序也充满着选择,满足不同的条件,则运行不同的运算。这些对不同运算的选择,则被称为分支,或者叫“条件分支”。

在Python中,最简单的条件分支是这个样子(伪代码):

if 条件:
满足条件时执行的分支
条件不满足时,或者条件满足、执行完分支之后,会继续从这里开始执行

用真实的代码来看个例子:

#当a的值大于3的时候,显示a的值
if a > 3:
print(a)

以上是if分支最简单的形式,完整的if分支使用伪代码表示是这样:

if 条件一:
条件一满足时执行
elif 条件二:
条件二满足(条件一不满足)时执行
elif 条件三:
条件三满足(条件一、二不满足)时执行
...
else:
所有分支条件均不满足时执行

在其它的编程语言中,if分支通常最多只处理两种分支条件,更多的分支要使用if语句的嵌套,或者switch等命令。在python中这些不同的处理方式都被合并到了if分支语句。其中主要的体现就是elif子句,elif实际是“else if"的缩写,这非常像if的嵌套使用,但又更简单易用。

if语句完整的语法包含很多个部分,elif只是其中的一个部分,所以叫“子句”。每个elif子句对应一个分支条件和吻合条件后的分支。在一个if分支结构中,elif子句可以有很多个,这样就可以用于对应很多种不同的分支条件。但是最初的if和最后的else只能有一个。

除了伪代码,我们还可以用流程图来描述if语句的执行走向,从而加深印象:



相信你已经有了概念了。下面是一个真实代码的例子:

#条件分支示例
#作者:Andrew #输入
wallet=float(input("请输入钱包里的现金总数:")) if wallet > 1000.0:
print("今晚去吃大餐.")
elif wallet > 500.0:
print("简单吃一顿,然后去迪厅.")
elif wallet > 100.0:
print("去吃个快餐,然后看场电影.")
else:
print("回家看看有没有剩饭,然后看电视吧.")

上面程序中,首先请用户输入一个数字,代表钱包中的现金总数,然后使用float函数把输入变换为浮点数。使用float类型是因为,表达的是现金的总数,当然可能包含小数部分。如果不使用float函数,输入的数据默认是字符串类型,这个我们前面已经讲过了。

随后根据现金的数额,显示不同的提示。提示信息仅供娱乐,这里是为了说明if语句的基本使用方式。你主要需要理解的部分就是,这些不同信息,是根据不同的分支条件决定的。

在if语句中,真正控制程序走向的正是程序中所给出的条件,通常以条件表达式的方式存在。表达式的运算结果只有“真”、“假”两种形式。这是逻辑类型,或称bool(布尔)类型,属于数字类型的子类型,我们在第五章中讲过了。

我们当时还讲过,采用bool类型的原因之一是因为现代数学体系上完备的概念和体系。今天我们就在这个基础上再进一步讲述逻辑运算,或称bool(布尔)运算。


逻辑运算(布尔运算)

bool类型只有两个可能值,所以常见的bool运算方式也并不多,最常用的就是下面三种:

  • not 否定操作,比如下面两条语句,从逻辑上是相同的:

    if not 性别=="女":
    
    if 性别=="男":
  • and 逻辑“与”操作:and操作符两边的条件,必须都为真,结果才是“真”,否则结果是“假”,例如:

    if 性别=="男" and 16<年龄<25:
    #当性别为男,同时年龄在16到25岁之间(不包含16岁和25岁)时,执行
  • or 逻辑“或”操作:or操作符两边的条件,只要有一个是“真”,则结果就是“真”,全部为“假”,结果才是假,例如:

    if 年龄<=16 or 年龄>=25:
    print("条件不符")
    #当年龄小于等于16岁,或者大于等于25岁,则显示“条件不符“

条件判断本来挺好用,为什么学这么复杂的布尔运算呢?我们来看一个例子你就会理解了:

假设某个男篮选秀,教练组提出了录取的三个基本条件:

  • 男性
  • 年龄大于16岁,小于25岁
  • 身高超过2.1米

如果只使用逻辑判断,不使用逻辑运算表达式,我们可能得到这样的程序代码(伪代码):

if 性别=="男":
if 16<年龄<25: #注意这里使用了连续判断(if语句嵌套)
if 身高>2.1:
print("符合条件!")
else:
print("不符合条件!")
else:
print("不符合条件!")
else:
print("不符合条件!")

对比如果使用逻辑运算的代码:

if 性别=="男" and 16<年龄<25 and 身高>2.1:
print("条件符合!")
else:
print("条件不符合!")

使用逻辑运算的代码干净、清晰,不易出错。不过在初学的时候,你会感觉有点“烧脑”

从零开始学习PYTHON3讲义(七)条件分支和哥德巴赫猜想的更多相关文章

  1. 从零开始学习PYTHON3讲义(一)认识Python

    课程名称 从零开始PYTHON3 课程长度 15讲 适用年龄 15-20岁(初三-大一) 本讲名称 认识Python 时长 90分钟 教学内容分析 Python是时下最流行的计算机编程语言之一.本课程 ...

  2. 从零开始学习PYTHON3讲义(十三)记事本的升级版:网络记事本

    <从零开始PYTHON3>第十三讲 网络编程的火热和重要性这里就不多说了,我们直接来看看Python在互联网编程方面的表现. Python有很多网络编程的第三方扩展包,这里推荐一个我认为最 ...

  3. 从零开始学习PYTHON3讲义(五)while循环和棋盘麦粒问题

    <从零开始PYTHON3>第五讲 ​上一节课重点学习了字符串,并且传递了一个重要的理念,就是程序要对开发人员自己和用户都足够友好.在这个过程中,利用字符串给出充分.完整.准确的提示是非常重 ...

  4. 从零开始学习PYTHON3讲义(三)写第一个程序

    <从零开始PYTHON3>第三讲 本页面使用了公式插件,因博客主机过滤无法显示的表示抱歉,并建议至个人主页查看原文. ​ 我见过很多初学者,提到编程都有一种恐惧感,起源是感觉编程太难了.其 ...

  5. 从零开始学习PYTHON3讲义(十二)画一颗心送给你

    (内容需要,本讲使用了大量在线公式,如果因为转帖网站不支持公式无法显示的情况,欢迎访问原始博客.) <从零开始PYTHON3>第十二讲 上一节课我们主要讲解了数值计算和符号计算.数值计算的 ...

  6. 从零开始学习PYTHON3讲义(十)自己做一个“电子记事本”

    <从零开始PYTHON3>第十讲 截至上一讲,我们已经完成了Python语言的基本部分.我们用了三讲来讨论Python语言的控制结构,用了两讲来介绍Python的基本数据类型.可以说仅就语 ...

  7. 从零开始学习PYTHON3讲义(九)字典类型和插入排序

    <从零开始PYTHON3>第九讲 第六讲.上一讲我们都介绍了列表类型.列表类型是编程中最常用的一种类型,但也有挺明显的缺陷,比如: data = [5,22,34,12,87,67,3,4 ...

  8. 从零开始学习PYTHON3讲义(八)列表类型跟冒泡排序

    <从零开始PYTHON3>第八讲 ​前面我们见过了不少的小程序,也见过了不少不同类型的变量使用的方法.但目前我们涉及到的,还都是单个的变量和单个的立即数.以变量来说,目前我们见到的,基本都 ...

  9. 从零开始学习PYTHON3讲义(二)把Python当做计算器

    <从零开始PYTHON3>第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3.Windows则从开始菜单中去寻找ID ...

随机推荐

  1. Html5+CSS3之音视频播放

    一.视频播放控制 1.Html5支持的视频格式有.webm,.ogg,在Html5中播放视频所用的标签为<video controls="controls" src=&quo ...

  2. Android Studio 中 Live Templates 的使用

    Android Studio 中的 Live Templates 是什么? Live Templates 有什么用处? Live Templates 可以理解为:在你编码过程中,IDE自动生成的代码内 ...

  3. php json_encode与json_decode详解及实例

    通常情况下,json_decode()总是返回一个PHP对象,而不是数组.如果返回数组,需要添加true参数 如:json_decode($res,true) 一.json_encode() 该函数主 ...

  4. MVC5 Razor视图中不规范书写导致的编译问题

    今天碰到一个非常让人难以理解的问题,如图所示,但是我在代码中并没有找到缺失"}"的地方: 根据源文件提示有去 AppData\Local\Temp\Temporary ASP.NE ...

  5. Java_Object

    说一下java中的Object类. 1.Object: Object是java类库中的一个特殊类,也是所有类的父类. Object类定义了一些有用的方法,由于是根类,这些方法在其他类中都存在,一般是进 ...

  6. C++ struct结构体定义构造函数和析构函数,构造函数参数从VS2017平台转换到Qt5平台下构建出错,采用字符集转换函数将string类型转换为wstring,构建仍然出错!

    调试win硬件驱动,需要利用VS编译的win驱动构建自己的Qt5GUI程序: 其中部分win驱动源码如下 device_file::device_file(const std::string& ...

  7. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.e3mall.search.mapper.ItemMapper.getItemList

    java.lang.RuntimeException: org.apache.ibatis.binding.BindingException: Invalid bound statement (not ...

  8. VUE 出现Access to XMLHttpRequest at 'http://192.168.88.228/login/Login?phone=19939306484&password=111' from origin 'http://localhost:8080' has been blocked by CORS policy: The value of the 'Access-Contr

    报错如上图!!!!    解决办法首先打开 config -> index.js ,粘贴 如下图代码,'https://www.baidu.com'换成要访问的的api域名,注意只要域名就够了, ...

  9. css知识总结

    ---# 学习目标:> 1. 学会使用CSS选择器> 2. 熟记CSS样式和外观属性> 3. 熟练掌握CSS各种选择器> 4. 熟练掌握CSS各种选择器> 5. 熟练掌握 ...

  10. windows10下Kafka环境搭建

    内容小白,包含JDK+Zookeeper+Kafka三部分.JDK:1)   安装包:Java SE Development Kit 9.0.1      下载地址:http://www.oracle ...