Python基础(6)--条件、循环
本文的主要内容是 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 x
x+=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: ', c current 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,'',45.45)
>>> i = iter(tupe)
>>> i.next()
12
>>> i.next()
''
>>> 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.0
num=0
data=input("input data:")
while data>=0:
sum=sum+data
num=num+1
data=input("input data:")
print "average = ",sum/num
main()
改进1:建立一个数据文件,实现文件交互循环
def main():
sum=0.0
num=0
infile=open("data.txt",'r') #read file data
for line in infile.readlines():
sum+=eval(line)
num+=1
print "average = ",sum/num
main()
改进2:分批次读入,不是一次性将整个文件的内容读入内存
def main():
sum=0.0
num=0
infile=open("data.txt",'r') #read file data
line=infile.readline();
while line!="":
sum+=eval(line)
num+=1
line=infile.readline()
print "average = ",sum/num
main()
Python基础(6)--条件、循环的更多相关文章
- python基础之条件循环语句
前两篇说的是数据类型和数据运算,本篇来讲讲条件语句和循环语句. 0x00. 条件语句 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语 ...
- python基础:条件循环字符串
一. 完成完整的温度转换程序 使用while True 循环,摄氏度转换为华氏度按1,华氏度转换成摄氏度按2,按其他数字退出循环. while True: a = int(input('摄氏度转换为华 ...
- Python基础【while循环】
Python基础[while循环] 1.while循环: 格式 while 条件: ...... print(......) 注意,在while语句也可以嵌套else,但是else不执行循环,执行后直 ...
- python基础之条件控制与循环
Python3 条件控制 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户 ...
- Python基础之条件和循环
阅读目录 一.if语句 1.1功能 1.2语法 1.2.1:单分支,单重条件判断 1.2.2:单分支,多重条件判断 1.2.3:if + else 1.2.4:多分支if + elif +else 1 ...
- Python基础:条件判断与循环的两个要点
一.条件判断: Python中,条件判断用if语句实现,多个条件判断时用if...elif实现:看下面一段程序 #python 3.3.5 #test if...elif age = 20 if ag ...
- Python基础之条件语句和循环
条件语句 Python中的条件语句分为 if ...else . if ...elif...else 以及if ...else 的嵌套使用: username = input('请输入您的用户名:' ...
- python基础知识--条件判断和循环
一.输入输出 python怎么来接收用户输入呢,使用input函数,python2中使用raw_input,接收的是一个字符串,输出呢,第一个程序已经写的使用print,代码入下: 1 name=in ...
- Python基础——for/while循环
Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ 上学期间,常常遇到这样的情景:为了惩罚学生,老师会说:"XXX,你先去操场上跑10圈再回来继续反省.&qu ...
- Python基础入门-For循环
For循环的功能比较强大,他可以帮助我们实现很多重复性的工作.而且for循环能迭代不同的数据结构.他的应用也十分的广泛,作为初学者,我们需要对循环的概念多加理解和练习.接下来我们就来学习for循环的一 ...
随机推荐
- Android View绘制过程
Android的View绘制是从根节点(Activity是DecorView)开始,他是一个自上而下的过程.View的绘制经历三个过程:Measure.Layout.Draw.基本流程如下图: per ...
- 【cs229-Lecture15】奇异值分解
PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的. 内容: PCA (主成份分析)是一种直接的降维方法,通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降 ...
- [转]Visual Studio技巧之打造拥有自己标识的代码模板
可能经过很多博客的介绍,大家都知道代码段的使用,使用代码段可以很方便地生成一些常用的代码格式,确实对我们开发很方便.在团队开发中或者在某些情况下我们经常可能还会希望使用Visual Studio生成的 ...
- 设计师必备!免费下载 PSD 素材的32个网站
今天我想和大家分享一组可以免费下载 PSD 图形素材的最好的网站. PSD 文件是非常有用的资源,因为你可以看到所有的层,使用了什么技术来创建出这些作品和效果. 某些列出的网站可能已是众所周知的,但你 ...
- android基础---->JSON数据的解析
上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...
- statpot:使用mongo+bootstrap+highcharts做统计报表
最近做了一个统计项目,这个统计项目大致的需求是统计接口的访问速度.客户端会调用一个接口来记录接口的访问情况,我的需求就需要分析这些数据,然后做出个统计报表. 需求实现 最初的时候想着每天把这些接口访问 ...
- [Latex]生成Vertical Timeline
Vertical TimeLine 用Latex生成一个竖直的VerticalTimeline的想法来源于今天翻看王老师的教师寄语,有感于学院走过的操作系统实验的艰辛之路,遂产生了写一个"小 ...
- RequireJS 模块化加载框架使用
RequireJS 是一个遵循 AMD 规范的模块化加载框架 与上文seajs一样,这里简单介绍其相关用法 同样的,首先是下载好 require.js --> http://requirejs. ...
- 从零开始,CentOS6安装ghost博客
买了个Bandwagon的VPS来科学上网的,寻思着空间还大顺便做个博客呗. 然后就安装了AMH面板,再搞了个wordpress博客玩玩. 接触到Ghost博客的时候,心血来潮想装一个. 然后就试着搞 ...
- Python入门笔记(21):Python函数(4):关于函数式编程的内建函数
一.关于函数式编程的内建函数 apply()逐渐被舍弃,这里不讨论 1.filter() #filter(func,seq) """纯Python描述filter函数&q ...