在Python中使用判断语句和循环的教程


Posted in Python onApril 25, 2015

条件判断

计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。

比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:

age = 20
if age >= 18:
  print 'your age is', age
  print 'adult'

根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做。

也可以给if添加一个else语句,意思是,如果if判断是False,不要执行if的内容,去把else执行了:

age = 3
if age >= 18:
  print 'your age is', age
  print 'adult'
else:
  print 'your age is', age
  print 'teenager'

注意不要少写了冒号:。

当然上面的判断是很粗略的,完全可以用elif做更细致的判断:

age = 3
if age >= 18:
  print 'adult'
elif age >= 6:
  print 'teenager'
else:
  print 'kid'

elif是else if的缩写,完全可以有多个elif,所以if语句的完整形式就是:

if <条件判断1>:
  <执行1>
elif <条件判断2>:
  <执行2>
elif <条件判断3>:
  <执行3>
else:
  <执行4>

if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else,所以,请测试并解释为什么下面的程序打印的是teenager:

age = 20
if age >= 6:
  print 'teenager'
elif age >= 18:
  print 'adult'
else:
  print 'kid'

if判断条件还可以简写,比如写:

if x:
  print 'True'

只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。
循环

Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,看例子:

names = ['Michael', 'Bob', 'Tracy']
for name in names:
  print name

执行这段代码,会依次打印names的每一个元素:

Michael
Bob
Tracy

所以for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句。

再比如我们想计算1-10的整数之和,可以用一个sum变量做累加:

sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
  sum = sum + x
print sum

如果要计算1-100的整数之和,从1写到100有点困难,幸好Python提供一个range()函数,可以生成一个整数序列,比如range(5)生成的序列是从0开始小于5的整数:

>>> range(5)
[0, 1, 2, 3, 4]

range(101)就可以生成0-100的整数序列,计算如下:

sum = 0
for x in range(101):
  sum = sum + x
print sum

请自行运行上述代码,看看结果是不是当年高斯同学心算出的5050。

第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。比如我们要计算100以内所有奇数之和,可以用while循环实现:

sum = 0
n = 99
while n > 0:
  sum = sum + n
  n = n - 2
print sum

在循环内部变量n不断自减,直到变为-1时,不再满足while条件,循环退出。
再议raw_input

最后看一个有问题的条件判断。很多同学会用raw_input()读取用户的输入,这样可以自己输入,程序运行得更有意思:

birth = raw_input('birth: ')
if birth < 2000:
  print '00前'
else:
  print '00后'

输入1982,结果却显示00后,这么简单的判断Python也能搞错?

当然不是Python的问题,在Python的交互式命令行下打印birth看看:

>>> birth
'1982'
>>> '1982' < 2000
False
>>> 1982 < 2000
True

原因找到了!原来从raw_input()读取的内容永远以字符串的形式返回,把字符串和整数比较就不会得到期待的结果,必须先用int()把字符串转换为我们想要的整型:

birth = int(raw_input('birth: '))

再次运行,就可以得到正确地结果。但是,如果输入abc呢?又会得到一个错误信息:

Traceback (most recent call last):
 ...
ValueError: invalid literal for int() with base 10: 'abc'

原来int()发现一个字符串并不是合法的数字时就会报错,程序就退出了。

如何检查并捕获程序运行期的错误呢?后面的错误和调试会讲到。
小结

条件判断可以让计算机自己做选择,Python的if...elif...else很灵活。

循环是让计算机做重复任务的有效的方法,有些时候,如果代码写得有问题,会让程序陷入“死循环”,也就是永远循环下去。这时可以用Ctrl+C退出程序,或者强制结束Python进程。

请试写一个死循环程序。

Python 相关文章推荐
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
浅谈python类属性的访问、设置和删除方法
Jul 25 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
python数据结构之链表详解
Sep 12 Python
python 通过logging写入日志到文件和控制台的实例
Apr 28 Python
Python一行代码实现快速排序的方法
Apr 30 Python
利用Python库Scapy解析pcap文件的方法
Jul 23 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
解决pytorch读取自制数据集出现过的问题
May 31 Python
python操作xlsx格式文件并读取
Jun 02 Python
详解Python中列表和元祖的使用方法
Apr 25 #Python
详解Python当中的字符串和编码
Apr 25 #Python
详细解析Python当中的数据类型和变量
Apr 25 #Python
Python最基本的输入输出详解
Apr 25 #Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 #Python
介绍Python的Django框架中的静态资源管理器django-pipeline
Apr 25 #Python
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 #Python
You might like
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
php事件驱动化设计详解
2016/11/10 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
php中and 和 &amp;&amp;出坑指南
2018/07/13 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
Python标准库之Sys模块使用详解
2015/05/23 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
创建索引时需要注意的事项
2013/05/13 面试题
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
放假通知格式
2015/04/14 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers