本文的主要内容是 Python 的条件和循环语句以及与它们相关的部分. 我们会深入探讨if, while, for以及与他们相搭配的else,elif,break,continue和pass语句.

本文地址:http://www.cnblogs.com/archimedes/p/python-loop.html,转载请注明源地址。

1.if语句

Python 中的if子句看起来十分熟悉. 它由三部分组成: 关键字本身, 用于判断结果真假的条件表达式, 以及当表达式为真或者非零时执行的代码块.
if 语句的语法如下:
if expression:
  expr_true_suite
if 语句的 expr_true_suite代码块只有在条件表达式的结果的布尔值为真时才执行, 否则将继续执行紧跟在该代码块后面的语句.

(1)多重条件表达式

单个if语句可以通过使用布尔操作符and,or和not实现多重判断条件或是否定判断条件.

if not warn and (system_load >= 10):
print "WARNING: losing resources"
warn += 1 

(2)单一语句的代码块

如果一个复合语句(例如 if 子句, while 或 for 循环)的代码块仅仅包含一行代码, 那么它可以和前面的语句写在同一行上:
if make_hard_copy: send_data_to_printer()

尽管它可能方便, 但这样会使得代码更难阅读, 所以我们推荐将这行代码移到下一行并合理地缩进.

2.else语句

Python提供了与if语句搭配使用的else语句.如果if语句的条件表达式的结果布尔值为假,那么程序将执行else语句后的代码.它的语法你甚至可以猜到:

if expression:
  expr_true_suite
else:
  expr_false_suite

if passwd == user.passwd: ret_str = "password accepted" id = user.id valid = True
else: ret_str = "invalid password entered... try again!" valid = False 

3.elif(即else-if)语句

elif是Python的else-if语句,它检查多个表达式是否为真, 并在为真时执行特定代码块中的代码. 和else一样, elif声明是可选的, 然而不同的是: if语句后最多只能有一个else语句, 但可以有任意数量的elif语句.
if expression1:
  expr1_true_suite
elif expression2:
  expr2_true_suite
elif expressionN:
  exprN_true_suite
else:
  none_of_the_above_suite

4.条件表达式(即"三元操作符")

Python 2.5 集成的语法确定为: X if C else Y .

>>> x, y = 4, 3
>>> smaller = x if x < y else y
>>> smaller
3

5.while语句

Python的while是本章我们遇到的第一个循环语句. 事实它上是一个条件循环语句.与if声明相比,如果if后的条件为真, 就会执行一次相应的代码块. 而while中的代码块会一直循环执行, 直到循环条件不再为真.
while 循环的语法如下: 
while expression:
  suite_to_repeat

>>> x=1
>>> while x <=100:print xx+=10

6.for语句

Python提供给我们的另一个循环机制就是for语句. 它提供了Python中最强大的循环结构.它可以遍历序列成员, 可以用在列表解析和生成器表达式中,它会自动地调用迭代器的next()方法,捕获StopIteration异常并结束循环(所有这一切都是在内部发生的).和传统语言中的for语句不同, Python的for更像是 shell 或是脚本语言中的foreach循环.

for循环会访问一个可迭代对象(例如序列或是迭代器)中的所有元素, 并在所有条目都处理过后结束循环.它的语法如下:
for iter_var in iterable:
  suite_to_repeat

1.用于序列类型

>>> for c in 'names':print 'current letter: ', ccurrent letter:  n
current letter:  a
current letter:  m
current letter:  e
current letter:  s

迭代序列有三种基本方法:

1.通过序列项迭代:

>>> namelists = ['henry', 'john', 'steven']
>>> for eachName in namelists:print eachName, 'Lim'henry Lim
john Lim
steven Lim

2.通过序列索引迭代:

>>> namelists = ['henry', 'john', 'steven']
>>> for nameindex in range(len(namelists)):print 'Liu, ', namelists[nameindex]Liu,  henry
Liu,  john
Liu,  steven

3.使用项和索引迭代:

两全其美的办法是使用内建的 enumerate() 函数, 它是 Python 2.3 的新增内容. 代码如下:

>>> namelists = ['henry', 'john', 'steven']
>>> for i, eachLee in enumerate(namelists):print "%d %s Lee" % (i+1, eachLee)1 henry Lee
2 john Lee
3 steven Lee

2.用于迭代器类型

迭代器对象有一个 next() 方法,调用后返回下一个条目. 所有条目迭代完后, 迭代器引发一个 StopIteration 异常告诉程序循环结束. for 语句在内部调用 next() 并捕获异常.

3.range()内建函数

内建函数 range() 可以把类似 foreach 的 for 循环变成你更加熟悉的语句

Python 提供了两种不同的方法来调用range().完整语法要求提供两个或三个整数参数:
range(start, end, step =1)
range() 会返回一个包含所有k的列表,这里start <= k < end ,从start到end, k每次递增step. step不可以为零,否则将发生错误.

>>> range(2, 19, 3)
[2, 5, 8, 11, 14, 17] 

如果只给定两个参数,而省略step,step就使用默认值1.

