介绍一些Python的基本的东西,你会发现,Python真的很简单。我也尽可能说得简单一些,因为我理解的也很简单。

在到目前为止我们所见到的程序中,总是有一系列的语句,Python忠实地按照它们的顺序执行它们。如果你想要改变语句流的执行顺序,该怎么办呢?例如,你想要让程序做一些决定,根据不同的情况做不同的事情,例如根据时间打印“早上好”或者“晚上好”。

你可能已经猜到了,这是通过控制流语句实现的。在Python中有三种控制流语句——if、for和while。

今天先来说说Python的控制流。

if语句

最简单的流控制语句是 if语句。if语句在一个布尔表达式计算为 True时执行一个程序语句块。if语句支持一个可选的 else子句,指示当布尔表达式计算为 False时应该处理的程序语句块。

if语句的基本语法

if(expression one):

# Action to take if expression one evaluates True

else:

# Action to take if all expression one evaluates False

如果您使用过其他编程语言,那么该语法看起来可能既熟悉又陌生。相似之处在于 if语句的一般格式、名称、用于确定如何分支语句执行流的表达式的计算,以及用于处理当表达式计算为 False时的情况的 else子句。但是有两个方面是完全特定于 Python的:带有冒号字符的 if和else语句的终止,以及 if和 else块中语句的缩进。正如所提到的,这两个特征是 Python中流控制语句所必需的。

下面的例子是一个简单的 if/else条件测试一个给定的数字是奇数还是偶数,并打印出结果。

一个简单的 if语句例子

>>>i=8

>>>if(i%2):

...print"Odd Number guangzhoushenbo.com"

...else:

...print"Even Number"

...

Even Number

一个似乎有些混乱的地方是 if语句后面每一行前面的三个点(...)。当键入 if语句和终止的冒号,并按键盘上的回车键时,Python解释器就知道您输入了一个复合语句。因此,它就将提示符从三个大于符号(>>>)改为三个点(...)。因为 Python需要缩进以错开当表达式计算为 True或 False时应该执行的语句块,所以两个 print语句都缩进了 4个空格。

if语句(以及本文后面讨论的 elif子句和 while循环)中的表达式可以很复杂。它可以包括多个使用 Python中支持的不同关系运算符的子表达式。而子表达式又可使用 and、or和 not 逻辑运算符组合起来。本系列的第一篇文章“探索 Python(1): Python的内置数值类型”,包含更多关于布尔表达式和 Python中不同关系和逻辑运算符的信息。

至此,已经看到了 if语句可以如何用于根据一个特定布尔表达式的值,来执行两个程序语句块中的其中一个。然而在有些情况下,可能需要更多的选择。幸运的是,Python提供了 if语句的一个简单扩展。提供的解决方案非常简单:给 else子句添加一个额外的 if语句。结果是一个else if语句,简写为 elif,如下所示。

使用 elif语句

>>>i=-8

>>>if(i>0):

...print"Positive Integer"

...elif(i<0):

...print"Negative Integer"

...else:

...print"Zero"

...

Negative Integer

本例只包含一个 elif语句,而实际中可根据程序需要包含任意多个。尽管它不是最优的解决方案,但是多个 elif语句可以用于模拟其他一些语言中的 switch case语句。

while循环

Python中的第二种流控制语句是 while循环,它在一个表达式计算为 True时执行一个程序语句块。while循环与 if语句一样,支持一个可选的 else子句,其中包含一个当表达式计算为 False时执行的程序语句块。但是对于 while循环,这意味着在循环终止后,else子句中的代码被执行一次(参见清单 7中的伪代码)。

清单 7. while循环的伪代码

while(expression):

# statements to execute while loop expression is True

else:

# statements to execute when loop expression is False

理解了 if语句之后,while循环理解起来就相当简单了。但是一定要知道,循环一直要执行到表达式计算为 False。这意味着循环体中执行的程序语句必须要改变表达式的值,否则循环将无法结束。如下所示。

while循环的一个简单例子

>>>i=0;x=10

>>>while(x>0):

...i+=1;x-=1

...else:

...printi,x

...

100

该例演示了几件事情。首先,它在一行中组合了变量初始化和变量修改:在本例中是 i和 x变量。其次,分别使用缩写形式的运算符 +=和 -=来递增 i的值和递减 x的值。在本例中,循环开始时 x的值为 10。每通过一次循环,x的值就递减 1。最后,x的值为 0,此时循环退出,并执行 else子句中的代码,打印出两个变量的值。

while循环(与本文后面介绍的 for循环一样)支持三种附加语句:

  • continue

  • break

  • pass

continue和 break语句分别用于在 while循环中继续下一次循环或中断循环。这两个语句通常放在 if语句体中,以便由一个特殊的条件触发 continue或 break操作。break语句的一个特殊特性是,它完全中断循环,并跳转到循环下面的任一个 else子句。

pass语句什么都不做。它用作一个占位符,即在需要一个语句,但是程序逻辑不需要操作时使用。下面的例子中中演示了这三种语句。

使用 continue、break和 pass语句

>>>i=1

>>>while(i<1000):

...i*=5

...if(i%25):

...continue

...ifnot(i%125):

...break

...ifnot(i%1000):

...pass

...else:

...printi

...

>>>printi

125

这个虚构的例子一直循环到变量 i大于或等于 1,000。在循环中,将 i乘以 5,然后测试 i是否被 25整除。记住,您只在表达式为 True时执行 if语句体。该表达式在当变量 i不能被 25整除时计算为 True。(在 Python表达式中,非零数被计算为布尔值 True。)

循环体中的下一个语句是第二个 if语句,它测试变量 i是否能被 125整除,但是该表达式前面加了一个 not运算符。因此,当变量 i的值能被 125整除时执行第二个 if语句体。此时,break语句导致程序执行中断 while循环,跳转到 else子句。

最后一个 if语句永远不会执行,只是用于演示如何在程序中编写 pass语句。在后续文章中,将会介绍 pass语句更相关的一些情况。

通过跟踪程序的逻辑流可以看到,第一次通过循环后,变量 i的值变为 5。第一个 if语句计算为 True,因为 5不能被 25整除。这就会第二次进入 while循环,这次变量 i变成了 25。现在第一个 if语句计算为 False,因为 25能被 25整除。第二个和第三个 if语句也计算为False,意味着第三次进入循环。这次变量 i变成了 125,并且第一个 if语句计算为 False。

但是第二个 if语句计算为 True,因为变量 i能被 125整除(并且 not运算符将结果 0转换成布尔值 True)。这导致执行 break语句,中断循环。else子句永远不被执行,所以直到显式使用 print语句之前不会输出任何东西。

for循环

Python中的 for循环很特殊,与 Python编程语言中内置的容器数据类型紧密相关。当您在现实生活中有一个容器对象(比如书包)时,您通常想要看它所包含的东西。在编写 Python程序时也是这样的。当需要对某件事情做一定的次数时(就像针对容器中的每一项一样),可使用for循环。下例中的伪代码格式演示了 for循环。

for循环的伪代码

foritem incontainer:

# action to repeat for each item in the container

else:

# action to take once we have finished the loop.

由于 Python容器类型的丰富特性,for循环非常强大。本质上,for循环涉及到一个迭代器(iterator),用于在集合中逐项移动。本系列的下一篇文章将更加详细地介绍 for循环,以及如何正确地将它与不同容器类型一起使用。

小结

本文介绍了三种 Python程序语句:if语句、while循环和 for循环。这三种语句通过选择执行哪些语句,或者通过多次执行一组语句,让您可以改变程序流。在实际编程中将大量用到这些语句。复合语句的特性引入了 Python程序中的适当缩进特性,这使得 Python程序易于读和理解。

