python学习笔记(五)条件、循环及其他语句

个人笔记,仅供参考

五、条件、循环及其他语句

1、再谈print和import

1.1、打印多个参数

print不仅可以打印一个表达式,还可以同时打印多个表达式,条件是用逗号分隔。

>>> print('Age:',42)
Age: 42

如你所见,打印后的两个参数之间有一个空格。在你要合并文本和变量值,而又不想使用字符串设置功能时,这种行为很有用。

可以取消结尾默认的换行符,

print('Hello,',end='')
print('world')

使用上面两行代码打印Hello,world

1.2、导入时重命名

从模块导入时通常用以下几种方法

import somemodule
from somemodule import somefunction
from somemodule import function1,funtion2

导入包中所有内容时

from somemodule import *

如果导入多个包,且有同名函数,调用时应制定包名

module1.open()
module2.open()

或者在导包时添加as并制定别名

>>> from math import sqrt as foobar
>>> foobar(4)
2.0

2、赋值

(花里胡哨的赋值,了解就好)

2.1、序列解包

同时给多个变量赋值

>>> x,y,z = 1,2,3
>>> print(x,y,z)
1 2 3

这种方式还可以交换多个变量的值

>>> x,y = y,x
>>> print(x,y,z)
2 1 3

这里执行的操作就叫序列解包(可迭代对象解包):将一个序列解包,并将得到的值存储在一系列变量中。

>>> values = 1,2,3
>>> values
(1, 2, 3)
>>> x,y,z = values
>>> x
1
>>> y
2
>>> z
3

在使用返回元组的函数或方法时很有用。假设要从字典中随机获取一个键值对,可用popitem,它随便获取一个键值对并以元组的方式返回。接下来,可直接将返回的元组解包到两个变量中。

>>> scoundrel = {'name':'Robin','girlfriend':'Marion'}
>>> key,value = scoundrel.popitem()
>>> key
'girlfriend'
>>> value
'Marion'

2.2、链式赋值

这是一种快捷方式,用于将多个变量关联到同一变量。

x = y = somefunction()

2.3、增强赋值

使用复合的运算符来赋值,如以下两种写法效果相同。

>>> x = x + 1
>>> x += 1

也可以用于其他数据类型

>>> fnord = 'foo'
>>> fnord += 'bar'
>>> fnord
'foobar'

3、代码块的缩进

在循环中,python依靠缩进判断是否在循环体中,python中的缩进也是判断代码块之间从属关系的重要条件。所以缩进一定要严谨。

4、条件和条件语句

在你编写的程序中,语句都是逐条执行的。现在更进一步,让程序选择是否执行特定的代码块。

4.1、布尔值

用布尔表达式,下面的值都被视为假:

False None 0 "" () [] {}

4.2、有条件地执行和if语句

if语句

在确定条件为真时执行指定语句,条件为假这不执行。

name = input("what your name: ")
if name == 'Gumby':
    print("hello,Mr.Gumby")

4.3、else语句

在前面的示例中,输入Gumby即可打印出信息。

现在可以使用else语句来在输入值不是Gumby时执行其他操作。

name = input("what your name: ")
if name == 'Gumby':
    print("hello,Mr.Gumby")
else:
    print("hello")

但要注意,在if语句中只能有一个else语句

要处理多种情况的话,应使用elif语句。

4.4、elif语句

前文已经说了,在执行多种情况是要使用elif语句。

number = int(input("your number:"))
if number<3:
    print("number<3")
elif number>3:
    print("number>3")
else:
    print("数字不属于上述情况")

elif语句需要指定条件,而else不用。但elif语句可以有无数个,else只能有一个。

4.5、代码块嵌套

说白一点,代码块嵌套就是在循环内部加上另一个循环。

4.6、运算符

表达式 描述
x == y x等于y
x < y x小于y
x > y x大于y
x >= y x大于或等于y
x <= y x小于或等于y
x != y x不等于y
x is y x和y是同一个对象
x is not y x和y是不同的对象
x in y x是容器y的成员
x not in y x不是容器y的成员

