热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简明Python3教程8.控制流

简介迄今为止我们见到的所有程序总是含有一连串语句并且python忠实的顺序执行它们。那么如何改变它们的执行顺序呢?例如你希望程序根据不同情况作出不同反应,按照当前时间分别

简介

迄今为止我们见到的所有程序总是含有一连串语句并且python忠实的顺序执行它们。

那么如何改变它们的执行顺序呢?例如你希望程序根据不同情况作出不同反应,按照当前时间分别

打印出’Good Morning’或’Good Evening’?

也许你已经猜到了,这需要使用控制流程语句,python拥有3种此类语句,分别为if,forwhile

 

if语句

if语句用来检查一个条件,如果条件为则执行一个语句块(被称作if),否则执行另一个语句块(被称作else)。

其中else分支是可选的。

范例:

#!/usr/bin/python

# Filename: if.py

number = 23

guess = int(input('Enter an integer : '))

if guess == number:

    print('Congratulations, you guessed it.') # 新块开始处

    print('(but you do not win any prizes!)') # 新块结束处

elif guess

    print('No, it is a little higher than that') # 另一个块

    # 你可以在一个块里做任何你想做的。。。

else:

    print('No, it is a little lower than that')

    # 只有guess > number 才会执行到此处

print('Done')

# if语句执行完毕后,最后这条语句永远会被执行

输出:

    $ python if.py

    Enter an integer : 50

    No, it is a little lower than that

    Done

   

    $ python if.py

    Enter an integer : 22

    No, it is a little higher than that

    Done

   

    $ python if.py

    Enter an integer : 23

    Congratulations, you guessed it.

    (but you do not win any prizes!)

    Done

程序流程:

本程序将用户猜测的数对比被猜的数(注: 23)。

我们可以将被猜数定为任何整数。然后利用input()函数得到用户猜测的数。

函数只是可复用的程序片段,下章我们会学到更多关于函数的知识。

我们为内建input函数提供一个字符串,函数会将它打印到屏幕,一但我们输入了什么并按下回车,

input就会将输入当作一个字符串返回,之后利用int我们将其转换为一个整数并存入变量guess中。

实际上int是一个类,现在你只需知道它能将一个字符串转换为整数(假设字符串包含一个合法的文本

形式的整数)。

接下来我们比较用户猜测的数与被猜的数,如果它们相等我们就打印一个成功信息。注意我们

使用缩进告诉python语句分别属于哪些块,这就是为什么缩进对于python非常重要。

我也希望你能做到前文提到的”缩进一致性”规则,你可以吗?

同时也要注意到if语句的结尾包含一个分号 – 它指示python分号其后将跟随一个语句块。

紧接着我们检查猜测的数是否小于被猜数,如果是,则告诉用户猜测的数大了一些。

这里我们使用的是elif分支,事实上它把两个相关的if else-if else语句组合成一个if-elif-else语句。

这样做不仅使得程序更加简洁也降低了缩进数量。

同样,elifelse语句必须在逻辑行的结尾写上冒号,其后是与之对应的语句块(当然还要有相应的缩进)

最后你也可以在if语句中插入另一个if-block块,这叫做嵌套的if语句。

上面说过elif和else是可选的。一个最简单合法的if语句如下:

if True:

    print('Yes, it is true')

当python执行完if语句及其相关的elif和else分支,控制权会转移到包含此if语句的语句块的下一条语句。

本例中,这个块是主块,程序从此块开始执行,下一个条语句为print(‘Done’)

随后python看到程序的结尾并简单的结束运行。

尽管程序非常简单,我也指出了这个简单程序中你所有应该注意的地方。

这一切十分易懂(有C/C++背景更是如此),但在最初你还是要引起注意,等到用熟以后就会感到自然,顺手了。

C/C++程序员请注意

python没有switch语句,你可以使用if…elif…else语句达到同样的目的(有时用字典代替会更加快捷)。

 

while语句

只要条件为真,while语句允许你不断的重复执行语句块。

while语句是所谓循环语句的一个例子,它还可以拥有一个可选的else分支。

范例:

#!/usr/bin/python

# Filename: while.py

number = 23

running = True

while running:

    guess = int(input('Enter an integer : '))

    if guess == number:

        print('Congratulations, you guessed it.')

        running = False # this causes the while loop to stop

    elif guess

        print('No, it is a little higher than that.')

    else:

        print('No, it is a little lower than that.')

else:

    print('The while loop is over.')

    # Do anything else you want to do here

print('Done')

输出:

    $ python while.py

    Enter an integer : 50

    No, it is a little lower than that.

    Enter an integer : 22

    No, it is a little higher than that.

    Enter an integer : 23

    Congratulations, you guessed it.

    The while loop is over.

Done

工作流程

本例中我们继续玩猜数字游戏,不过更先进的是用户可以不断的猜直到猜对为止 – 如此就不会象

上一个范例那样用户每猜一次都运行一遍程序了。这正好可以恰当的示范while语句的使用。

我们将input和if语句移进while循环内,并在循环开始前将变量running设为True

最初我们检查变量running是否为True并进入while块执行之。while块执行完毕后继续检查条件,即running是否为真。

如果是则再次执行while块,否则可选的else块将被执行。完毕后再执行下一条语句。

只有while语句的条件为False时else才会被执行 – 就算条件第一次被检查时也是如此。

因此除非使用break跳出循环,否则while循环的else分支肯定会被执行。

TrueFalse被称为Boolean类型,你可以分别把它们看作是值1和0。

(注:只是”看作”而已,不要认为它们完全等于0和1)

写给C/C++程序员

记住,while循环可以拥有else分支

 

for循环

for…in是另一种循环语句,用来遍历序列对象,也就是说遍历序列中的每个元素。

