第五章 条件、循环和其他语句

5.1 print和import的更多信息

5.1.1 使用逗号输出

>>> print('age',43,45)         // 可以用逗号隔开多个表达式,中间会有空格
age 43 45

5.1.2 把某事件作为另外事件的导入

import somemodule

from somemodule improt aaa, bbb, ccc

from somemodule import *

如果两个模块有同名函数怎么办?

第一种方法可以用模块引用:

module1.open()

module2.open()

另外一种方法是:给模块起别名,或者给函数起别名

>>> import math as foobar
>>> foobar.sqrt(3)
1.7320508075688772

5.2 赋值魔法

5.2.1 序列解包

>>> x,y,z = 1,2,3                 // 可以为多个值同时赋值
>>> print(x,y,z)
1 2 3

>>> x,y                                 // 交换两个值
(1, 2)
>>> x,y = y, x
>>> x, y
(2, 1)

序列解包(或递归解包):将多个值的序列解开,放到变量的序列中。

当函数或方法返回元组(或其他序列或可选迭代对象)时,这个特性尤为重要。

>>> source = {'name':'Robin','girlfriend':'marion'}
>>> key, value = source.popitem()  // 函数返回的值打包成元组。
>>> key, value
('girlfriend', 'marion')

5.2.2 链式赋值

>>> x = y = "fsdfsd"
>>> x, y
('fsdfsd', 'fsdfsd')

5.2.3 增量赋值

+=  /  *=

5.3 语句块:缩排的乐趣

语句块:条件为真时,执行或者执行多次的一组语句。在代码前放置空格来缩进语句即可创建语句块

python中,冒号用来标识语句块的开始;块中的语句都是缩进的,并且缩进量相同。当回退到和已闭合

的块一样的缩进量时,就表示当前块已经结束。

5.4 条件和条件语句        

5.4.1 这就是布尔变量的作用

真值:下面的值在作为布尔表达式的时候,会被解释器看做假(false)

False        None      0(包括浮点,长整和其他类型)         ""               ()          []            {}

5.4.2 条件执行和if语句

5.4.3 else子句

5.4.4 elif

5.4.5 嵌套代码块

name= input("what is your name?")
if name.endswith('Gumby'):
if name.startswith('Mr.'):
print("hello MR Gumyby")
elif name.startswith('Mrs.'):
print('Hello Mrs. Gumy')
else:
print('hello Gumby')
else:
print('hello, stranger') name = input('jfsdljfs')

5.4.6 更复杂的条件

(1)比较运算符

x == y/   x<y /   x > y / x >=y /     x<=y   / x !=  y /  x is y  / x is not y/   x in y    /x not in y

0 < age < 100   //  运算符可以连接

(2)相等运算符

==

(3)is: 同一运算符

>>> x = y = [1,2,3]
>>> z = [1,2,3]
>>> x == y
True
>>> x == z                 //   相等性判定,判断数值是否相等
True
>>> x is y
True
>>> x is z                  // 同一性判定, 判断对象是否是同一个     
False

(4)in:成员资格运算符

(5)字符串和序列比较 

>>> "abc" < "edf"
True

>>> "abc".lower() == "def".upper()
False

>>> [1,[1,3]] < [1,[1,4]]
True

(6)布尔运算符

if   XX and YY  or ZZ   // 也满足短路逻辑
5.4.7 断言

>>> age = 10
>>> assert 100<age<10000
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
assert 100<age<10000
AssertionError

 5.5 循环

5.5.1  while循环

x = 1

while x <= 100:

  print(x)

  x +=1

5.5.2 for 循环

>>> words = ['this','is','an','ex','parrot']
>>> for word in words:
print(word)

this
is
an
ex
parrot
>>>

>>> for xx in range(10):          // range函数类似于分片,包含下限,但是不包含上限
print(xx)

0
1
2
3
4
5
6
7
8
9
>>>

5.5.3 循环遍历字典 

>>> d = {'x':1, 'y':2, 'z':3}
>>> d
{'x': 1, 'y': 2, 'z': 3}
>>> for key in d:
print(key, " -- ",d[key])          // 字典的迭代顺序是不一定的

x -- 1
y -- 2
z -- 3

>>> for key, value in d.items():
print(key, '-', value)                // 字典的迭代顺序是不一定的

x - 1
y - 2
z - 3
>>>

5.5.4 一些迭代工具

python中有一些函数非常好用,有些在itertools中,有一些是内建函数

(1)并行迭代

>>> names = ['anne','beth','george','damon']
>>> ages = [12, 45, 32, 102]
>>> for i in range(len(names)):
print(names[i],'   ',ages[i])

>>> for name, age in zip(names, ages):   //  zip函数可以进行并行迭代,zip函数也可以用于不等长的列表,短的“用完”就停止
print(name,age)

anne 12
beth 45
george 32
damon 102

(2 ) 按索引迭代

strings = ['aa','bb','cc']

>>> for index, string in enumerate(strings):
if 'aa' in string:
strings[index] = "zzzz"

>>> strings
['zzzz', 'bb', 'cc']

(3)翻转和排序迭代

reversed和 sorted函数

>>> sorted([4,6,9,2])
[2, 4, 6, 9]

>>> var = reversed('hello world')
>>> var
<reversed object at 0x0000020AF7EEC7B8>
>>> list(var)
['d', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'h']

>>> ''.join(reversed('hello world'))
'dlrow olleh'

5.5.5 跳出循环

(1)break: 跳出循环

(2)continue: 跳出本次循环,执行下一轮循环

(3)while true用法

while True:
word = input("please input a word?")
if not word:break
print('this workd was' +word) name = input('jfsdljfs')