>>> range(3, 7)
[3, 4, 5, 6]

range() 还有两种简略的语法格式:
range(end)
range(start, end)

4.xrange()内建函数

xrange()类似range(),不过当你有一个很大的范围列表时, xrange()可能更为适合, 因为它不会在内存里创建列表的完整拷贝. 它只被用在for循环中, 在for循环外使用它没有意义。同样地,你可以想到,它的性能远高出range(),因为它不生成整个列表。

5.与序列相关的内建函数

sorted(), reversed(), enumerate(), zip()

sorted() 和 zip() 返回一个序列(列表), 而另外两个函数 reversed() 和 enumerate() 返回迭代器(类似序列)

7.break语句

Python中的 break 语句可以结束当前循环然后跳转到下条语句, 类似 C 中的传统 break.常用在当某个外部条件被触发(一般通过if 语句检查),需要立即从循环中退出时break 语句可以用在 while 和 for 循环中.

8.continue语句

Python里的continue语句和其他高级语言中的传统continue并没有什么不同.它可以被用在while和for循环里.while循环是条件性的, 而for循环是迭代的, 所以continue 在开始下一次循环前要满足一些先决条件,否则循环会正常结束.

valid = False
count = 3
while count > 0: input = raw_input("enter password") # check for valid passwd for eachPasswd in passwdList: if input == eachPasswd: valid = True break if not valid: # (or valid == 0) print "invalid input" count -= 1 continue else: break 

这里例子结合使用了 while , for , if , break以及 continue ,用来验证用户输入. 用户有三次机会来输入正确的密码, 如果失败, 那么 valid变量将仍为一个布尔假(0 ), 然后我们可以采取必要的操作阻止用户猜测密码.

9.pass语句

Python提供了pass语句,它不做任何事情 - 即NOP,(No OPeration ,无操作)我们从汇编语言中借用这个概念.pass同样也可作为开发中的小技巧,标记你后来要完成的代码,例如这样:

def foo_func(): pass
#或是
if user_choice == 'do_calc': pass else: pass 

这样的代码结构在开发和调试时很有用, 因为编写代码的时候你可能要先把结构定下来,但你不希望它干扰其他已经完成的代码. 在不需要它做任何事情地方, 放一个pass 将是一个很好的主意.

10.迭代器和iter()函数

迭代器就是有一个 next() 方法的对象, 而不是通过索引来计数. 当你或是一个循环机制(例如 for 语句)需要下一个项时, 调用迭代器的 next()方法就可以获得它.条目全部取出后, 会引发一个 StopIteration 异常, 这并不表示错误发生, 只是告诉外部调用者, 迭代完成.

限制:不能向后移动, 不能回到开始, 也不能复制一个迭代器.

reversed() 内建函数将返回一个反序访问的迭代器. enumerate() 内建函数同样也返回迭代器. 另外两个新的内建函数,any()和all()

Python 还提供了一整个itertools模块,它包含各种有用的迭代器.

>>> tupe=(12,'2',45.45)
>>> i = iter(tupe)
>>> i.next()
12
>>> i.next()
'2'
>>> i.next()
45.45
>>> i.next()
Traceback (most recent call last):File "<pyshell#72>", line 1, in <module>i.next()
StopIteration

创建迭代器

对一个对象调用 iter() 就可以得到它的迭代器. 它的语法如下:
iter(obj)
iter(func, sentinel )
如果你传递一个参数给iter(),它会检查你传递的是不是一个序列,如果是,那么很简单:根据索引从0一直迭代到序列结束. 另一个创建迭代器的方法是使用类, 一个实现了__iter__()和next()方法的类可以作为迭代器使用.

如果是传递两个参数给iter(),它会重复地调用 func ,直到迭代器的下个值等于sentinel .

11.将某件事作为另一事件导入

从模块导入函数的时候,可以使用

import somemodule

或者

from somemodule import somefunction

或者

from somemodule import somefunction, anotherfunction, yetanotherfunction

或者

from somemodule import *

如果两个模块都有open函数,只需要使用第一种方式导入,然后像下面这样使用函数:

module1.open(...)

module2.open(...)

或者:可以在语句末尾增加一个as子句,在该子句后给出名字,或为整个模块提供别名:

>>> import math as foobar
>>> foobar.sqrt(4)
2.0
>>> #也可以为函数提供别名;
>>> from math import sqrt as foobar
>>> foobar(4)
2.0

这里所做的事情叫做序列解包--将多个值的序列解开,然后放到变量的序列中,更加形象一点的表达出来就是:

>>> values=1,2,3
>>> values
(1, 2, 3)
>>> x,y,z=values
>>> x
1
>>> y
2
>>> z
3

实战:求平均数

avg1.py

def main():sum=0.0num=0data=input("input data:")while data>=0:sum=sum+datanum=num+1data=input("input data:")print "average = ",sum/num
main()

改进1:建立一个数据文件,实现文件交互循环

def main():sum=0.0num=0infile=open("data.txt",'r')  #read file datafor line in infile.readlines():sum+=eval(line)num+=1print "average = ",sum/num
main()

