1.while
>>> # Fibonacci series:
... # the sum of two elements defines the next
... a, b = 0, 1
>>> while b < 10:
... print(b)
... a, b = b, a+b
...
1
1
2
3
5
8
-
第一行包含多个赋值:变量
a
并b
同时获取新值0和1.在最后一行再次使用它,证明在任何赋值发生之前,右边的表达式都是先评估的。右侧表达式从左到右进行评估。 -
while
只要条件(此处为:)保持为真,循环就会执行。在Python中,就像在C中一样,任何非零整数值都是真的; 零是假的。条件也可以是字符串或列表值,实际上是任何序列; 任何长度非零的东西都是真的,空序列都是假的。
关键字参数end可用于在输出后避免换行,或者使用不同的字符串结束输出:
>>> a, b = 0, 1
>>> while b < 1000:
... print(b, end=',')
... a, b = b, a+b
...
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
2.if ,elif
>>> x = int(input("Please enter an integer: "))
Please enter an integer: 42
>>> if x < 0:
... x = 0
... print('Negative changed to zero')
... elif x == 0:
... print('Zero')
... elif x == 1:
... print('Single')
... else:
... print('More')
...
More
3.for
Python的for
语句迭代任何序列的项目(列表或string),按照它们出现在序列中的顺序。
>>> # Measure some strings:
... words = ['cat', 'window', 'defenestrate']
>>> for w in words:
... print(w, len(w))
...
cat 3
window 6
defenestrate 12
如果您需要修改在循环内迭代的序列(例如复制所选项目),建议您先复制一份。迭代序列不会隐式地复制。切片表示法使这特别方便:
>>> for w in words[:]: # Loop over a slice copy of the entire list.
... if len(w) > 6:
... words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']
4.range()函数
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
给定的终点永远不是生成序列的一部分; range(10)
生成10个值,长度为10的序列的项目的合法索引。可以让范围从另一个数字开始,或者指定不同的增量(甚至是负数;有时这称为“步骤”):
range(5, 10)
5, 6, 7, 8, 9
range(0, 10, 3)
0, 3, 6, 9
range(-10, -100, -30)
-10, -40, -70
要遍历序列的索引,您可以组合range()
并 len()
如下:
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
如果你只打印一个范围,就会发生一件奇怪的事:
>>> print(range(10))
range(0, 10)
在许多方面,返回的对象range()
表现得好像它是一个列表,但事实上并非如此。它是一个对象,当您迭代它时,它返回所需序列的连续项,但它并不真正使列表,从而节省空间。
我们说这样的对象是可迭代的,也就是说,适合作为函数和构造的目标,这些函数和构造期望在供应耗尽之前它们可以从中获得连续的项目。我们已经看到该for
语句是一个迭代器。功能list()
是另一个; 它从迭代创建列表:
>>> list(range(5))
[0, 1, 2, 3, 4]
5.break
和continue
语句以及else
循环条款
在break
声明中,类似于C,爆发最内层的 for
或while
循环。
循环语句可能有一个else
子句; 当循环通过列表耗尽(with for
)或条件变为false(with while
)时终止,但是当循环被break
语句终止时不执行它。这通过以下循环来举例说明,该循环搜索素数:
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print(n, 'equals', x, '*', n//x)
... break
... else:
... # loop fell through without finding a factor
... print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
(是的,这是正确的代码,仔细一看:该else
条款属于for
循环,不是的if
。陈述)
当循环使用,该else
条款有更多的共同点与 else
一个条款try
声明比它认为的 if
语句:一个try
语句的else
时候也不例外条款发生运行和循环的else
条款时没有运行break
发生。有关try
语句和异常的更多信息,请参阅 处理异常。
该continue
声明也是从C借用的,继续循环的下一次迭代:
>>> for num in range(2, 10):
... if num % 2 == 0:
... print("Found an even number", num)
... continue
... print("Found a number", num)
Found an even number 2
Found a number 3
Found an even number 4
Found a number 5
Found an even number 6
Found a number 7
Found an even number 8
Found a number 9
6.pass
陈述
pass
语句什么也不做。当语法需要语句但程序不需要操作时,可以使用它。例如:
>>> while True:
... pass # Busy-wait for keyboard interrupt (Ctrl+C)
...
这通常用于创建最小类:
>>> class MyEmptyClass:
... pass
...
pass
当您处理新代码时,可以使用另一个地方作为函数或条件体的占位符,允许您在更抽象的层次上继续思考。将pass
被自动忽略:
>>> def initlog(*args):
... pass # Remember to implement this!
...