《树莓派Python编程指南》——3.3 控制程序流程

简介:

本节书摘来自华章计算机《树莓派Python编程指南》一书中的第3章,第3.3节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 控制程序流程

while循环是一种最简单的循环。只要结果是布尔类型的任何语句都可以做它的判断条件,它将会持续循环到条件为假。如果条件始终为真,它将一直循环下去。例如:


f1ec632acb544179ca7def2e647603384b8fc190

但愿你还记得第2章的循环体。在条件后面要加上冒号,接下来的一行要有缩进,所有缩进部分都属于循环体。要在Python解释器中运行这段代码,输入print语句之后要按回车键(Enter)。用退格键(backspace)删掉自动产生的tab(缩进),然后再按回车键。这是告诉Python循环体结束了,你需要执行这段代码。
这段代码会陷入死循环,按Ctrl+C组合键可以终止它。
无论判断条件选择的多么复杂都可以,只要它的返回值是真或假就可以了。但为了最终能够跳出循环,通常需要一个或多个变量以方便在循环内部改变判断条件。比如说,下面这个猜数字游戏中的主循环。

19e28d5935a086a37d0a47aacdac8ade2cd5a5c1

注意,如果输入非数字的字符,这个程序将报错。后面我们会介绍如何简单地修复这个问题,但让我们先来看一下另一种循环。
3.3.1 用循环遍历数据
for循环可以用来遍历数据,它在每次循环中对一个数据进行处理。通常我们在rang(x, y)的帮助下,遍历从x到y的每一个数据。例如,你可以得出一个12倍表:

0c6adc07e96a12bb57a8c2bfa24fce1cd6c5f57c

rang()还有一个参数,可以设定两个连续数字之间的间隔。例如我们把range(1,13)改成range(2,14,2),它将会只计算从2到14的所有偶数。我们还可以使用其他线性数据类型(包括字符串)和集合来控制for循环。下列例子都是合法的:

a4a08ef6ab84de4af33a25cea1d817a0f3d03066

最后一行是一个很好的例子,它展示了使用错误的数据类型会有什么结果。集合和其他类型有点不一样,因为它没有顺序,只是一堆数据的集合。下面两个例子的执行结果是一样的。

ec2e879039538770eef6ce163b69931ae3c531e3

字典有点特别,因为它保存的不是元素,而是键值对。for循环中可以使用它,但必须做些特殊处理:

<a href=https://yqfile.alicdn.com/10079f7bfd5c25f39ba1f0ddb18511482a833f8c.png" >

使用集合,你就不能控制循环中访问数据的顺序。实际上,如果你期望用for循环顺序访问数据,则需要使用线性数据结构,如列表或元组,而不是使用像集合或字典这样的无序数据结构。
3.3.2 深入理解循环嵌套
编程时经常需要同时遍历多种数据,比如下面这个用来找出1到30之间所有素数的程序。

0ceacc62390919cc9e19f61bc8c1d6218df90be5

请注意缩进级别,第一个循环体的缩进为一,第二个循环体的缩进为二。这一点非常重要,只有这样,Python才能理解哪个代码属于哪个循环体,以及每个循环体在何处结束。
使用嵌套时要注意,它可能会使程序变慢。上面的例子运行得很快,但如果你试图计算3000以内的素数(只需要在第一行的30后面加两个零),程序运行就会花非常长的时间。不只是因为外层循环要多循环上千次,每次走进内层循环也需要多执行很多次。你会发现整个程序运行起来很慢(如果你在做这个实验,记得按Ctrl+C组合键可以停止它)。幸运的是,我们还可以改进它。试一下这个程序:

fa1e5f1019d5f479e14e82084aea298e2bbb10a8

首先,使用range(1, 3000, 2)跳过所有的偶数。我们直接省去一半时间。其次,你可能注意到了,在if里面我们多加了一个break。这会让我们节约更多时间。我们是在计算素数,因此不用关心每个数的所有约数。一旦发现这个数字是非素数,就可以直接使用break跳出循环,继续执行下面一行(if is_prime:)。这两点优化可以使程序运行得更快。
3.3.3 使用if语句控制程序分支
不仅可以使用循环来不断执行某段代码,还可以使用分支来控制Python程序流,使其根据不同条件,执行不同的代码。分支由if语句实现。我们已经见过很多次if语句,现在来复习一下。if语句,像while循环一样,只需要一个布尔类型的条件。它后面还可以有附加语句如elif(else-if)和else语句。例如:

<a href=https://yqfile.alicdn.com/58a6c77e89153811a9560989849c4705cd1d600e.png" >

一个if语句最多只执行一段代码,只要Python发现条件为真,就执行该段代码并结束整个if语句。因此如果在上面的程序中输入10,它将只返回该数字可以被2整除,而不会试下该数字能否被5整除(如果你期望它试一下,就需要写一个新的if语句而不是用elif)。如果没有一个条件为真,则执行else后面的代码段。在其他例子中可以看到,if语句可以不带elif或else。如果没有else语句,同时判断条件也不成立,Python就会跳过if语句,不执行其中的任何代码。
3.3.4 捕获异常
如果你喜欢尝试,在前面的例子中试图输入过非数字的字符,就会发现程序会报错。这是因为Python不能把任意字符转换成数字,它不知道该怎么做了。此时,Python就会报出错误。目前为止,我们只是放任它这么做,然后,就会导致程序崩溃。
然而,如果你知道某段代码可能会报出异常,可以告诉Python,这样程序就知道遇到问题时该如何处理。可以参考下面代码:

<a href=https://yqfile.alicdn.com/adef065e4c533cf0d68f4c60eb936c538b53b3d3.png" >

你可以告诉Python要处理的错误类型,因为Python在异常时会输出错误类型。如:

553c01d613c2c4b334a1a8f26d23ba814d35155a

可以看到,这是个ValueError(值错误)。因此前一个例子可以改成:

<a href=https://yqfile.alicdn.com/cf9589737a8900cd441ba6d8de80d7c539886fc5.png" >


<a href=https://yqfile.alicdn.com/c505ea9cf361fd5e11492b721a5d12ddff1e9943.png" >

练习2
试着使用try语句来捕获由于用户输入错误导致的异常,修复本章开始的猜数字游戏。
相关文章
|
20天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
20天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
22天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
1月前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
63 3
|
1月前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
39 3
|
1月前
|
存储 人工智能 数据挖掘
Python编程入门:构建你的第一个程序
【10月更文挑战第22天】编程,这个听起来高深莫测的词汇,实际上就像搭积木一样简单有趣。本文将带你走进Python的世界,用最浅显的语言和实例,让你轻松掌握编写第一个Python程序的方法。无论你是编程新手还是希望了解Python的爱好者,这篇文章都将是你的理想起点。让我们一起开始这段奇妙的编程之旅吧!
26 3
|
2月前
|
人工智能 IDE 测试技术
使用通义灵码提升Python开发效率:从熟悉代码到实现需求的全流程体验
作为一名Python开发者,我最近开始使用通义灵码作为开发辅助工具。它显著提高了我的工作效率,特别是在理解和修改复杂代码逻辑方面。通过AI编码助手,我能够在短时间内快速上手新项目,实现新需求,并进行代码优化,整体效率提升了60%以上。通义灵码不仅加快了代码生成速度,还增强了代码的健壮性和稳定性。
|
2月前
|
IDE 开发工具 Python
Python 编程入门:打造你的第一个程序
【10月更文挑战第6天】编程,这个听起来高大上又充满神秘感的领域,其实就像学习骑自行车一样。一开始你可能会觉得难以掌握平衡,但一旦你学会了,就能自由地穿梭在广阔的道路上。本文将带你走进 Python 的世界,用最简单的方式让你体验编写代码的乐趣。不需要复杂的理论,我们将通过一个简单的例子——制作一个猜数字游戏,来实践学习。准备好了吗?让我们开始吧!
|
2月前
|
存储 JSON 安全
面向企业应用程序的 Python 配置管理
面向企业应用程序的 Python 配置管理
32 9
|
27天前
|
存储 机器学习/深度学习 搜索推荐
Python编程入门:从零开始构建你的第一个程序
【10月更文挑战第32天】本文旨在通过浅显易懂的方式引导编程新手进入Python的世界。我们将一起探索Python的基础语法,并通过实例学习如何构建一个简单的程序。文章将不直接展示代码,而是鼓励读者在阅读过程中自行尝试编写,以加深理解和记忆。无论你是编程初学者还是希望巩固基础知识的开发者,这篇文章都将是你的良师益友。让我们开始吧!