改进2:分批次读入,不是一次性将整个文件的内容读入内存

def main():sum=0.0num=0infile=open("data.txt",'r')  #read file dataline=infile.readline();while line!="":sum+=eval(line)num+=1line=infile.readline()print "average = ",sum/num
main()

转载于:https://www.cnblogs.com/wuyudong/p/python-loop.html

Python基础(6)--条件、循环相关推荐

  1. python基础之条件循环语句

    前两篇说的是数据类型和数据运算,本篇来讲讲条件语句和循环语句. 0x00. 条件语句 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语 ...

  2. python基础:条件循环字符串

    1.完成完整的温度转换程序 while True:a=int(input("输入1进行摄氏度转换,2进行华氏度转换"))if a==1:ssd=float(input(" ...

  3. Python基础之条件判断

    Python基础之条件判断 一.环境介绍 二.条件判断介绍 三.if语句的使用 1.if的第一种使用方法 2.if的第二种使用方法 3.if的第三种使用方法 4.if的第四种使用方法 四.if判断的运 ...

  4. python教程循环语句,Python基础教程之循环语句(for、while和嵌套循环)

    循环可以用来重复执行某条语句,直到某个条件得到满足或遍历所有元素. 1 for循环 是for循环,可以把集合数据类型list.tuple.dict.set的元素遍历出来. (1)对list进行循环 c ...

  5. python while循环if_详解python基础之while循环及if判断

    wlile循环 while True表示永远为真,不管是什么条件都会向下执行,下面是写的一个例子. #!/usr/bin/env python age = 24 #给age赋一个值 while Tru ...

  6. 20190508——python基础(if...in...循环语句、while循环、两种循环对比)

    二.python基础(if...in...循环语句.while循环.两种循环对比) 1.for...in...循环语句 1)for循环:空房间 # 空房间的学名叫[元素](item),因为英文是ite ...

  7. Python基础------几种循环结构详解

    Python基础------几种循环结构详解 在所有的编程语言中,循环结构是必不可少了,Python也一样.在python主要有一下几种循环结构:for-in-.while.range()三种最为常见 ...

  8. 第四篇:python基础之条件和循环

    阅读目录 一.if语句 1.1 功能 1.2 语法 1.2.1:单分支,单重条件判断 1.2.2:单分支,多重条件判断 1.2.3:if+else 1.2.4:多分支if+elif+else 1.2. ...

  9. Python基础之遍历循环、条件循环、嵌套循环

    Python基础之程序控制结构(二) 文章目录 循环结构 一.遍历循环结构 1.遍历for循环的语法格式 2.range()函数用法 3.遍历循环扩展模式 4.遍历for循环的应用实例 二.条件循环 ...

  10. 带你学python基础:条件控制if与循环语句while、for 以及range函数

    一.什么是条件控制 条件控制用生活中的一个例子来说就是:当你去买车时,会有好多品牌,这个时候我们就需要做出选择,到底需要买哪个品牌的车,而在编程中,条件控制就是为了帮你做选择的. 用专业点的话来说,条 ...

最新文章

  1. reGeorg+Proxifier使用
  2. python OpenCV 绘图函数
  3. 《SAS编程与数据挖掘商业案例》学习笔记之十九
  4. Flash+XML 加载图片
  5. python文本进度条代码解释_python动态文本进度条的实例代码
  6. android生命周期_Android活动生命周期– 7个阶段和功能
  7. 启动FastDFS,安装nginx,整合fdfs与nginx,进行上传下载测试
  8. 多目标跟踪综述-Multiple Object Tracking: A Literature Review
  9. 以寡治众各个击破,超大文件分片上传之构建基于Vue.js3.0+Ant-desgin+Tornado6纯异步IO高效写入服务
  10. html列表自动无限循环滚动,js 无限循环垂直滚动列表
  11. mermaid与flowchart.js绘制流程图分支结构试验
  12. Oracle 19c升级路径与QA
  13. React-Navigation(二),goBack的使用(两级)
  14. STM32G030 低功耗
  15. REARGUARD Secure Keyword SearchUsing Trusted Hardware 论文详读
  16. 集思录封闭基金数据python爬取写入excel表
  17. html去图片平铺效果,css如何把图片平铺?
  18. HTML5span中加入超链接,HTML中文本标签,超链接标签以及图像标签的简单介绍
  19. python编程——字符画
  20. 经纬度和球体三维坐标换算

热门文章

  1. Java笔记-JDK搭建WebService客户端其他调用方法
  2. Fiddler工具杂记-将某些数据收集起来并且发送HTTP数据包
  3. Python笔记-多线程爬虫实例
  4. 使用Spring Boot搭建HelloWorld Web页面(含HTTP协议分析)
  5. Linux学习笔记-匿名和命名管道读写的相同点及不同点
  6. Qt5.7+Opencv2.4.9人脸识别(一)项目介绍
  7. C/C++如何连接MySQL服务器以及简单加密
  8. C/C++ OpenCV方框滤波
  9. matlab调用c函数语言,MATLAB调用C/C++函数的方法
  10. java为学生s1的age属性_求解java程序,题目如下