欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-15 18:49:57
...

个人笔记,仅供参考

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

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© 接受一个只包含一个字符的字符串,并返回这个字符的顺序值
range([start, ] stop[, step]) 创建一个由整数构成的列表
reversed(seq) 按相反的顺序返回seq中的值,以便用于迭代
sorted(seq[,cmp] [,key] [,reverse]) 返回一个列表,其中包含seq中的所有值且这些值是经过排序的
xrange([start,] stop[, step]) 创建一个用于迭代的xrange对象
zip(seq1, seq2,…) 创建一个适合用于并行迭代的新序列
相关标签: python学习笔记