Python基础之控制流的更多相关文章

  1. Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程

    [保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...

  2. python基础——继承实现的原理

    python基础--继承实现的原理 1 继承顺序 class A(object): def test(self): print('from A') class B(A): def test(self) ...

  3. python基础语法及知识点总结

    本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...

  4. python基础语法(一)

    Python的特点 1. 简单 Python是一种代表简单思想的语言. 2. 易学 Python有极其简单的语法. 3. 免费.开源 Python是FLOSS(自由/开放源码软件)之一. 4. 高层语 ...

  5. Python基础语法(转)

    作者:Peter 出处:http://www.cnblogs.com/Peter-Zhang/   Python 基础语法(一) Python的特点 1. 简单 Python是一种代表简单思想的语言. ...

  6. Python 基础语法_Python脚本文件结构

    目录 目录 前言 软件环境 Python Script文件结构 导入模块的流程 Python的包package 最后 前言 Python基础语法这一章,主要记录了Python的文件结构.逻辑运算符.算 ...

  7. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  8. python基础全部知识点整理,超级全(20万字+)

    目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...

  9. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

随机推荐

  1. React-异步组件及withRouter路由方法的使用

    所有组件的代码都打包在bundle.js里,加载首页的时候,把其它页面的代码也加载了,影响首页加载速度.我们希望访问首页的时候只加载首页,访问详情页的时候再去加载详情页的代码.异步组件可以帮我们实现, ...

  2. .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上

    转帖:https://blog.csdn.net/WPwalter/article/details/78067293 另参考:https://www.cnblogs.com/worksguo/arch ...

  3. EZ 2018 06 02 NOIP2018 模拟赛(十七)

    这次的比赛是真心比较狗,我TM的写了30min的树剖ZZ地直接memset超时了 话说我既然想到差分就应该去写差分的啊! 好了不过这次Rank还挺高的,终于要打进前10了当然是假的了. 好了下面开始讲 ...

  4. Ubuntu 打包后安装提示:子进程 已安装 pre-removal 脚本 返回了错误号 1

    子进程 已安装 pre-removal 脚本 返回了错误号 1或2 与 子进程 已安装 post-installation 脚本 返回了错误号 1或2   一.子进程 已安装 pre-removal  ...

  5. [JSOI2016]轻重路径[树链剖分]

    题意 题目链接 分析 先对原树树剖,在一次删点操作后从根节点开始二分,如果一条边从重边变成轻边,必然有 \(size_u\le \frac{1}{2}size_{rt}\) (取等号是特判对应儿子消失 ...

  6. ElasticSearch5.5.1插件分类

    ElasticSearch5.5.1插件分类 附官网介绍:https://www.elastic.co/guide/en/elasticsearch/plugins/5.5/intro.html 一. ...

  7. 基于Nginx+Keepalived的LB服务监控(邮件报警)

    IDC两台机器上部署了Nginx+Keepalived主从模式的LB代理负载层,现在需要对LB进行每日巡检和服务监控,利用SendEmail邮件监控. 0)SendEmail部署 参考:http:// ...

  8. PHP从入门到精通(二)

     PHP从入门到精通 之PHP中的函数 各位开发者朋友大家好,自上次更新PHP的相关知识,得到了大家的广泛支持.PHP的火爆程度不言而喻,函数作为PHP中极为重要的部分,应诸位的支持,博主继续跟进更新 ...

  9. 第二次作业 对VC++6.0编译软件的评价

    首先这个软件伴随着我们很长时间了,它是我们一上大学最先接触的,也是应用相当多的一个软件,其实在最初的时候,我对编译软件的理解非常有限,觉得它能实现一个代码的功能十分神奇的一件事情,虽然彼时我们写的代码 ...

  10. 【Beta阶段】第六次Scrum Meeting!

    每日任务内容: 本次会议为第六次Scrum Meeting会议~ 由于本次会议项目经理召开时间为9:30,在公寓1楼会客室召开,召开时长约30分钟,探讨了本次取得的重大突破后需要继续开展的工作. 队员 ...