胶水Python

Python基础4: 判断与循环

2019-05-31  本文已影响2人  爱折腾的大懒猪

四. 控制流(判断和循环)

控制流是编程中重要的部分, 尤其在面向过程编程中十分重要. 各种编程语言的控制流大同小异, python的控制流十分简单, 有其余编程基础的只需看两眼语法即可.

4.1 if...elif...else... 条件语句

条件判断语句用于控制程序的走向, 就像交叉路口一样, 不同条件下程序走不同的路径. 条件判断语句是使得程序具有 类似人的"判断" 能力的核心.

### if  elif  else
if condition1:
    statement1
elif condition2:
    statement2
else:
    statement3
    
### 嵌套  
if condition1:
    statement1
    if condition2:
        statement2
    else:
        statement3
else:
    statement4
  • 如果较简单可以写在一行: if condition: statement
  • python里面没有case, switch 一类的选择语句, 可以通过 if 来完成.

条件表达式

条件表达式是根据表达式的结果, 有条件地进行赋值. 例如:

# if语句
if a<b:
    minvalue=a
else:
    minvalue=b

# 条件表达式    
minvalue=a if a<b else b

在列表推导式里面常用条件表达式:

有两类形式:

[ x*x for x in range(10) if x%2==0 ]
## [0, 4, 16, 36, 64]
[ x*x for x in range(10) if x%2==0 if x>5 ]
## [36, 64]
[ x*x if  x%2==0 else x**3 for x in range(10) ]
## [0, 1, 4, 27, 16, 125, 36, 343, 64, 729]

4.2 for 循环

循环是编程里极为常用和重要的部分, 通过循环可以反复进行操作, 帮助人从繁琐工作中脱身. python支持for循环和while循环, 没有别的语言里的像goto, do等循环.

循环条件是判断循环是否继续执行的部分. 无论for还是while循环都有这部分. for循环使用的是成员检查in的条件, 当循环变量属于范围时, 则继续进行循环的结构部分.

对于循环条件:

在对序列进行for in时,尽量不要对该序列进行删增,排序等操作,易错(可能干扰迭代器)!最好先用一个替代序列seq2=seq1[:]来赋值进行操作。注意后面的例子.

对于循环内容:

# for 循环一般形式
for i in iterableObj:
    statement;

# 可迭代对象例如: list/tuple/set/string
for i in iterobj:
##### 判断是否可迭代对象:
from collections import Iterable
isinstance(obj, Iterable);

# 嵌套循环(可嵌套for或while循环): 
for i in range(1,100,10):
    ## 1 11 21 ... 91
    for j in range(10):
        ## 0 1 2 ... 9
        print i+j
## 1 2 3 ... 100

# 使用else子句, 注意break的情况
for i in range(1,100,input("Enter an Interval:\n")):
    if i % 17 == 0: 
        print "Number",i," found! Break!"
        break
else:
    print "Can't find number!"
## 输入3: Number 34  found! Break!
## 输入13: Can't find number!

# for循环变量不被循环过程所改变
for i in range(10):
    i+=2
    print i
## 2 3 ... 10 11

# 改变可迭代对象会影响循环:
k=range(10)
j=0
for i in k:
    k[j+1]=k[j+1]**2
    k.append(k[j+1])
    j+=1
    print i
## 0 1 4 9 16 25 36 49 64 81 1 16 81 256 625 1296 2401 4096 6561 1 256 6561 ...
### 在该循环中, 既改变了迭代对象列表k的每项的值, 同时还不停增长k的长度, 因此该循环导致死循环.


# 使用创建的数列来控制循环
for i in range(start, end, step):

# 经常会使用计数来记录循环运行次数或作索引
n=0
for i in range(1,100,3):
   print "Index %d is %d;" % (n,i),
   n+=1 
## Index 0 is 1; Index 1 is 4; ... Index 31 is 94; Index 32 is 97;

# 对于列表, 循环数值同时亦可以记录对应索引值,可以使用 enumerate函数 (会进行解包)
### 上述例子可以改为: 
for index, value in enumerate(range(1,100,3)):
    print "Index %d is %d;" % (index,value),

# 利用zip来合并序列的项, 并解包
for x, y in zip([1,2,3,4],'hello'):
    print y,x,
## h 1 e 2 l 3 l 4
    
# 对于字典, 循环控制比较特殊
### 循环字典的键: 
for key in dict:
### 循环字典的值
for val in dict.values():
### 同时循环字典的键和值 
for key,val in dict.items():

# 可以对于文件对象, 逐行读出文件内容:
f=open('filename')
for line in f:
    print line

相关函数学习

除了上面数据结构中提及的range, xrange, reversed, sorted用于产生列表或者迭代器外, 这些可以用作for的可迭代对象, 除此以外, 还有以下相关的:

4.3 while循环

while循环是自定义条件的循环, 格式是while 条件: 语句块, 只要条件返回True,就执行后面的语句块.

while condition:
    statement;
[else:]
    [statement;]
    
while True:
    statement1
    
    if condition:
        statement2
        break

在别的语言里面, 循环还有do until/whilegoto语句可以用于循环, 但python并不支持. 可以用while循环来实现(goto比较特殊, 由于容易出错一般避免使用)

4.4 break, continue, exit

这三个关键词(exit是函数) 主要是控制循环的执行, 在一定情况下跳出循环或跳过后续, 一般和条件判断语句结合使用.

另外也有一个单词的独立语句:

上一篇下一篇

猜你喜欢

热点阅读