python学习[第十三篇] 条件和循环

if语句

单一if 语句

if语句有三个部分构成,关键字if本身,判断结果真假的条件表达式,以及表达式为真或非0是执行的代码

if expression:

expr_true_suite

条件表达式可以是多重的 通过布尔操作符 and or not来实现

单一语句的if 代码块,如果if语句的执行代码只有一行,可以放在一行来写

if expresssion: expr_tru_suite

>>> if True: print True
...
True

else 语句

语法如下:

if expression:expr_true_suite
else:expr_false_suite

elf 语句

可以有多个elif ,但只能由一个if 一个else , 语法如下

if expression1:expr1_true_suite
elif expression2:expr2_true_suite
elif expression3:expr3_true_suite
....
elif expressionx:exprx_true_suite
else:none_of_above_suite

python 中switch/case语句实现方法

我们可以通过字典来实现,注意字典后的值不要加引号,对应方法应在字典前定义好。

def insert_met():print "this is insert_met"def delete_met():print "this is delete_met"def update_met():print "this is update_met"CMDs={"insert":insert_met,"delete":delete_met,"update":update_met}def choice(m):CMDs[m]()choice('insert')choice('update')choice('delete')

python中三元操作符的实现

X if C else Y

#推荐使用方法一
# 方法1 利用if else X if C else Y 

x=17
y=15
smaller= x if x<y else y#方法2 利用 布尔操作符

x=17
y=15
smaller=(x<y and [x] or [y] )[0]
smaller

while 语句

while 语法格式如下

while expression:suite_to_repeat

计数循环

提前定义一个变量然后修改变量的值 , 然后通过判断该变量的条件表达式进行循环

count = 0while count < 5 :print countcount +=1

无限循环

无限循环不一定是坏事,通常用于网络服务器无限等待客户端连接。也可以用于其它情况,但一定要定义好break 的情况.

while True:always_true_suite

for 语句

for语句可以遍序序列成员,可以用在列表解析和生成器表达式中,他会调用迭代器的next方法,捕获StopIteration异常并结束循环。

for语句格式如下:

for itervar in iterable:suite_to_repeat

for 语句用在序列类型

通过序列项迭代

namelist=['pzq1','pzq2','pzq3']for x in namelist:print x, 'shuaiqi boy'

通过序列索引迭代

namelist=['pzq1','pzq2','pzq3']for x in range(len(namelist)):print namelist[x], 'shuaiqi boy'

通过序列项和索引迭代

namelist=['pzq1','pzq2','pzq3']for x in range(len(namelist)):print  '%d %s shuaiqi boy' % (x,namelist[x])

用于迭代器类型

用for循环访问迭代器和访问序列的方法差不多,唯一的区别就是for语句会做一些额外的事情。迭代器对象中有一个next()方法,调用后返回下一个条目。索引条目迭代完后,迭代器引发一个StopIteration异常告诉程序循环结束,for语句在内部调用next()方法。

range内建函数

基本用法

range (start,end,step=1)

range(start,end)

range(end)