至于序列对象,你现在只要记住序列只是元素的集合就可以了。

范例:

#!/usr/bin/python

# Filename: for.py

for i in range(1, 5):

    print(i)

else:

    print('The for loop is over')

输出

    $ python for.py

    1

    2

    3

    4

The for loop is over

执行流程

在这个程序中,我们打印了一个数字序列。而这个序列由内建range函数产生。

根据我们提供的两个数字,range返回一个开始于第一个数字而结束于第二个数的序列,例如

range(1, 5)产生序列[1, 2, 3, 4]。默认的range步长为1。如果我们传给它第三个数字,则相当于设置步长。

例如range(1, 5, 2)产生[1, 3]。记住range函数止步于我们提供的第2个数字,即不包含第2个数。

然后for循环对其进行迭代 – for i in range(1, 5)等价于for I in [1, 2, 3, 4]就象将序列中的每个数

字(或对象)一次一个的赋给i,而每次赋值都会执行一遍for语句块。本例中我们仅仅打印i的值。

记住,else部分同样是可选的,除非使用break语句跳出循环否则它总是在循环结束时执行一次。

还应记住,for…in可以工作于任何序列,这里我们使用的是内建函数range产生的数字列表,

但我们也可以使用任何种类的对象组成的任何种类的序列!后面的章节会有具体解释。

C/C++/Java/C#请注意

python的for循环完全不同于C/C++的for循环。

C#程序员应该已经注意到它类似于C#中的foreach循环。

而Java程序员也应该注意到了Java1.5的for(int i : IntArray)与之很相似。

如果你想实现C/C++中的for(int i = 0; i<5; i++),python中只需编写 for i in range(0, 5)

如你所见,python的for循环更简单,更富于表达力也更不容易出错。

 

break语句

break语句用于跳出循环,即停止循环语句的执行,即使循环条件还没有变为False或者序列的遍历尚未完成。

一个需要特别注意的地方是如果你使用break跳出for或while循环,那么相关的else块不会被执行。

范例

#!/usr/bin/python

# Filename: break.py

while True:

    s = (input('Enter something : '))

    if s == 'quit':

        break

    print('Length of the string is', len(s))

print('Done')

输出:

    $ python break.py

    Enter something : Programming is fun

    Length of the string is 18

    Enter something : When the work is done

Length of the string is 21

Enter something : if you wanna make your work also fun:

Length of the string is 37

Enter something :       use Python!

Length of the string is 12

Enter something : quit

Done

工作流程

这个程序不断的取得用户输入,并打印每次输入的长度。通过一个特殊条件判断用户

输入是否等于’quit’,如果是则使用break跳出循环,随后来到程序尾则程序终止。

而输入字符串的长度可以通过内建函数len得到。

记住for循环同样可以使用break语句。

 

Swaroop Poetic Python

我在范例中输入的是一首自赋的小诗,它的名字叫Swaroop's Poetic Python:

    Programming is fun

    When the work is done

    if you wanna make your work also fun:

        use Python!

(注: Swaroop是本文作者,不翻译了,各位用个人独有的悠悠情愫”淫”起来吧,啊。。。。啊。。。。)

 

continue语句

语句continue告诉python跳过当前循环语句块的剩余部分执行下次迭代。

范例:

#!/usr/bin/python

# Filename: continue.py

while True:

    s = input('Enter something : ')

    if s == 'quit':

        break

    if len(s) <3:

        print('Too small')

        continue

    print('Input is of sufficient length')

    # Do other kinds of processing here...

输出:

    $ python test.py

    Enter something : a

    Too small

    Enter something : 12

Too small

Enter something : abc

Input is of sufficient length

Enter something : quit

工作流程:

本例接收用户输入,只有当输入至少为3个字符长时才会进行处理。

因此我们使用内建len函数取得输入长度,当小于3时利用continue语句跳过程序的余下部分。

否则程序的余下部分会被执行,在这里可以进行我们希望做的任何种类的处理。

注意,continue语句同样能够配合for循环使用。

 

小结

我们已经知道如何使用python中的3个控制流语句了 - if, while, for及其相关的break, continue语句。

它们是python中常用的部分,因此有必要熟练掌握。

接下来,我们会看到如何创建和使用函数

 


推荐阅读
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 写在前面最近在学习爬虫,在熟悉了Python语言和BeautifulSoup4后打算下个爬虫框架试试。没想到啊,这坑太深了。。。看了看相关介绍后选择了Scrapy框架,然后兴高采烈的 ... [详细]
  • 这篇文章给大家分享的是有关python3怎样中文转换编码的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。示例:处理 ... [详细]
  • 浅谈Python3中打开文件的方式(With open)
    浅谈Python3中打开文件的方式(With open)-目录0.背景知识1.常规方式:读取文件-----open()2.推荐方式:读取文件-----WithOpen1).读取方式 ... [详细]
  • Python3怎么获取文件属性
    这篇文章给大家分享的是有关Python3怎么获取文件属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。os.stat(path ... [详细]
  • Python Flask学习之安装SQL,python3,Pycharm(网上下载安装即可)
    1,下载时更改pypi源。可以额外安装虚拟化环境:pipinstall-ihttp:pypi.douban.comsimple--trusted-hos ... [详细]
  • 环境准备—之—linux下安装python3和pip3
    转自上海悠悠https:www.cnblogs.comyoyoketangp10195102.html前言centos7自带有python,但是却是python2版本的 ... [详细]
  • python教程分享python人物视频背景替换实现虚拟空间穿梭
    引言近期网上这位卖蜂蜜的小伙鬼畜挺火的,大家质疑背景造假,这里我就带着大家实现“背景造假”(ps:原视频小伙是在真实场景拍摄的)准备工作在实现该功能之前,我 ... [详细]
author-avatar
紫竹林素食坊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有