第五章 Python零基础入门之条件、循环及其他语句


本人自学的主要教材为Magnus Lie Hetland的Beginning Python:From Novice to Professional, Third Edition。

本人只有C++基础,初入Python,如有不足,还请指正。本系列仅作本人记录学习用。

目录

第五章 Python零基础入门之条件、循环及其他语句

前言

一、print与import

1.打印多个参数

1.1使用多个逗号

1.2使用+号

1.3自定义结束符

2.导入时重命名

二、赋值魔法

2.1序列解包

2.2链式赋值

2.3增强赋值

三、代码块

四、条件语句

1.布尔值

2.elif

3.条件表达式

4.复杂条件

4.1比较运算符

4.2布尔运算符

5.断言

五、循环语句

1.for

2.迭代字典

3.一些迭代工具

4.跳出循环

6.循环中的else语句

六、简单推导

七、三人行

1.pass

2.del

3.exec和eval

总结


前言

本章主要深入讨论几种语句(print、import、赋值语句、条件语句和循环语句),其中会介绍到代码块,最后将介绍列表推导和字典推导。


一、print与import

1.打印多个参数

1.1使用多个逗号

使用逗号时,会在输出的结果中添加空格。使用逗号可以将不同类型的表达式合并在一起,而+号则不可以。还可自定义分隔符(使用sep)。

#代码示例
>>> print('Age',42)
Age 42
>>> print('Age',42,sep='_')
Age_42

1.2使用+号

使用+号时,会取消输出结果中的空格。还可自定义分隔符。

#代码示例
>>> print('greeting'+','+'Bob')
greeting,Bob

1.3自定义结束符

可以自定义结束字符串,以替换默认的换行符。例如,将结束字符串指定为空字符串,以后就可以继续打印到当前行。

#代码示例
>>> print('Hello,',end='')
Hello,>>> print('world!')
world!

2.导入时重命名

在import语句末尾添加as子句并指定别名。

#代码示例
>>>from module1 import open as open1
>>>from mudule2 import open as open2
>>>import math as foobar

二、赋值魔法

2.1序列解包

序列解包(可迭代对象解包):将一个序列(或者任何可迭代对象)解包,并将得到的值储存在一系列变量中。

利用序列解包可以同时给多个变量赋值。使用这种办法还可以交换多个变量的值。

#代码示例
>>> x,y,z=1,2,3
>>> print(x,y,z)
1 2 3
>>> x,y,z=y,x,z
>>> print(x,y,z)
2 1 3

解包在返回元组的函数或method时很有用,可将返回的元组解包到两个变量中。

#代码示例
>>> scoundrel={'name':'Amy','boyfriend':'Bob'}
>>> key,value=scoundrel.popitem()
>>> key
'boyfriend'
>>> value
'Bob'

序列解包时,应保证要解包的序列包含的元素个数必须与等号左边列出的目标个数相同,否则将引发异常。

#代码示例
>>> x,y,z=1,2
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 2)
>>> x,y,x=1,2,3,4
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 3)

可以使用星号运算符(*)收集多余的值,带星号的变量最终包含的是始终是一个列表,在变量和值的个数相同时也是如此。

#代码示例
>>> a,b,*rest=[1,2,3,4]
>>> rest
[3, 4]
>>> a,b
(1, 2)
>>> name="Albus percival Wulfric Brian DUnmledore"
>>> first,*middle,last=name.split()
>>> middle
['percival', 'Wulfric', 'Brian']
>>> first,last
('Albus', 'DUnmledore')
>>> a,*b,c=1,2,3
>>> b
[2]
>>> a,c
(1, 3)

2.2链式赋值

链式赋值可以将多个变量关联到同一个值。

#代码示例
x=y=somefuncion()
#等价于
y=somefunciton()
x=y
#不等价于
x=somefunction()
y=somefunction()

2.3增强赋值

使用增强赋值可使代码量减少,可读性提高。

#代码示例
>>> x=2
>>> x+=1
>>> x
3
>>> x*=2
>>> x
6
>>> fnord='foo'
>>> fnord+='bar'
>>> fnord
'foobar'

三、代码块

代码块指一组语句,通过缩进代码来创建(标准是每级缩进四个空格)。在Python中,使用冒号(:)指出接下来是一个代码块,缩进量与之前相同时,当前代码块结束。

