Python核心技术与实战——五|条件与循环
我们在前面学习了列表、元组、字典、集合和字符串等一系列Python的基本数据结构类型,下就需要把这一个个基本的数据串在一起了,这就要用到我们今天要讲的东西——”条件与循环“。
一.条件语句
条件语句的用法很简单,比如我们想要表示y=|x|这个函数,那么对应的代码就是这样的(简化代码不考虑异常,后面的也一样)
#y = |x|
x = float(input('>>>'))
if x < 0:
y = -x
else:
y = x
要注意的是Python和其他的语言不同,在条件语句中是不能加括号的,句末也要加上冒号。这是Python特定的语法规范。
if (x<0)
Python是不支持switch语句的,在多个条件判断时,我们要用else if实现。在Python的用法时elif,大概就是这么个思路
if case1:
do 1
elif case2:
do 2
elif case3
do 3
else:
do n
其中if语句是可以单独使用的,而elif和else必须要和if配套使用。
有些时候为了简化代码,可以将判定的条件省略,可以这么用:
s = 'this is a string'
l = ['a','b','c']
i = 123
if s:
print('字符串非空')
if l:
print('列表非空')
if i:print('整数不为0') #注意这样的写法(在同一行)也是可以的
判定条件的省略用法大概是下面几种
数据类型 | 结论 |
String | 空字符串解析为False,其余为Ture |
Int | 0解析为False,其余为Ture |
Bool | Ture为Ture |
list/tuple/dict/set | iterable为空的时候为False,其余都为True |
Object | None为False,其余为True |
但是在实际应用时,除了Bool类型的数据,条件的判定条件最好时显性的,也就是说最好写出来判定的条件,为后期的维护和他人的阅读创造好的条件。比如判定一个数是否为0
if i:
print('这个数是0') if i==0:
print('这个数是0')
显而易见下面的语法更加的易读。特别是在一堆代码段中,要搞明白这些也是不容易的。
二.循环语句
循环的本质就是遍历集合中的元素。Python的循环一般通过while和for来实现。
for循环常常用于对可迭代对象的遍历
d = {'name':'jack',
'age':20,
'job':'hr'}
for key in d:
print(key) #遍历字典的key
for value in d.values():
print(value) #遍历字典的value
for k,v in d.items():
print('key:{},value:{}'.format(k,v)) #遍历键值对
这里举例的是字典,因为字典本身只有key是可迭代的,如果我们要遍历它的值或键值对,就要用到字典的内置函数value()或items()来实现。而在有些情况里还可以通过range()函数拿到索引,再去遍历集合中的元素
l = ['a','b','c','d','e','f','g']
for index in range(0,len(l)):
if index<3:
print(index,l[index])
当我们同时需要索引和元素时,还有一种更加简洁的方式:利用Python的内置函数enumera()。用它来遍历集合,不仅返回每个元素,还返回其对应的索引,那么上面的代码就可以写成这样的
l = ['a','b','c','d','e','f','g']
for index,item in enumerate(l):
if index < 5:
print(item)
在循环语句中,我们还常常搭配continue和break一起使用。continue就是跳过当前这一段循环,继续执行下面一轮循环,而break就是完全跳出整个循环体。适当的结合continue和break,会使纯光绪更加简洁、易读。举个例子:现在有两个字典,分别时产品名称到价格的映射和产品名称到颜色列表的映射。如果我们想找出价格小于1000的,并且颜色不是红色的所有产品名称和颜色的组合,不用continue就是这样的
name_price = {}
name_color = {}
for name,price in name_price.items():
if price < 1000:
if color in name_color:
for color in name_color[name]:
if color != 'red':
print('name:{},color:{}'.format(name,color))
else:
print('name:{},color:{}'.format(name,'None'))
而加上continue就简单的多
name_price = {}
name_color = {}
for name,price in name_price:
if price >= 1000:
continue
if name not in name_color:
continue
for color in name_color[name]:
if color == 'red':
continue
print('name:{},color:{}'.format(name,color))
可以看出来第一种方法有5层for或if的嵌套,而第二种方法加上Continue只有3层嵌套。
前面讲的是for循环,其实对于while循环原理也是一样的,只要在condition满足时,一直重复循环体内部的操作,知道condition不再满足,就跳出循环体。
while contition:
...
很多时候for和while循环可以相互转换,比如上面用for循环遍历列表,要是用while循环也可以完成。
l = ['a','b','c','d','e','f','g']
index = 0
while index<len(l):
print(l[index])
index +=1
那么这两种用法有什么区别呢?如果只是遍历一个已知的集合,找出满足条件的元素并进行相应的操作,那么使用for循环更加简洁。但如果需要在满足某个条件前不停的重复某些操作,并没有特定的集合需要遍历,那么使用一般使用while循环。比如如果有个交互式的问答系统,在接收到输入信息为‘q’时程序退出。这个时候一般是不用for循环的。
while True:
data = input('>>>')
if data == 'q':
print('stop')
break
else:
print(data)
三.for和while的效率
两种循环的效率问题是应该关注的。
i = 0
while i < 1000000:
i =+ 1 for i in range(0,1000000):
pass
这两个循环是等价的,而由于range()函数是由C语言直接写的,调用的速度非常快;而while循环中的 i +=1这个操作是通过Python解释器直接调用底层的C语言;并且这个操作涉及到对象的创建和删除(因为i是int,是immutable,i += 1相当于i = new(i +1)。所以for循环的效率会更高。
四.条件和循环的复用
有些时候会把条件和循环并在一行的操作,例如
#复写方法
expression1 if condition else expression2 for item in iterable
#分开写法
for item in iterable:
if condition:
expression1
else:
experssion2
而如果没有else语句,就可以这么写
experssion for item in iterable if condition
举个例子,比如我们要绘制f(x)=2|x|+5的函数图,就要根据x数据点算出对应的y的值,那么用一行代码就可以了
x = [-5,-4,-3,-2,-1,0,1,2,3,4,5]
y = [value*2+5 if value >0 else -value*2+5 for value in x]
print(y)
熟练之后,会发现这种方式非常方便,但是如果逻辑比较复杂的时候一行就难于理解,也容易出错不利于他人读代码。用正常的方式写代码也是一种好的规范和选择。
五.思考题
由两个列表attributes和values,然后针对values中每一组子列表value,输入器和attributes中的键对应后的字典,最后返回字典组成的列表
attributes = ['name', 'dob', 'gender']
values = [['jason', '2000-01-01', 'male'],
['mike', '1999-01-01', 'male'],
['nancy', '2001-02-01', 'female']
] # expected outout:
[{'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'},
{'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'},
{'name': 'nancy', 'dob': '2001-02-01', 'gender': 'female'}]
可以试试用两种方式来完成:复用的或者分行的:
out = []
for value in values:
person = {}
for index in range(len(value)):
person[attributes[index]] = value[index]
out.append(person)
print(out)
单行版:
out = [{attributes[i]: value[i] for i in range(len(attributes))} for value in values ]
print(out)
Python核心技术与实战——五|条件与循环的更多相关文章
- Python核心技术与实战 笔记
基础篇 Jupyter Notebook 优点 整合所有的资源 交互性编程体验 零成本重现结果 实践站点 Jupyter 官方 Google Research 提供的 Colab 环境 安装 运行 列 ...
- 【python学习笔记】5.条件、循环和其他语句
[python学习笔记]5.条件.循环和其他语句 print: 用来打印表达式,不管是字符串还是其他类型,都输出以字符串输出:可以通过逗号分隔输出多个表达式 import: 导入模块 impo ...
- Python核心技术与实战——十九|一起看看Python全局解释器锁GIL
我们在前面的几节课里讲了Python的并发编程的特性,也了解了多线程编程.事实上,Python的多线程有一个非常重要的话题——GIL(Global Interpreter Lock).我们今天就来讲一 ...
- Python基础(6)--条件、循环
本文的主要内容是 Python 的条件和循环语句以及与它们相关的部分. 我们会深入探讨if, while, for以及与他们相搭配的else,elif,break,continue和pass语句. 本 ...
- Python 2.7 学习笔记 条件与循环语句
本文介绍下python条件和循环语句的语法 一.if条件语句 语法格式如下: if 表达式: .... elif 表达式: .... elif 表达式: .... else: ..... 说明:与其它 ...
- Python核心技术与实战——六|异常处理
和其他语言一样,Python中的异常处理是很重要的机制和代码规范. 一.错误与异常 通常来说程序中的错误分为两种,一种是语法错误,另一种是异常.首先要了解错误和异常的区别和联系. 语法错误比较容易理解 ...
- Python学习之路4☞条件和循环
一.if语句 1.1 功能 计算机又被称作电脑,意指计算机可以像人脑一样,根据周围环境条件(即expession)的变化做出不同的反应(即执行代码) if语句就是来控制计算机实现这一功能 1.2 语法 ...
- python系列八:Python3条件控制&循环语句
#!/usr/bin/python #-*-coding:gbk-*-#Python3 条件控制&循环语句import randomage = int(input("请输入你的年龄: ...
- Python学习笔记五--条件和循环
5.1 if语句 没什么好说,if语句语法如下: if expression: expr_true_suit 5.1.1多重条件表达式 单个if语句可以通过布尔操作符and,or,not实现多重条件判 ...
随机推荐
- 错误 NETSDK1007 找不到“E:\Project\MyProject\MyProject.Common\MyProject.Utility.csproj”的项目信息。这可以指示缺少一个项目引用。 MyProject.Data C:\Program Files\dotnet\sdk\2.2.107\Sdks\Microsoft.NET.Sdk\targets\Microsof
因为对MyProject.Data引用的项目MyProject.Common进行了重命名为MyProject.Utility,导致这个错误 解决办法: 1.找到MyProject.Data中的E:\P ...
- bash脚本计算某程序的进程数
脚本里面有时候需要判断某个程序是否启动,以及有几个进程下面用nginx来做实例 显示所有的nignx进程 ps -ef|grep nginx |grep -v grep 其中grep -v grep表 ...
- leetcode-mid-others-621. Task Scheduler
mycode 53.01% 这个题在纸上画一画就知道啦,只要出现次数最多的字母能够满足要求,其他更少的字母穿插在其中,间隔就更满足<n啦,当然,最后不要忘记加上尾巴哦,尾巴和出现次数最多的字 ...
- EasyHook(一)
前言 在说C# Hook之前,我们先来说说什么是Hook技术.相信大家都接触过外挂,不管是修改游戏客户端的也好,盗取密码的也罢,它们都是如何实现的呢? 实际上,Windows平台是基于事件驱动机制的, ...
- 二、启动一款app演示
一.下载aapt包 1. aapt即Android Asset Packaging Tool,在SDK的build-tools目录下.该工具可以查看apk包名和launcherActivity 2.打 ...
- Lombok 注解简介
Lombok @AllArgsConstructor /** * 生成一个包含所有属性的构造函数 */ @Target(ElementType.TYPE) @Retention(RetentionPo ...
- 【Spring】---【IOC入门案例】
第一步:导入Jar包 第二步:创建类,在类里面创建方法 public class User { public void add(){ System.out.println("-------- ...
- CSS3 基础
style 标签 <style type="text/css"> h1 { font-size:12px; color:#F00; } </style> 行 ...
- ContextLoaderListener错误
在web.xml中添加如下配置 <context-param> <param-name>contextConfigLocation</param-name> < ...
- linux安装五笔拼音混输 的五笔输入法
打开终端先卸载系统的iBus sudo apt-get remove ibus 添加源sudo add-apt-repository ppa:fcitx-team/nightlysudo apt-ge ...