python的分支循环
知识内容:
1.if-else分支结构
2.while循环
3.for循环
4.循环结构综述
5.break和continue语句
一、if-else分支结构
1.单分支选择结构
1 if 表达式: 2 语句块
当表达式等价为True时表示条件满足,语句块将被执行
示例:
1 x = input("Input two numbers: ") 2 a, b = map(int, x.split()) 3 if a > b: 4 a, b = b, a 5 print(a, b)
2.双分支选择结构
1 if 表达式: 2 语句块1 3 else: 4 语句块2
当表达式等价为True时表示条件满足,语句块1将被执行,否则语句块2将执行
示例:
1 x = input("Input two numbers: ") 2 a, b = map(int, x.split()) 3 if a > b: 4 a, b = b, a 5 else: 6 pass # 在python中pass表示不做任何操作 7 print(a, b)
1 my_age = 21 2 if my_age > 50: 3 print("Too old! Time to retire!") 4 else: 5 print("还可以继续浪")
注: python中还有适用于简单表达式的二分支结构(也叫三元运算):
<表达式> if 条件 else 表达式2
eg:
1 guess = eval(input(">>>")) 2 3 print("猜{}了".format("对" if guess==99 else "错")) # guess为99输出对 否则输出错
3.多分支选择结构
1 if 表达式1: 2 语句块1 3 elif 表达式2: 4 语句块2 5 elif 表达式3: 6 语句块3 7 . 8 . 9 . 10 else: 11 语句块n
以上的elif是else if的缩写,示例如下:
1 # __author__ = "wyb" 2 # date: 2018/3/11 3 4 def f(score): 5 if score > 90: 6 print("A") 7 elif score > 80: 8 print("B") 9 elif score > 70: 10 print("C") 11 elif score > 60: 12 print("D") 13 else: 14 print("E") 15 16 f(83) # 输出结果: B
4.以上选择结构的嵌套
示例: 3数比较大小
1 # __author__ = "wyb" 2 # date: 2018/2/24 3 4 # 输入三个整数,比较大小按从小到大的顺序输出 5 6 number1 = int(input(">>>")) 7 number2 = int(input(">>>")) 8 number3 = int(input(">>>")) 9 10 if number1 < number2: 11 if number2 < number3: 12 print(number1, number2, number3) 13 elif number3 < number1: 14 print(number3, number1, number2) 15 else: 16 print(number1, number3, number2) 17 else: 18 if number1 < number3: 19 print(number2, number1, number3) 20 elif number2 < number3: 21 print(number2, number3, number1) 22 else: 23 print(number3, number2, number1)
注: 使用选择结构的嵌套一定要注意严格控制好不同级别的代码缩进量,因为不同的代码缩进量绝对了不同代码块的从属关系以及业务逻辑是否能很好地实现。
二、while循环
1.while循环语法
(1)普通的while循环
1 while 条件表达式: 2 循环体
当条件表达式等价为True时循环体一直运行,等价为False时直接退出循环体
(2)带else子句的while循环
1 while 条件表达式: 2 循环体 3 else: 4 代码块
上述循环中的else:
如果循环是从break终止,就跳出循环,不执行else中的代码块,如果循环正常结束就执行else中的代码块,for循环中的else
也是一样的原理
2.while循环示例
死循环:
1 while True: 2 print("我爱你啊")
写while循环要尽量避免上述的死循环,可以在while后面的条件表达式中设置退出条件或者在循环体中设置break语句来退出循环体
登陆验证:
1 # __author__ = 'wyb' 2 # date: 2018/3/11 3 4 user = "wyb" 5 pwd = "666" 6 counter = 0 7 while counter < 3: # counter == 3 时退出循环体并执行else子句 8 # 输入用户名及密码: 9 username = input("Username:") 10 password = input("Password:") 11 # 用户名及密码正确: 12 if username == user and password == pwd: 13 print("Welcome %s login...." % user) 14 break # 跳出,中断 15 # 用户名及密码有任一项不正确或都不正确: 16 else: 17 print("Invalid username or password !") 18 counter += 1 19 # counter == 3 时用户选择是否继续 20 if counter == 3: 21 keep_going_choice = input("还想玩么?[y/n]") 22 if keep_going_choice == "y": 23 counter = 0 24 25 else: 26 print("要不要脸,臭流氓啊,小虎。")
三、for循环
1.for循环语法
(1)普通for循环
1 for 取值 in 序列或迭代对象: 2 循环体
枚举或遍历序列中的每一个值,或迭代对象中所有元素
(2)带else子句的for循环
1 for 取值 in 序列或迭代对象: 2 循环体 3 else: 4 代码块
上述循环中的else:
如果循环是从break终止,就跳出循环,不执行else中的代码块,如果循环正常结束就执行else中的代码块,while循环中的else
也是一样的原理
2.range函数
语法: range(end)或range(start, end)或range(start, end, step)
range函数根据给定的参数产生一系列整数,返回一个range对象,range对象类似于生成器,生成器利用了堕性计算的机制,不会一次性计算出所有的值,而是用多少就算多少。range函数一般都是与for循环连用。
start->起始值(包括,缺省时默认为0)
end->终止值(不包括,必须有的参数)
step->步长(默认为1)
1 # range函数示例 2 for i in range(10): 3 print(i, end=' ') 4 print() 5 6 for i in range(3, 9): 7 print(i, end=' ') 8 print() 9 10 for i in range(1, 10, 2): 11 print(i, end=' ') 12 print() 13 14 for i in range(10, 0, -1): 15 print(i, end=' ') 16 print() 17 18 for i in range(10, 0, -2): 19 print(i, end=' ') 20 print() 21 # 输出结果: 22 # 0 1 2 3 4 5 6 7 8 9 23 # 3 4 5 6 7 8 24 # 1 3 5 7 9 25 # 10 9 8 7 6 5 4 3 2 1 26 # 10 8 6 4 2
3.for循环示例
遍历列表输出所有元素:
1 mylist = [1, 'wyb', 'k', 666] 2 for item in mylist: 3 print(item, end=" ") 4 else: 5 print("正常结束") 6 7 # 输出结果: 1 wyb k 666 正常结束
求100以内的所有奇数的和(2500):
1 # 求100以内所有奇数的和(2500): 2 sum_odd = 0 3 for i in range(1, 100, 2): 4 sum_odd += i 5 else: 6 print(sum_odd)
四、循环结构综述
1.while循环和for循环
关于while循环和for循环,while循环一般用于循环次数难以确定的情况下,当然也可以用于循环次数确定的情况,for循环一般用于循环次数确定的情况,尤其适用于
枚举或遍历序列或迭代对象中每一个元素的情况下,编程中建议多使用for循环,因为使用for循环可以对循环的起始和终止看的更清楚
2.循环结构的嵌套
另外相同或不同的循环结构之间也可以互相嵌套,也可以和选择结构嵌套使用,实现更复杂的逻辑
示例:
1 # __author__ = "wyb" 2 # date: 2018/3/11 3 # 交换运算符: x, y = y, x 直接交换两个变量的内容无需用到中间变量 4 5 # 实现从小到大排序 6 mylist = [4, 0, 3, -13, 5, 8, 31] 7 print("before sort:") 8 print(mylist) 9 10 len_list = len(mylist) 11 for i in range(0, len_list-1): 12 for j in range(i+1, len_list-1): 13 if mylist[i] > mylist[j]: 14 mylist[i], mylist[j] = mylist[j], mylist[i] 15 16 print("after sort:") 17 print(mylist)
3.循环结构的优化
(1)为优化程序以获得更高的效率和运行速度,在编写循环语句时,应尽量减少循环体内部不必要的计算,将与循环变量无关的代码尽量移到循环之外。对于使用了
多层循环嵌套的情况下,应尽量减少内层循环不必要的计算,尽可能地将循环往外提。
比如在以下的代码中,第二种明显比第一种的运行效率更高:
1 # __author__ = "wyb" 2 # date: 2018/3/11 3 4 import time 5 digits = [1, 2, 3, 4] 6 7 result = [] 8 start = time.time() 9 for v in range(1000): 10 for i in digits: 11 for j in digits: 12 for k in digits: 13 result.append(i*100+j*10+k) 14 print(time.time()-start) 15 print(result)
1 # __author__ = "wyb" 2 # date: 2018/3/11 3 4 import time 5 digits = [1, 2, 3, 4] 6 7 result = [] 8 start = time.time() 9 for v in range(1000): 10 for i in digits: 11 i = i * 100 12 for j in digits: 13 j = j * 10 14 for k in digits: 15 result.append(i+j+k) 16 print(time.time()-start) 17 print(result)
(2)在循环中尽量引用局部变量,因为局部变量的查询和访问速度比全局变量稍微快一点,另外在使用模块中的方法时可以通过将其转换成局部变量来提高运行速度
示例:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # __author__ = "wyb" 2 # date: 2018/3/11 3 4 import time 5 import math 6 7 start = time.time() 8 for i in range(100000): 9 math.sin(i) 10 print("Time Used:", time.time()-start) 11 12 loc_sin = math.sin 13 start = time.time() 14 for i in range(100000): 15 loc_sin(i) 16 print("Time Used:", time.time()-start)
五、break和continue语句
break -> 提前结束整个循环
continue -> 终止本次循环忽略continue语句之后的所有语句直接回到循环的顶端,开始新的一次循环
示例:
1 # __author__ = 'wyb' 2 # date: 2018/3/11 3 4 exit_flag = False 5 6 for i in range(10): 7 if i < 5: 8 continue 9 print(i) 10 for j in range(10): 11 print("layer2", j) 12 if j == 6: 13 exit_flag = True 14 break 15 if exit_flag: 16 break
break与continue的区别:
break用于完全结束一个循环,直接跳出循环体执行循环体后面的语句
而continue和break有点类似,区别在于continue只是终止本次循环,接着还会执行后面的循环,break则完全终止循环