4.条件和循环
4.1 赋值
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
这在使用返回元组(或其他序列或可迭代对象)的函数或方法时很有用。假设要从字典中随 便获取(或删除)一个键值对,可使用方法popitem,它随便获取一个键-值对并以元组的方式 返回。接下来,可直接将返回的元组解包到两个变量中。
>>> scoundrel = {'name': 'Robin', 'girlfriend': 'Marion'}
>>> key, value = scoundrel.popitem()
>>> key
'girlfriend'
>>> value
'Marion'
这让函数能够返回被打包成元组的多个值,然后通过一条赋值语句轻松地访问这些值。要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。
可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,如下例所示:
>>> a, b, *rest = [1, 2, 3, 4]
>>> rest
[3, 4]
2.链式赋值
链式赋值是一种快捷方式,用于将多个变量关联到同一个值,但只涉及一个值。
如:x=y=15
3.增强赋值
可以不编写代码x = x + 1,而将右边表达式中的运算符(这里是+)移到赋值运算符(=)的前面,从而写成x += 1。这称为增强赋值,适用于所有标准运算符,如*、/、%等。
4.2条件语句
if 条件 :
elif 条件 :
else :
循环嵌套
number = int(input('Enter a number between 1 and 10: '))
if number <= 10:
if number >= 1:
print('Great!')
else:
print('Wrong!')
else:
print('Wrong!')
4.3循环
1.while循环
x = 1
while x <= 100:
print(x)
x += 1
还可以 使用循环来确保用户输入名字,如下所示:
name = ' '
while not name:
name = input('Please enter your name: ')
print('Hello, {}!'.format(name))
2.for循环
while语句非常灵活,可用于在条件为真时反复执行代码块。这在通常情况下很好,但有时 候你可能想根据需要进行定制。一种这样的需求是为序列(或其他可迭代对象)中每个元素执行 代码块。
为此,可使用for语句:
words = ['this', 'is', 'an', 'ex', 'parrot']
for word in words:
print(word)
鉴于迭代(也就是遍历)特定范围内的数是一种常见的任务,Python提供了一个创建范围的内置函数。
>>> range(0, 10)
range(0, 10)
>>> list(range(0, 10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(0,10,2)表示遍历0-10,步长为2
3.跳出循环
通常,循环会不断地执行代码块,直到条件为假或使用完序列中的所有元素。但在有些情况 下,你可能想中断循环、开始新迭代(进入“下一轮”代码块执行流程)或直接结束循环。
break
from math import sqrt
for n in range(99, 0, -1):
root = sqrt(n)
if root == int(root):
print(n)
break
如果你运行这个程序,它将打印81并结束。注意到我向range传递了第三个参数——步长, 即序列中相邻数的差。
continue
语句continue没有break用得多。它结束当前迭代,并跳到下一次迭代开头。这基本上意味 着跳过循环体中余下的语句,但不结束循环。这在循环体庞大而复杂,且存在多个要跳过它的原 因时很有用。在这种情况下,可使用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 was ', word)
while True导致循环永不结束,但你将条件放在了循环体内的一条if语句中,而这条if语句 将在条件满足时调用break。这说明并非只能像常规while循环那样在循环开头结束循环,而是可 在循环体的任何地方结束循环。