#伪代码示例
>>>this is a line
>>>this is another line:
>>>    this is another block
>>>    continuing the same block
>>>    the last line of this block
>>>phew, there we escaped the inner block

四、条件语句

1.布尔值

真值称为布尔值。在Python中以下视为假:

Flase        None         0          “”        ()          []          {}

总结就是标准值Flase和None、各种类型的数值0,空序列以及空映射都被视为假。

实际上True和Flase是1和0的别称。

#代码示例
>>> True==1
True
>>> False==1
False
>>> False==0
True
>>> False+True+42
43

2.elif

相当于C++中的else if。

3.条件表达式

C++中的三目运算符的Python版。

#代码示例
>>> name=input("enter your name: ")
enter your name: Bob
>>> status="friend" if name.endswith("Bob") else "stranger"
>>> status
'friend'

4.复杂条件

4.1比较运算符

需要注意的是is(相同运算符)与==(相等运算符)的区别。

is检查的是两个对象是否相同,是否是同一个对象,而==检查的是两个对象的值是否相等。

#代码示例
>>> x=[1,2,3]
>>> y=[2,4]
>>> x is not y
True
>>> del x[2]
>>> y[1]=1
>>> y.reverse()
>>> x==y
True
>>> x is y
False

字符串与序列的比较实际上是Unicode码的比较。字符是根据顺序值排列的,可以使用函数ord来获取字符的顺序值,作用与chr相反。

#代码示例
>>> ord('A')
65
>>> chr(65)
'A'

4.2布尔运算符

and,or,not。

Python具有短路逻辑。

#代码示例
>>> yourname=input("enter your name: ") or '<unknown>'
enter your name:
>>> yourname
'<unknown>'

5.断言

断言的实现通过函数assert实现,可以在程序中充当检查点,还可以在条件后添加字符串,对断言做出说明。

#代码示例
>>> age=10
>>> assert 0<age<100
>>> age=-1
>>> assert 0<age<100
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AssertionError
>>> assert 0<age<100,'the age must be realistic'
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AssertionError: the age must be realistic

五、循环语句

1.for

#代码示例
>>>numbers=[1,2,3,4,5,6,7,8,9]
>>>for item in numbers:
>>>    print(item)
1
2
3
4
5
6
7
8
9

Python有内置的创建范围的函数range ,范围左闭右开。