5.6 列表推倒式-轻量级循环

利用其它列表创建新列表

>>> [x*x for x in range(0, 10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> [x*x for x in range(0, 10) if x % 3 ==0]   // 增加一个if部分
[0, 9, 36, 81]

>>> [(x,y) for x in range(0, 10) for y in range(0,4)]   // 也可以有多个for语句
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3), (5, 0), (5, 1), (5, 2), (5, 3), (6, 0), (6, 1), (6, 2), (6, 3), (7, 0), (7, 1), (7, 2), (7, 3), (8, 0), (8, 1), (8, 2), (8, 3), (9, 0), (9, 1), (9, 2), (9, 3)]
>>>

5.7 三人行

5.7.1 占位符:pass

var = "fsdf"
if var == "fsdfsd":
print("fsd")
elif var == "vcxfds":
pass
elif var == "fsdfs":
print("fsd")
name = input("fsdfsd")

5.7.2  使用del删除

>>> x = ['hello','world']
>>> y = x
>>> del y //删除y后,并不会影响x, 因为只是删除y这个名字,而值不会删除。值是通过垃圾回收来删除的
>>> x
['hello', 'world']

5.7.3 使用exec和eval执行和求值字符串

>>> exec("print('fds')")   // 执行字符串中存储的代码,这样会有安全漏洞
fds

>>> eval("5*5")            // 和exec类似,不同点是,eval会计算值并且返回结果
25

python学习(五) 条件、循环和其他语句的更多相关文章

  1. 一步一步学python(五) -条件 循环和其他语句

    1.print 使用逗号输出 - 打印多个表达式也是可行的,但要用逗号隔开 >>> print 'chentongxin',23 SyntaxError: invalid synta ...

  2. python学习笔记2_条件循环和其他语句

    一.条件循环和其他语句 1.print和import的更多信息. 1.1.使用逗号输出  //print() 打印多个表达式是可行的,用逗号隔开.       在脚本中,两个print语句想在一行输出 ...

  3. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  4. Python基础教程之第5章 条件, 循环和其它语句

    Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 #Chapter 5 条件, 循环 ...

  5. Python之条件 循环和其他语句 2014-4-6

    #条件 循环和其他语句 23:30pm-1:431.print和import的更多信息 使用逗号将多个表达式输出 >>> print 'age:',42 age: 42 >&g ...

  6. Python学习_05_条件、循环

    条件 和其他语言类似,python中使用if...elif...else来形成分支,支持三目操作符 ?:,python中没有switch,但是缩进的特性让if...elif...else的结构同样便于 ...

  7. Python学习笔记—条件判断和循环

    条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age >= ...

  8. Python学习之条件判断和循环

    #coding= utf-8 # 条件判断和循环 # 如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做 age1 = 20 if age1 >= 18: prin ...

  9. python学习笔记:循环语句——while、for

    python中有两种循环,while和for,两种循环的区别是,while循环之前,先判断一次,如果满足条件的话,再循环,for循环的时候必须有一个可迭代的对象,才能循环,比如说得有一个数组.循环里面 ...

  10. 记录我的 python 学习历程-Day02-while 循环/格式化输出/运算符/编码的初识

    一.流程控制之--while 循环 循环就是重复做同一件事,它可以终止当前循环,也可以跳出这一次循环,继续下一次循环. 基本结构(基本循环) while 条件: 循环体 示例 # 这是一个模拟音乐循环 ...

随机推荐

  1. 真相大白:为什么Entity Framework不能进行跨数据库查询(附解决方法)

    在上篇随笔中,我们发现Entity Framework在构建SQL语句时,将ToTable("CNBlogsTex.dbo.blog_PostBody")中的"CNBlo ...

  2. 《JavaScript高级程序设计》第6章补充 继承

    基于原型链继承 将父类的实例赋给子类的prototype来实现继承. 原理:父类的实例有父类所有的实例属性和原型方法,将它赋给子类的prototype后,子类的创建的实例就有会__proto__属性指 ...

  3. spring3:对JDBC的支持 之 JDBC模板类

    7.2  JDBC模板类 7.2.1  概述 Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDB ...

  4. IE兼容性测试工具IETester

    IE兼容性测试工具:IETester 1.这种做法,不能做到100%的覆盖: 2.实际的业务场景会比IEtester更符合.

  5. 解决:夜神模拟器连不上adb的问题

    一. adb devices发现不了设备 刚试了一下,在夜神模拟器开启的情况下,adb devices 死活找不到设备 adb kill-server和adb start-server也无济于事 二. ...

  6. mongodb底层存储和索引原理——本质是文档数据库,无表设计,同时wiredTiger存储引擎支持文档级别的锁,MMAPv1引擎基于mmap,二级索引(二级是文档的存储位置信息『文件id + 文件内offset 』)

    MongoDB是面向文档的数据库管理系统DBMS(显然mongodb不是oracle那样的RDBMS,而仅仅是DBMS). 想想一下MySQL中没有任何关系型数据库的表,而由JSON类型的对象组成数据 ...

  7. SDRAM引入

    SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器. DDR: DDR是DDR SDRAM,是SDRAM的升级版.(DDR:double ...

  8. About GCC

    GCC used to stand for the GNU C Compiler, but since the compiler supports several other languages as ...

  9. React Native组件(一)组件的生命周期

    相关文章 React Native探索系列 前言 React Native有很多组件比如Image.ListView等等,想要合理的使用组件,首先要先了解组件的生命周期. 1.概述 无论你是开发And ...

  10. JS同源策略和跨域访问

    同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只 ...