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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【maven3学习之三】maven构建一个简单的Hello World

2019独角兽企业重金招聘Python工程师标准>>> 在写之前我先需要配置一下setting.xml。 首先是localRepository&#xff0c;默认情况下是【你的用户目录】/.m2/repository作为本地库的目录&#xff0c;但是我希望将其放在D:\maven_localRepository的目录下面。 如果…

全国计算机等级考试题库二级C操作题100套(第18套)

第18套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;将形参s所指字符串中的所有字母字符顺序前移&#xff0c;其他字符顺序后移&#xff0c;处理后新字符串的首地址作为函数值返回。 例如&#xff0c;s所指字符串为:asd123fgh543df,处理后新字符串为:asdfgh…

python营销骗局_python案例:金融营销活动中欺诈用户行为分析

首先&#xff0c;数据导入 1 importnumpy as np2 importpandas as pd3 from collections importCounter4 importmatplotlib.pyplot as plt5 from pymining importitemmining,assocrules,perftesting,seqmining6 importpyecharts as pe7 rtpd.read_csv(r"E:\transaction_tr…

java 重定向 https_使用简单身份验证从HTTP重定向到HTTPS

我希望得到一些关于如何使用带有ember-simple-auth的ember初始化程序将用户从HTTP重定向到HTTPS的建议 .import ENV from cio/config/environmentSSLInitializer name: sslbefore: simple-auth-cookie-storeinitialize: (container, application) ->application.deferReadin…

你真的会数钱吗?

本文已迁移至&#xff1a;http://thinkinside.tk/2013/01/01/money.html 快年底了&#xff0c;假如你们公司的美国总部给每个人发了一笔201212.21美元的特别奖金&#xff0c;作为程序员的你&#xff0c; 该如何把这笔钱收入囊中&#xff1f; Table of Contents 1 美元&#xff…

Maven 系统环境变量配置

Download http://maven.apache.org/download.cgi http://mirrors.shu.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.zip 环境变量 1.添加 MAVEN_HOME&#xff1a; 变量名&#xff1a;MAVEN_HOME  变量值&#xff1a;C:\Program\apache-maven-3.5.4 注…

全国计算机等级考试题库二级C操作题100套(第19套)

第19套&#xff1a; 程序通过定义学生结构体变量&#xff0c;存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数&#xff0c;在主函数中输出修改后的数据。 例如&#xff1a;a所指变量s中的学号…

eclipse中文乱码解决_解决git status显示中文文件名乱码问题

使用 git status 查看本地有改动但未提交的中文文件名时&#xff0c;发现会显示为一串数字&#xff0c;没有显示中文的文件名。具体如下所示&#xff1a;$ git status# 位于分支 master# 尚未暂存以备提交的变更:# (使用 "git add ..." 更新要提交的内容)# (使用 &qu…

MongoDB 3.X 用户权限控制

摘要&#xff1a; MongoDB 3.0 安全权限访问控制&#xff0c;在添加用户上面3.0版本和之前的版本有很大的区别&#xff0c;这里就说明下3.0的添加用户的方法。 环境、测试&#xff1a; 在安装MongoDB之后&#xff0c;先关闭auth认证&#xff0c;进入查看数据库&#xff0c;只有…

oracle和sql server取第一条记录的区别以及rownum详解

我们知道学生可能有重名的情况&#xff0c;那么当重名的时候假设只需要取得重名结果集中的第一条记录。 sql server:select top(1) num,Name from M_Student where name xy Oracle:select num,Name from M_Student where name xy and rownum < 1 对于rownum在oracle的使用…

全国计算机等级考试题库二级C操作题100套(第20套)

第20套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;计算形参x所指数组中N个数的平均值&#xff08;规定所有数均为正数&#xff09;,将所指数组中小于平均值的数据移至数组的前部&#xff0c;大于等于平均值的数据移至x所指数组的后部&#xff0c;平均值作…

java enum 变量_java枚举使用详解

package com.ljq.test;/*** 枚举用法详解** author jiqinlin**/public class TestEnum {/*** 普通枚举** author jiqinlin**/public enum ColorEnum {red, green, yellow, blue;}/*** 枚举像普通的类一样可以添加属性和方法&#xff0c;可以为它添加静态和非静态的属性或方法**…

c#小游戏_C#小游戏—钢铁侠VS太空侵略者

身为漫威迷&#xff0c;最近又把《钢铁侠》和《复仇者联盟》系列又重温了一遍&#xff0c;真的是印证了那句话&#xff1a;“读书百遍&#xff0c;其意自现”。看电影一个道理&#xff0c;每看一遍&#xff0c;都有不懂的感受~ 不知道大伙是不是也有同样的感受&#xff0c;对于…

输入年份月份判断是平年还是闰年及这个月有多少天

import java.util.Scanner;public class year {public static void main(String[] args) {System.out.println("请输入年份");Scanner sc new Scanner(System.in);int s sc.nextInt();System.out.println("请输入月份");Scanner sc1 new Scanner(System…

VMware Workstation 虚拟机性能优化指南

我们经常使用虚拟机来体验各种新系统&#xff0c;做各类新鲜应用的测试&#xff0c;由于VMware Workstation虚拟机功能强大&#xff0c;又适用于最新的 Windows / linux /Sun等平台&#xff0c;而且操作方便&#xff0c;所以其普及率很高&#xff01;而 VMware Workstation 本身…

全国计算机等级考试题库二级C操作题100套(第21套)

第21套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;计算形参x所指数组中N个数的平均值&#xff08;规定所有数均为正数&#xff09;,将所指数组中大于平均值的数据移至数组的前部&#xff0c;小于等于平 均值的数据移至x所指数组的后部&#xff0c;平均值…

pytorch已经安装成功了为什么不能使用import_使用auto keras的过程

成功安装的总结&#xff1a;1、创建环境名为mykeras、python版本为3.6的独立环境conda create --name mykeras python3.62、用pip安装 torch0.4.1&#xff08;一定要指定版本&#xff0c;否者安装auto keras时报错&#xff09;# Python 3.6 pip install https://download.pytor…

mysql5.0 php_php怎么连接mysql5.0?

PHP与MySQL的连接有三种API接口&#xff0c;分别是&#xff1a;PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) &#xff0c;下面针对以上三种连接方式做下总结&#xff0c;以备在不同场景下选出最优方案。PHP的MySQL扩展是设计开发允许php应用与MySQL数据库交互的早期扩…

Android----Google code android开源项目(四)

Google code android开源项目(四) 1. sparserss http://code.google.com/p/sparserss/ 一个简洁的android rss阅读器 2. desktopsms http://code.google.com/p/desktopsms/ 在电脑写短信 3. kraigsandroid http://code.google.com/p/kraigsandroid/ 创建者…

面试题之--实现取余

def quyu(shu,chushu):if shuchushu:print(余数是0)elif shu<chushu:print(余数是&#xff1a;%s%shu)elif chushu0:print(除数不能为0)else:for i in range(0,shu):if shu-i*chushu>chushu:i1elif shu-i*chushuchushu:print(余数是0)breakelif shu-i*chushu0:print(余数…