#代码示例
>>> range(0,10)
range(0, 10)
>>> list(range(0,10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>for number in range(10):
>>>    print(number)
0
1
2
3
4
5
6
7
8
9

2.迭代字典

可利用for循环遍历字典的所有关键字。

#代码示例
>>>d={'x':1,'y':2,'z':3}
>>>for key in d:print(key,'correspond to',d[key])
x correspond to 1
y correspond to 2
z correspond to 3

可以在fore循环中使用序列解包。

#代码示例
>>>d={'x':1,'y':2,'z':3}
>>>for key,value in d.items():print(key,value)
x 1
y 2
z 3

3.一些迭代工具

并行迭代。同时迭代两个序列。有两种做法,第一种是直接迭代,第二种是使用zip。序列长度不同时,zip将在最短的序列用完后终止缝合。

#代码示例
#第一种
>>>names=['anne','beth','geogle','damon']
>>>ages=[12,34,31,101]
>>>for i in range(len(names)):print(names[i],ages[i])
anne 12
beth 34
geogle 31
damon 101
#第二种
>>>name_age=list(zip(names,ages))
>>>for name, age in name_age:print(name,'is',age,'years old')
anne is 12 years old
beth is 34 years old
geogle is 31 years old
damon is 101 years old

迭代时获取索引。有时需要在迭代对象序列的同时获取当前对象的索引。一种很有效的解决办法是使用内置函数enumerate。

#代码示例
>>>for index, string in enumerate(strings):
>>>    if 'xxx' in string:
>>>        strings[index]='[censored]'

反向迭代和排序后再迭代。使用到内置函数reversed和 sorted。不就低修改对象,返回反转和排序后的版本。sorted返回一个列表,而reversed返回一个神奇的东西,不需要知道这是什么,只需在for循环或join等方法中使用它。不能对其执行索引或切片操作,也不能直接对它调用列表的方法。要执行这些操作,需要用list进行转换。

#代码示例
>>>sorted([4,3,4,5612,5456])
[3, 4, 4, 5456, 5612]
>>>sorted('Hello, World')
[' ', ',', 'H', 'W', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r']
>>>list(reversed('Hello, World'))
['d', 'l', 'r', 'o', 'W', ' ', ',', 'o', 'l', 'l', 'e', 'H']
>>>''.join(reversed('Hello, World'))
'dlroW ,olleH'
>>>reversed('Hello, World')
<reversed object at 0x000002883BC9D150>

4.跳出循环

break。用法与C++相同。

continue。结束当前迭代,并跳到下一次迭代开头。

#代码示例
>>>for x in seq:
>>>    if condition1: continue
>>>    if condition2: continue
>>>    if condition3: continue>>>    do_something()
>>>    do_something_else()
>>>    do_another_thing()
>>>    etc()

while true/break。一个应用场景是要在用户根据提示输入单词是执行某种操作,并在用户没有提供单词时结束循环。

#代码示例
>>>while True:
>>>    word=input('please enter a word: ')
>>>    if not word: break
>>>    print('The word is ',word)

6.循环中的else语句

在循环后添加一条else子句,仅在没有调用break时才执行。

#代码示例
>>>from math import sqrt
>>>for n in range(99,81,-1):
>>>    root=sqrt(n)
>>>    if root==int (root):
>>>        print(n)
>>>        break
>>>else:
>>>    print("Don't find it!")

六、简单推导

列表推导。一种从其他列表创建列表的方式。

#代码示例
>>> [x*x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [x*x for x in range(10)if x%3==0]
[0, 9, 36, 81]
>>> [(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

用圆括号代替方括号,不能实现元组推导,而是创建生成器。

用花括号代替方括号,实现字典推导。

#代码示例
>>> {i:"{} squared is {}".format(i,i**2) for i in range(10)}
{0: '0 squared is 0', 1: '1 squared is 1', 2: '2 squared is 4', 3: '3 squared is 9', 4: '4 squared is 16', 5: '5 squared is 25', 6: '6 squared is 36', 7: '7 squared is 49', 8: '8 squared is 64', 9: '9 squared is 81'}

七、三人行

1.pass

nothing to do。

#代码示例
>>>if name =='Ralph Aulus Melish':
>>>    print('Welcome!')
>>>elif name=='Enid':#还未完成
>>>    pass
>>>elif name=='Bill Cates'
>>>    print('Access Denied')

2.del

del会删除到对象的引用和名称本身。

#代码示例
>>> x=1
>>> del x
>>> x
Traceback (most recent call last):File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> x=["Hello","World"]
>>> y=x
>>> del x
>>> y
['Hello', 'World']

3.exec和eval

exec将字符串作为代码执行。应该向其传递一个命名空间,用于放置变量。通常提供一个字典作为命名空间。若将字典的键打印出来,会发现有一个__builtins__,这是自动添加了包含所有内置函数和值的字典。

#代码示例
>>> from math import sqrt
>>> scope={}
>>> exec('sqrt=1',scope)
>>> sqrt(4)
2.0
>>> scope['sqrt']
1
>>> len(scope)
2
>>> scope.keys()
dict_keys(['__builtins__', 'sqrt'])

eval计算用字符串表示的Python表达式,并返回结果。

#代码示例
>>> eval(input("Enter an arithmetic expression: "))
Enter an arithmetic expression: 6+18*2
42

总结

本章主要介绍了多种语句,包括打印语句、导入语句、赋值语句、代码块、条件语句、循环语句、推导以及三个函数。

【学习记录】Python零基础入门(五)相关推荐

  1. 【python教程入门学习】Python零基础入门爬虫项目

    Python入门爬虫项目 这是我的第一个python项目,分享给大家. 需求 我们目前正在开发一款产品其功能大致是:用户收到短信如:购买了电影票或者火车票机票之类的事件.然后app读取短信,解析短信, ...

  2. python零基础入门教程视频下载-Python零基础入门学习视频教程全42集,资源教程下载...

    课程名称 Python零基础入门学习视频教程全42集,资源教程下载 课程目录 001我和Python的第一次亲密接触 002用Python设计第一个游戏 003小插曲之变量和字符串 004改进我们的小 ...

  3. python基础教程视频教程百度云-Python零基础入门学习视频教程全42集百度云网盘下载...

    课程简介 Python零基础入门学习视频教程全42集百度云网盘下载 课程目录 042魔法方法:算术运算 041魔法方法:构造和析构 040类和对象:一些相关的BIF 039类和对象拾遗 038类和对象 ...

  4. python基础教程百度云-Python零基础入门学习视频教程全42集百度云网盘下载

    课程简介 Python零基础入门学习视频教程全42集百度云网盘下载 课程目录 042魔法方法:算术运算 041魔法方法:构造和析构 040类和对象:一些相关的BIF 039类和对象拾遗 038类和对象 ...

  5. python零基础入门pdf-零基础入门学习Python PDF 扫描版

    给大家带来的一篇关于Python编程相关的电子书资源,介绍了关于Python.零基础.入门学习方面的内容,本书是由清华大学出版社出版,格式为PDF,资源大小59.3 MB,小甲鱼编写,目前豆瓣.亚马逊 ...

  6. Python零基础入门(一)——Python基础关键字和语法[学习笔记]

    Python零基础入门(一)--Python基础关键字和语法 目录 1. Hello World! 2. 字符串操作 3. 简单数学计算 4. if elif else 5. 循环 基础类型 pyth ...

  7. python零基础入门教程(非常详细),从零基础入门到精通,看完这一篇就够了

    前言 本文罗列了了python零基础入门到精通的详细教程,内容均以知识目录的形式展开. 第一章:python基础之markdown Typora软件下载 Typora基本使用 Typora补充说明 编 ...

  8. Python零基础入门教程( 快速入门)

    前言 学无止境,无止境学. 今天要给大家分享的是<Python零基础入门教程01 快速入门>,这是一个系列的教程,从零基础到项目实战.在本教程中,我会给大家介绍Python入门的一些基础知 ...

  9. python基础代码大全-python零基础入门命令方式汇总大全,快速恶补你的Python基础...

    原标题:python零基础入门命令方式汇总大全,快速恶补你的Python基础 无意中浏览到这篇来自大牛的分享,总结的很全面,我重新排版下放在这里,希望能帮助到大家.在此十分感谢原作者! 在开始之前还是 ...

最新文章

  1. TensorFlow实战笔记(17)---TFlearn
  2. 动态网站的技术路线_简单动态网站搭建
  3. SAP FBCJ现金日记帐增强操作手册
  4. 前端Web框架的实现过程
  5. Linux 中的远程登陆
  6. 《大型网站技术架构》5、6、7章阅读笔记
  7. IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in Python or `tensor.item<T>()` in
  8. 相对路径和绝对路径_linux系统中的绝对路径和相对路径
  9. 中国联通官网被发现含木马脚本,可向用户推广色情APP
  10. VS2005 sp1安装体会
  11. 作为一个职场中人的一些思考,关于做事的方式和思路
  12. 【Vue2.0】— 全局事件总线GlobalEventBus(十九)
  13. 在linux通过源码编译安装redis详细步骤
  14. 多元回归模型与热力图绘制
  15. python2线程池_python 线程池调用类方法不执行?
  16. PCB制板自学(三)_电容及封装
  17. 统一身份认证系统方案
  18. 如何看懂这些该死的图形学公式
  19. 【shell】笔记|去重复行|删除匹配行|反选删除|反向显示|加减乘除
  20. 克尼汉的c程序设计语言,c程序设计语言 英文版

热门文章

  1. Htc Vive详细图文安装教程
  2. 少儿编程--scratch编程--游来游去的鱼
  3. Kafka命令行常用命令说明
  4. 【C++】递推动态规划基础入门
  5. 三四月猪价或跌至每斤6元谷底,养猪户该如何破解
  6. 计算机社团活动丰富多彩,社团活动丰富多彩 校园文化彰显特色
  7. ActivityNet数据集解析
  8. IDC时评:从巴黎圣母院大火看数据中心运维
  9. linux删除eth2设备_如何添加删除子网卡eth0:1(linux案例)
  10. 基于百度地图api实现计算目标点与自身位置的距离(js)