4.7、断言

用于判断代码是否有问题,如果有则会让程序立即停止。

工作原理类似于下面的的代码

if not condition:
    crash program

(了解即可,异常时会详细说)

5、循环

简单来说,就是满足条件是重复执行循环体内的代码。循环有四要素:

  1. 循环的起点
  2. 循环的终点
  3. 循环要做的事
  4. 每次循环的变化

以上条件缺一不可,缺少一个就会变成死循环。

5.1、while循环

下面是一个while循环的示例

x = 1
while x <= 100:
    print(x)
    x += 1

循环的起点是x=1,终点是x<=100,循环要做的事是打印x,变化是每次循环后x都会加一。

5.2、for循环

while循环非常灵活,可用在条件为真时反复执行。但对序列执行操作时for循环更为合适。

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

这个for循环将words中的值依次存到word中,再打印出来。

有的时候需要一个范围内的数,这是需要使用range函数,这个函数可以生成一个范围内的所有整数。

>>> range(0,10)
range(0, 10)
>>> list(range(0,10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

注意:range生成的数包含开头的数但不包含结尾的数

使用for循环来打印1-100:

for num in range(0,101):
    print(num)

5.3、迭代字典

要遍历字典的所有关键字,可像遍历序列那样使用普通的for语句

d = {'x':1,'y':2,'z':3}
for key in d:
    print(key,'correspons to',d[key])

可使用d.items返回键值对,并在for循环中使用序列解包,把键和值分开。

d = {'x':1,'y':2,'z':3}
for key,value in d.items():
    print(key,'corresponds to ',value)

5.4、一些迭代工具

5.4.1、并行迭代

同时迭代两个序列

name = ['anne','beth','george','damon']
age = [12,45,32,102]
for i in range(len(name)):
    print(name[i],'is',age[i],'years old')

还有一个可以“缝合”两个序列的并行迭代工具——函数zip

它将两个序列组合,并返回一个由元组组成的序列。要查看内容,可以使用list转化为列表。

>>> list(zip(name,age))
[('anne', 12), ('beth', 45), ('george', 32), ('damon', 102)]

5.4.2、迭代时获取索引

strings = 'abcdxxx'
for index, string in enumerate(strings):
    if 'xxx' in string:
        strings[index] = '[censored]'

5.4.3、反向迭代和排序后再迭代

使用函数reversed和sorted可以返回修改后的版本。

5.5、跳出循环

循环会在条件满足是一直执行,但有的时候需要中断循环。

5.5.1、break

break可以直接中断整个循环,一般是在循环内嵌套if语句,当满足某一条件时跳出。

from math import sqrt
for n in range(99,0,-1):
    root = sqrt(n)
    if root == int(root):
        print(n)
        break

上面的循环从100开始向下迭代。找到一个平方值后跳出循环

5.5.2、continue

contiune没有break用的多,它结束当前迭代,并跳到下一次迭代开头,这个只会结束当前这一次循环,并不会中断纵膈循环。

5.6、列表推导

列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导,工作原理类似for循环

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

这个列表由range(10)内每个值的平方组成。

小结

函数 描述
chr(n) 返回一个字符串,其中只包含一个字符,这个字符对应于传入的顺序值n(0<=n<=256)
eval(source[,globals[,locals]]) 计算并返回字符串表示的表达式的结果
exec(source[, globals[,locals]]) 将字符串作为语句执行
enumerate(seq) 生成可迭代的索引--值对
ord(c) 接受一个只包含一个字符的字符串,并返回这个字符的顺序值
range([start, ] stop[, step]) 创建一个由整数构成的列表
reversed(seq) 按相反的顺序返回seq中的值,以便用于迭代
sorted(seq[,cmp] [,key] [,reverse]) 返回一个列表,其中包含seq中的所有值且这些值是经过排序的
xrange([start,] stop[, step]) 创建一个用于迭代的xrange对象
zip(seq1, seq2,......) 创建一个适合用于并行迭代的新序列

你可能感兴趣的:(python学习笔记(五)条件、循环及其他语句)