本系列文章对应 Python 3 版本。

python拥有3种流程控制语句,分别为ifforwhile

if语句

if语句用来检查一个条件,如果条件为真则执行一个语句块(被称作if块),否则执行另一个语句块(被称作else块)。

其中else分支是可选的

1
2
3
4
5
6
7
8
if boolean_expression1:
suite1
elif boolean_expression2:
suite2
elif boolean_expression3:
suite3
else:
else_suite

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python
# Filename: if.py

number = 23
guess = int(input('Enter an integer : '))

if guess == number:
print('Congratulations, you guessed it.') # 新块开始处
print('(but you do not win any prizes!)') # 新块结束处
elif guess < number:
print('No, it is a little higher than that') # 另一个块
# 你可以在一个块里做任何你想做的。。。
else:
print('No, it is a little lower than that')
# 只有guess > number 才会执行到此处

print('Done')

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ python if.py
Enter an integer : 50
No, it is a little lower than that
Done

$ python if.py
Enter an integer : 22
No, it is a little higher than that
Done

$ python if.py
Enter an integer : 23
Congratulations, you guessed it.
(but you do not win any prizes!)
Done

这里我们使用的是elif分支,事实上它把两个相关的if else-if else语句组合成一个if-elif-else语句。这样做不仅使得程序更加简洁也降低了缩进数量。

注意到if语句的结尾包含一个冒号: – 它指示其后将跟随一个语句块。同样,elifelse语句 必须在逻辑行的结尾写上冒号 ,其后是与之对应的语句块(当然还要有相应的缩进)

最后你也可以在if语句中插入另一个if-block块,这叫做嵌套的if语句

小技巧:如果需要考虑某个特殊的情况,但又不需要在这种情况发生时进行处理,那么可以使用pass作为该分支的块,表示一个空语句块。)。
C/C++程序员请注意: python没有switch语句,你可以使用if…elif…else语句达到同样的目的(有时用字典代替会更加快捷)。

while 语句

只要条件为真,while语句允许你不断的重复执行语句块。

while语句是所谓循环语句的一个例子,它还可以拥有一个可选的else分支。

1
2
while boolean_expression:
suite

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/python
# Filename: while.py

number = 23
running = True

while running:
guess = int(input('Enter an integer : '))

if guess == number:
print('Congratulations, you guessed it.')
running = False # this causes the while loop to stop
elif guess < number:
print('No, it is a little higher than that.')
else:
print('No, it is a little lower than that.')
else:
print('The while loop is over.')
# Do anything else you want to do here

print('Done')

输出

1
2
3
4
5
6
7
8
9
$ python3 while.py
Enter an integer : 50
No, it is a little lower than that.
Enter an integer : 22
No, it is a little higher than that.
Enter an integer : 23
Congratulations, you guessed it.
The while loop is over.
Done
C/C++程序员注意: 记住,while循环可以拥有else分支

for…in 语句

for…in是另一种循环语句,用来遍历序列对象,也就是说遍历序列中的每个元素。

1
2
for variable in iterable:
suite

示例

1
2
3
4
5
6
7
#!/usr/bin/python
# Filename: for.py

for i in range(1, 5):
print(i)
else:
print('The for loop is over')

输出

1
2
3
4
5
6
$ python for.py
1
2
3
4
The for loop is over

记住,else部分同样是可选的,除非使用break语句跳出循环否则它总是在循环结束时执行一次。

还应记住,for…in可以工作于任何序列,这里我们使用的是内建函数range产生的数字列表,

但我们也可以使用任何种类的对象组成的任何种类的序列!后面的章节会有具体解释。

C/C++/Java/C#请注意

python 的 for 循环完全不同于 C/C++ 的 for 循环。

C# 程序员应该已经注意到它类似于 C# 中的 foreach 循环。

而 Java 程序员也应该注意到了 Java 1.5 的 for(int i : IntArray) 与之很相似。

如果你想实现 C/C++ 中的 for(int i = 0; i< 5; i++) ,python 中只需编写 for i in range(0, 5)

如你所见, python 的 for 循环更简单,更富于表达力也更不容易出错。

break语句

break语句用于跳出循环,即停止循环语句的执行,即使循环条件还没有变为False或者序列的遍历尚未完成。

一个需要特别注意的地方是如果你使用break跳出for或while循环,那么相关的else块不会被执行

示例

1
2
3
4
5
6
7
8
9
#!/usr/bin/python
# Filename: break.py

while True:
s = (input('Enter something : '))
if s == 'quit':
break
print('Length of the string is', len(s))
print('Done')

输出

1
2
3
4
5
6
7
8
9
10
11
$ python break.py
Enter something : Programming is fun
Length of the string is 18
Enter something : When the work is done
Length of the string is 21
Enter something : if you wanna make your work also fun:
Length of the string is 37
Enter something : use Python!
Length of the string is 12
Enter something : quit
Done

continue 语句

语句continue告诉python跳过当前循环语句块的剩余部分执行下次迭代

示例

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python
# Filename: continue.py

while True:
s = input('Enter something : ')
if s == 'quit':
break
if len(s) < 3:
print('Too small')
continue
print('Input is of sufficient length')
# Do other kinds of processing here...

输出

1
2
3
4
5
6
7
8
$ python test.py
Enter something : a
Too small
Enter something : 12
Too small
Enter something : abc
Input is of sufficient length
Enter something : quit

Comments