Python核心编程--学习笔记--8--条件与循环
本章讲述if、while、for以及与他们搭配的else、elif、break、continue、pass等语句。
1 if语句
语法:三部分——关键字if、条件表达式、代码块。(记住冒号)
if cond_expr:expr
1.1 多重条件表达式
条件表达式可以是一个由not、and、or连接起来的逻辑表达式。
1.2 单一语句的代码块
如果代码块只有一行,可以将三部分写在一行,不推荐这样。
2 else语句
同C语言中的if...else...,记住冒号。else一定要与和它搭配的if对齐。
if cond_expr:expr0 else:expr1
3 elif语句
类似于C中使用else if。if后面只可以配一个else,但是可以有多个elif。
if cond_expr0:expr0 elif cond_expr1:expr1 elif cond_expr2:expr2 else:expr3
如果出现这种形式的用法:
if user.cmd == 'create': action = "create item" elif user.cmd == 'delete': action = 'delete item' elif user.cmd == 'update': action = 'update item' else: action = 'invalid choice... try again!'
不如使用元组或字典来判断成员,效率更高,顺便复习一下之前学到的知识:
#判断元组成员 if user.cmd in ('create', 'delete', 'update'): action = '%s item' % user.cmd else: action = 'invalid choice... try again!' #判断字典成员,并使用字典方法 msgs = {'create': 'create item', 'delete': 'delete item', 'update': 'update item'} default = 'invalid choice... try again!' action = msgs.get(user.cmd, default)
4 条件表达式
即C语言中的?:表达式。C语言中的 cond ? A : B 等价于 Python中的 A if cond else B 。
5 while语句
5.1 语法
类似C语言中while的用法,记住冒号:
while cond_expr:expr
5.2 计数循环
>>> count = 0 >>> while count < 9: ... print 'index is', count ... count += 1
5.3 无限循环
死循环,while True: ,很多通讯服务器的客户端/服务端就采用无限循环。
6 for语句
Python中最强大的循环结构,可以遍历序列成员,可以用在“列表解析”和“生成器表达式”中,它会自动地调用迭代器的next()方法,捕获StopIteration异常并结束循环,这一切都是在内部发生的。
6.1 语法
for iter_val in iterable:expr
序列可以直接迭代,而且比通过索引迭代更有效率。可以通过enumerate()的返回值同时迭代索引和元素。
6.2 用于迭代器类型
迭代器对象有一个next()方法,调用它则返回下一个元素,迭代结束后引发一个StopIteration异常。
>>> it = reversed( range(3) ) #reversed函数返回一个迭代器,它是参数的逆序 >>> it.next() 2 >>> it.next() 1 >>> it.next() 0 >>> it.next() Traceback (most recent call last):File "<stdin>", line 1, in <module> StopIteration
for语句迭代一个迭代器时,在内部调用next()方法,并自动捕获异常。
6.3 range()内建函数
返回一个包含数值的列表。有三种语法,完整的和简略的:
1 range(start, end, step = 1) #完整语法,返回一个列表,包含[start, end - 1] 2 range(start, end) #步长默认为1 3 range(end) #开始默认为0,步长默认为1
6.4 xrange()内建函数
和range()很相似,参数一样。不过它返回一个xrange对象,可迭代。在数据量很大时,比range()高效且节省内存。(即数据是按需计算)
6.5 与序列相关的内建函数
以下函数都返回一个可迭代的对象:
1 sorted() #返回一个序列 2 zip() #返回一个序列 3 4 reversed() #返回一个迭代器 5 enumerate() #返回一个迭代器
7 break语句
类似于C语言里的break,用于退出循环。
8 continue语句
类似于C语言里的continue,忽略循环中的剩余语句,立即回到循环头,检查条件表达式,进行下一次循环或退出循环。
9 pass语句
NOP,即no operation。对于想好结构,没有想好具体代码的程序,可以作为一个占位语句。类似C语言的空语句 {} 或 ; 。
10 用在循环中的else
else与while或for对齐使用,当循环正常结束时(非break)执行else里的语句。可以认为它与循环的判断条件(当成一个if)搭配使用。
#!/usr/bin/env python for i in range(3):if i == 1:break #跳出循环,不执行后面的else语句 print i else:print 'loop over'
$ python pytest.py #执行脚本 0
将break改成continue,最终循环也是正常结束的(即循环的判断条件失败时推出的循环),则执行else语句:
$ python pytest.py 0 2 loop over
11 迭代器
- 迭代器为类序列对象提供一个类序列接口,可以用它来迭代不是序列但是表现出序列行为的对象(比如字典、文件等)。
- 迭代字典,结果就是遍历dict.keys()返回的列表;迭代文件对象,结果就是遍历fp.readlines()返回的列表。
- 序列迭代的时候可以修改成员,其他对象不可以修改,也不推荐迭代的时候修改。
- iter()可以为一个序列或者集合等生成其迭代器。
12 列表解析
语法:
[expr for iter_val in iterable]
例如:
#一维列表 >>> [x*x for x in range(3)] [0, 1, 4]#二维列表 >>> [(x, y**2) for x in range(2) for y in range(3)] [(0, 0), (0, 1), (0, 4), (1, 0), (1, 1), (1, 4)]
扩展形式,对迭代变量加一个条件:
>>> [x*x for x in range(4) if x % 2] #只求奇数的平方 [1, 9]
13 生成器表达式
语法和列表解析类似:
(expr for iter_val in iterable) #这里是小括号
类似于range和xrange的区别,列表解析会返回一个列表,数据量大时占用大量内存;生成器表达式则是返回一个生成器,调用next()方法时计算并返回一个数据。
14 模块
Python有一个模块itertools,用于辅助使用迭代器。
练习题
8–4 素数。编写函数,函数名为isprime()。如果输入的是一个素数,那么返回True,否则返回False。
1 #!/usr/bin/env python 2 3 import math 4 5 def isprime(num): 6 if type(num) is not type(1) or num < 2: 7 print 'You should input an integer >= 2' 8 return 9 for i in range(2, int(math.sqrt(num)) + 1): 10 if not num % i: 11 return False 12 return True
8-4 View Code
8-5 约数。完成一个名为getfactors()的函数。它接受一个整数作为参数,返回它所有约数的列表,包括1和它本身。
1 #!/usr/bin/env python 2 3 def getfactors(num): 4 factors = [] 5 for i in range(1, num + 1): 6 if not num % i: 7 factors.append(i) 8 return factors
8-5 View Code
8–6 素因子分解。以刚才练习中的isprime()和getfactors()函数为基础编写一个函数,它接受一个整数作为参数,返回该整数所有素数因子的列表。这个过程叫做求素因子分解,它输出的所有因子之积应该是原来的数字。注意列表里可能有重复的元素。例如输入20,返回结果应该是[2, 2, 5]。
1 #!/usr/bin/env python 2 3 def getprimefactors(num): 4 primefactors = [] 5 while num != 1: 6 for i in range(2, num + 1): 7 if isprime(i) and not num % i: #调用isprime() 8 primefactors.append(i) 9 num /= i 10 break 11 return primefactors
8-6 View Code
8–7 全数。完全数被定义为这样的数字:它的约数(不包括它自己)之和为它本身。例如:6的约数是1、2、3,因为1 + 2 + 3 = 6,所以6被认为是一个完全数。编写一个名为isperfect()的函数,它接受一个整数作为参数,如果这个数字是完全数,返回1;否则返回0。
1 #!/usr/bin/env python 2 3 def isperfect(num): 4 if sum( getfactors(num) ) - num == num: #调用getfactors() 5 return 1 6 return 0
8-7 View Code
转载于:https://www.cnblogs.com/qieerbushejinshikelou/p/3755254.html
Python核心编程--学习笔记--8--条件与循环相关推荐
- Python核心编程学习笔记(一)
1.把一个字符串赋值给变量str.先用print来显示变量的内容,然后用变量名称来显示: >>>str = 'Hello World!' >>>print str ...
- python起步输入-[转载]python核心编程学习笔记-python起步
python通过两种方式来实现你的需求:语句和表达式 语句:使用关键字组成命令 >>> print 'Hello wolrd!' Hello wolrd! 表达式:可以是算术表达式或 ...
- Python核心编程学习笔记-2016-07-24-01-理解copy和deepcopy
6.20节 copy实施方式: (1)完全切片操作[:] (2)工厂函数list(),tuple()等 (3)copy模块的copy函数 copy可以说是创建了了一个新的对象,但是内容仍然是原对象的引 ...
- 大数据第二阶段Python基础编程学习笔记(待完善)
大数据第二阶段Python基础编程学习笔记(待完善) 第一章 Python基础语法 3.8 1-1Python概述 python基础部分: ●Python基础语法: 标识符,关键字,变量,判断循环.. ...
- python网络编程学习笔记(二)
python网络编程学习(四) 多用途客户端协议 一.ftp 功能:上传下载文件,删除命名文件,建立删除目录,自动压缩,保存目录 1.代码: #coding=utf-8 '''连接远程ftp服务器,显 ...
- 【C++】黑马程序员-C++核心编程学习笔记
前言 根据黑马程序员C++课程内容,结合讲义,将自己学习C++的过程中将自己觉得有必要记下的笔记进行整理,方便复习回顾,编程环境为VSCode. 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C ...
- python网络编程需要学什么,python网络编程学习笔记(五):socket的一些补充 Python 网络编程需要学习哪些网络相关的知识...
python的socket编程问题hdr = recvall(s, 5) if hdr is None: print 'Unexpected EOF receivingstruct在unpack的时候 ...
- 转 windows核心编程 学习笔记 目录
windows核心编程--SEH(结构异常处理) SEH 的工作原理. Windows 程序设计中最重要的理念就是消息传递,事件驱动.当GUI应用程序触发一个消息时,系统将把该消息放入 ...
- Python 网络编程学习笔记(二)——DNS 域名解析客户端程序设计
本博文介绍如何使用 Python 网络编程,设计并实现客户端的 DNS 域名解析及缓存服务. 1 基本概念 域名系统(DNS)是一个庞大的.全球的分布式数据库,,它主要用来把主机名转换成 IP 地址, ...
- Python零基础入门(四)——Python面向对象编程[学习笔记]
一.定义 1.面向对象编程(OOP) 面向对象编程(Object-oriented Programming,简称OOP)是一种编程范例,它提供了一种结构化程序的方法,以便将属性和行为捆绑到单个对象中. ...
最新文章
- oracle空格转换函数,ORACLE TO_CHAR函数格式化数字的出现空格的缘故
- WPF and Silverlight 学习笔记(二十):WPF数据绑定概述
- 如何配note,打补丁
- mysql降级导入_mysql 升级和降级
- MySql 随机读取多行数据并显示
- e会学安庆师范大学c语言程序设计答案,宜春学院期末考试试卷C语言程序设计(4份,有答案)...
- 多表查询过滤重复数据_数据分析工具SQL—多表查询
- 数据结构——二叉链表创建二叉树(C语言版)
- sketch(一)--安装和介绍
- stm32教程之三重ADC交错采样
- 合成孔径雷达(微波遥感)的应用
- 手机端html只允许竖屏,关于移动端页面强制竖屏的方法
- win10重装系统后无法联网
- Spanning-tree fast features配置案例
- 献给还在加班的你:摸鱼一时爽,一直摸鱼一直爽~
- 利用python计算圆球的体积_python计算圆周长、面积、球体体积并画出圆
- 【幻化万千戏红尘】qianfengDay04-java基础学习:for语句.while语句,do-while语句
- 【计算机组成原理 学习总结】第六章 总线系统(2)
- 优酷回应非会员收看3000秒广告;亚马逊推出Titan大语言模型;Android 14首个Beta版本释出 | 极客头条
- 物联网学习笔记(一)
热门文章
- mysql 延时update_转 MySQL延迟更新索引(delay_key_write)
- Object-C---gt;Swift之(十一)属性观察者
- JS 日期工具类-基于yDate
- 于Eclipse传导C/C++配置方法开发(20140721新)
- jquery之hasClass
- Entity Framework 4.1 CodeFirst实例
- android中xmlns的作用
- jQuery.extend函数详细用法![转]
- android studio AsyncHttpClient;AsyncHttpResponseHandler;RequestParams; 失效问题
- 你家的APS系统有这些功能吗?排程系统功能盘点