>>> range(0,10,2)
[0, 2, 4, 6, 8]
>>> range(0,10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

xrange()和range()功能一样,不过当有大范围的列表是,xrange()更合适,因为不生成整个列表。

与序列相关的内建函数

sorted() zip()

enumerted(seq) 返回enumerate迭代器

reversed(seq) 返回reversed迭代器

break continue pass

break 语句跳出当前循环然后进入下一跳语句

continue结束本次循环,进入下一次循环

pass语句 NOP No Operation .什么都不做

else 语句 与while和for

python中while和for也可以与else 一起使用

#while-else
while expression:suite_to_repeat
else:suite_for_else#for-else
for itervar in iterable:suite_to_repeat
else:suite_for_else# break 与else,break 跳出循环后不会执行else
>>> for x in range(0,5):
...     if x == 2 :
...         break
...     print x
... else:
...     print 'else'
...

迭代器

迭代器通俗来讲就是可以通过next()方法依次变量对象中元素的数据结构

如何迭代

通过next()方法来访问对象,不是通过索引。迭代器有一些限制,不能先后移动,不能回到开始,也不能赋值一个迭代器。

使用迭代器

常用的可迭代的python数据类型为 序列,字典和文件

迭代序列

>>> mytu = (123,'xyz')
>>> i=iter(mytu)
>>> i.next()
123
>>> i.next()
'xyz'
>>> i.next()
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration

标准的访问迭代器的方法

fetch = iter(seq)while True:try:i = fetch.next()except StopIteration:breakdo_something_to(i)例如:
>>> fetch=iter(range(0,5))
>>> while True:
...     try:
...         i = fetch.next()
...     except StopIteration:
...         break
...     print i
...
0
1
2
3
4

迭代字典

>>> x = { ('pzq','coder'):(1300,16500,0),
... ('pzq1','writer'):(1500,19990,0),
... ('pzq2','artist'):(2000,34000,0)}
>>> x
{('pzq', 'coder'): (1300, 16500, 0), ('pzq1', 'writer'): (1500, 19990, 0), ('pzq2', 'artist'): (2000, 34000, 0)}
# 此例中 键是元组,值也是元组。为一种复杂的数据类型
>>> for i in x:
...     print 'name is %s, Occupation is %s .' %(i)
...     print 'month salary is %d, annual salary is %d, discount is %d ' % x[i]
...
name is pzq, Occupation is coder .
month salary is 1300, annual salary is 16500, discount is 0
name is pzq1, Occupation is writer .
month salary is 1500, annual salary is 19990, discount is 0
name is pzq2, Occupation is artist .
month salary is 2000, annual salary is 34000, discount is 0

迭代文件

f = open('test.txt')
#print的时候结尾加了逗号,防止两次换行符的出现
for eachline in f:print eachline,

注意:不要在迭代可变对象的时候修改这个对象。

>>> myname=['pzq1','pzq2','pzq3','pzq4','pzq5']
>>> for i in range(len(myname)):
...     print i,myname[i]
...     del myname[i]
...
0 pzq1
1 pzq3
2 pzq5
3
Traceback (most recent call last):File "<stdin>", line 2, in <module>
IndexError: list index out of range

通过iter()方法可以创建迭代器,通过reversed()和 enumerate()方法可以创建reversed类型的迭代器和enumerate(index,value) 类型的迭代器

列表解析 python2.0加入

列表解析表达式如下

[ expr for iter_var in iterable ]

扩展列表解析表达式

[ expr for iter_var in iterable if cond_expr ]

函数式编程

map filter

map 对所有列表成员应用一个操作

filter 基于一个表达式对列表成员过滤

>>> seq = [ 10,22,11,23,45,11,34 ]>>> map(lambda x: x **2 ,seq  )
[100, 484, 121, 529, 2025, 121, 1156]
#[ expr for iter_var in iterable ]
>>> [ x**2 for x in seq ]
[100, 484, 121, 529, 2025, 121, 1156]>>> filter(lambda x: x%2 ,seq)
[11, 23, 45, 11]
#[ expr for iter_var in iterable if cond_expr ]
>>> [ x for x in seq if x%2 ]
[11, 23, 45, 11]>>> map(lambda x: x**2 ,filter(lambda y : y%2,seq ))
[121, 529, 2025, 121]
#[ expr for iter_var in iterable if cond_expr ]
>>> [ x**2 for x in seq if x%2 ]
[121, 529, 2025, 121]>>> [ (x,y) for x in range(0,5) for y in range(0,5) ]
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (1, 0), (1, 1), (1, 2), (1, 3), (1, 4),(2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4),(4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]

生成器表达式 python2.2加入

生成器表达式是列表解析的一个扩展,生成器是特定的函数,允许返回一个值,然后'暂停'代码的执行,稍后恢复。因为列表解析一个不足就是一次生成所有的数据,用以创建列表,如果数据量巨大,会对内存有很大影响。生成器表达式就是为了解决此问题。生成器表达式不返回一个字典,而是返回一个生成器,这个生成器在每次计算一个条目后,把这个条目yield出来。生成器采用了延迟计算,这与 range()和xrange()类似。

(expr for iter_var in iterable if cond_expr)

列表解析

[expr for iter_var in iterable if cond_expr]

f = open('c:/test.py','r')
#列表解析 获取总长度
sum([len(word) for line in f for word in line.strip()])
#生成器表达式获取长度,删除两边的[]
f.seek(0)
sum(len(word) for line in f for word in line.strip())
#os获取长度
import os
os.stat('c:/test.py').st_size#获取最长的一行的长度
#列表解析
maxlines = max([len(x.strip()) for x in open ('c:/test.py','r')])
#生成器表达式
maxlines = max(len(x.strip()) for x  in open('c:/test.py','r'))#
>>> rows=[1,2,3]
>>> def cols():
...     yield 15
...     yield 16
...     yield 17
...>>> products=((i,j) for i in rows for j in cols())
>>> type(products)
<type 'generator'>
>>> for pair in products:
...     print pair
...
(1, 15)
(1, 16)
(1, 17)
(2, 15)
(2, 16)
(2, 17)
(3, 15)
(3, 16)
(3, 17)
>>> type(pair)
<type 'tuple'>

### end

转载于:https://www.cnblogs.com/ryanpan/p/9355162.html

python学习[第十三篇] 条件和循环相关推荐

  1. Python学习笔记D2(条件与循环)

    Python学习笔记D2(条件与循环) 条件语句 if expression:(可以利用布尔操作符and,or,not) *****语句- elif:(else if) ***** 语句- else: ...

  2. python学习笔记(四)、条件、循环及其他语句

    1 再谈print和import 1.1 打印多个参数 print 能够同时打印多个表达式,并且能自定义分隔符.如下: print('a','b','c') --> a b c print('a ...

  3. Python基础学习(二)-条件,循环语句

    Python基础学习(二)-条件,循环语句     一,条件语句    1,if  else           if  判断条件:               执行语句...           e ...

  4. python学习历程-安装篇(一)

    python学习历程-安装篇 之前工作中数据量很少,每天也就是用excel发一下报表,函数已经足够应付工作内容,但心里一直渴望学习更深层次一点的数据分析(崇拜那些技术大神),网上看了很多有关数据分析挖 ...

  5. 猿编程python代码_程序猿编程课堂 Python学习之入门篇3:简单的数据类型

    1. 什么是数据类型? 我们知道编程就是编写程序解决某个问题,而任何能使用编程来解决的问题都是能够提取或者转换出相应的数据,只是数据的表达形式是不一样的,而这表达形式就是数据类型. 比如,数学中的数字 ...

  6. 程序猿编程课堂 Python学习之入门篇1:环境搭建与第一个程序

    前言: Python作为目前比较热门的编程语言,其简单和简洁的语法使它成为一种非常好的通用编程语言,它是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),并且随着版本的不断更新和 ...

  7. 王亟亟的Python学习之路(四)-循环,条件,Range,list和tuple

    转载请注明出处:王亟亟的大牛之路 这是本次Python学习历程的第4篇,之前的文章:传送门 这篇主要讲以下几个知识点 - 循环 - 条件语句 - range函数 - list - tuple 循环 P ...

  8. Python学习笔记五:条件循环

    文章目录 一.再谈print和import 1. 打印多个参数 2. 导入时重命名 二.赋值魔法 1. 序列解包 2. 链式赋值 3. 增强赋值 三.代码块:缩进的乐趣 四.条件和条件语句 1. 这正 ...

  9. Python基础(6)--条件、循环

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

最新文章

  1. 使用zerotier让异地设备组局域网
  2. Sub-process /usr/bin/dpkg returned an error code (1) 如何解决
  3. iOS音频播放(一):概述
  4. Facebook高管解读财报 加大对视频业务的投资
  5. javascript中变量的判断
  6. postman简单接口测试
  7. XCTF-MISC-新手区:give_you_flag
  8. 推荐第三方Oracle客户端查询工具
  9. 收藏 | YOLOX模型部署、优化及训练全过程
  10. 【英语学习】【WOTD】purview 释义/词源/示例
  11. mysql字段简索引_3万字总结,Mysql优化之精髓
  12. 让webstorm支持avalon语法自动补全
  13. 数学建模优化模型简单例题_数学建模案例分析--最优化方法建模7习题六
  14. 新托业模拟考试感言—了解一下参加过托业考试前辈们的经验01
  15. 关于里程碑图 2017.01
  16. UVA - 10827 Maximum sum on a torus
  17. 【First-order Methods】 5 Smoothness and Strong Convexity
  18. 计算机学硕报考院校人数,2020考研报考人数:这些学校人数过万!
  19. 精品分享:基于 SpringBoot + Vue 开发的云盘系统(含大文件断点续传剖析)
  20. C语言:pow()----计算x的y次方(次幂)

热门文章

  1. 《Windows游戏编程大师技巧》三、Windows高级编程
  2. IbatisNet注意点
  3. GNU/CPIO 学习小结
  4. vue项目代码改进(一)login组件
  5. OC Swift混编-Swift.h File not found
  6. 学界 | CVPR 2018颁布五大奖项,何恺明获年轻学者奖
  7. 真静态和伪静态的区别
  8. React Native中pointerEvent属性
  9. common-collections中Java反序列化漏洞导致的RCE原理分析
  10. 基于JQuery实现滚动到页面底端时自动加载更多信息