Python流程控制语句

简介: Python流程控制语句

一、分支结构

(一)单分支语句

只有 if 子句,但注意分支条件后的冒号(:)

如果分支只有一条语句,则可以写在一行上;

如果分支有多条语句,需要写成缩进的语句块。

score=90
if score>=90: print("优秀!")
 
if score>=90:
    print("优秀!")
    print("不要骄傲!")

(二)双分支语句

使用 if-else 子句,两个子句的语句或语句块都要采用缩进写法。

score=70
if score>=60:
    print("通过测试")
else:
    print("未通过测试")

双分支下的赋值语句存在简化写法:

level="通过测试" if score>=60 else "未通过测试"
print(level)

(三)多分支语句

if-elif-else 子句:每个子句中的语句或语句块都要采用缩进写法。

必须有一个if子句,可以根据需要有多个elif子句;

最多可以有一个else子句,也可以没有else子句;

满足哪个分支的条件就执行哪个,哪个都不满足则所有分支都不执行。

score=85
if score>=90:
    print("优秀")
elif score>=80:
    print("良好")
elif score>=70:
    print("中等")
elif score>=60:
    print("及格")
else:
    print("不及格")

没有else分支语句:

score=85
if score>=90:
    print("优秀")
elif score>=80:
    print("良好")
elif score>=70:
    print("中等")
elif score>=60:
    print("及格")
elif score<60:
    print("不及格")

(四)嵌套的分支语句

可以是if-else结构之间的嵌套,也可以是if-else结构中嵌套if-elif-else结构,要注意:缩进效果应该与嵌套关系保持对应。

为了程序可读性,多分支更建议使用if-elif-else结构,少嵌套!

score=75
if score>=60:
    if score>=70:
        if score>=80:
            if score>=90:
                print("优秀")
            else:
                print("良好")
        else:
            print("中等")
    else:
        print("及格")
else:
    print("不及格")

score=75
if score>=60:
    if score>=90:
        print("优秀")
    elif score>=80:
        print("良好")
    elif score>=70:
        print("中等")
    else:
        print("及格")
else:
    print("不及格")

二、循环结构

循环结构概述

当循环的最大次数已知时——for循环更简单

(1)所有情况下都可以使用while循环, for循环是while循环的特例,Python中没有直接可用的直到型循环(可以用while循环间接实现类似于C语言的do-while结构一类的直到型循环)

(2)循环体要写成语句块的缩进形式

(3)允许循环嵌套

(4)可以使用break和continue语句改变循环的执行流程

(5)else子句用于在正常退出循环后做进一步的处理

(一)for循环

一般形式:


for 当前元素 in 可迭代对象:

       循环体语句或语句组


表示对可迭代对象重复以下过程:按序取出一个元素,在循环体中处理该元素…直到全部元素都被取出并处理结束为止。

可迭代对象包括:字符串、列表、元组、字典、集合等容器类对象,下面分别是字符串和列表的例子:

for ch in 'hello':
    print("当前字符是{}".format(ch))

sum=0
for i in [1,3,5,7,9]:
    sum+=i
print(sum)

常用于for循环的range函数:

目前可近似认为range函数用于产生一个整数序列,其一般形式:为range(start,stop,step),三个参数分别代表初值、终值和步长,并且产生的序列中不包含终值,例如:

ls1=range(1,5,1)
type(ls1)
ls2=list(ls1)
ls2

说明:①range函数产生的不是一个列表对象,而是一个惰性可迭代对象,需要使用list()转换成列表对象才能查看其元素。

②近似看成是一个左闭右开的区间,其中不包含终值。

③当初值省略时,表示初值为0;当步长省略时,表示步长是1。

④当初值小于终值时,步长必须为正;当初值大于终值时,步长必须为负,这样序列中的元素个

数=abs(abs(终值-初值)//步长),否则序列为空!

list(range(5))

list(range(5,1,-1))

list(range(5,1,1))

(二)while循环

当循环控制条件为真时执行循环体;

常用于无法事先确定循环次数的场合,例如交互式输入中。

1、没有哨兵的while循环

#没有使用哨兵循环
from random import randint
num=randint(1,100)    #要猜的随机数
count=0    #统计猜中次数
contin='y'    #是否继续猜测的标志变量
while contin=='y':
    guess=int(input("请输入你猜的数字:"))
    if guess==num:
        print("恭喜猜中了")
        count+=1
        num=randint(1,100)
    elif guess>num:
        print("猜大了")
    else:
        print("猜小了")
    contin=input("要继续吗(y/n)? ")
print("游戏结束,你猜中了{}次".format(count))

说明:①本例使用while循环模拟了C语言中的do-while循环,因为循环体至少执行了一次。

②存在的问题:用户既要输入y/n,又要输入数字,考虑使用哨兵循环进行简化。

2、带有哨兵的while循环

哨兵是在循环算法中用来标志终止条件的值(本例中产生的随机数不可能是0,因此把0作为了哨兵值!)

#使用哨兵循环
from random import randint
num=randint(1,100)    #要猜的随机数
guess=int(input("请输入你猜的数字(输入0退出):"))
count=0    #统计猜中次数
while guess:
    if guess==num:
        print("恭喜猜中了")
        count+=1
        num=randint(1,100)
    elif guess>num:
        print("猜大了")
    else:
        print("猜小了")
    guess=int(input("请输入你猜的数字(输入0退出):"))
print("游戏结束,你猜中了{}次".format(count))

说明:①要把正常时不可能取到的值作为哨兵值。

②一定要在循环开始前对哨兵变量进行初始化,初始值需要根据情况而定,例如在处理字符串的问题中可以是空字符串。

③循环体中一定有改变哨兵变量的语句,否则就会死循环。

④本例属于标准while循环,因为循环体可能一次都不执行。

(三)break、continue语句与else子句

退出循环结构有两种方法:一种是从循环入口处因不满足循环控制条件而正常退出;另一种就是使用break语句在循环体中提前退出。

break语句会提前结束本层循环。注意:如果有循环嵌套时,并不提前结束外层循环。

continue语句是提前结束本次循环(即跳过continue语句后的其他语句)而马上开始本层的下一次循环(例如数7游戏:7的倍数以及含有7的数字都不能读出/输出)。

else子句只在有break语句出现在循环体的情况下才有意义,用于当循环正常退出时的处理,而当经由break提前退出时则不会执行else子句。

使用else子句可以简化退出循环后的条件判断和处理,它在for循环和while循环中都可以应用。

判断素数的两种写法:

方法一:

n=int(input("请输入一个整数(>1):"))
if n==2:
    print("{}是素数".format(n))
else:
    for i in range(2,n):
        if n%i==0:
            print("{}不是素数".format(n))
            break
        else:
            pass
    if i==n-1: 
        print("{}是素数".format(n))

方法二:

#一种通过修改循环控制条件而避免使用break的写法
n=int(input("请输入一个整数(>1):"))
if n==2:
    print("{}是素数".format(n))
else:
    i=2
    while i<n and n%i!=0:
        i+=1
    if i<n:
        print("{}不是素数".format(n))
    else:
        print("{}是素数".format(n))

说明:①n等于2需要单独处理,否则因为range(2,2)为空,会出错。

②循环体内的else子句可以不写,这里是为展示pass空语句的作用(起到占位效果,让代码结构完整,没有任何实际作用,可以在分支、循环等多种结构中使用)。

③for循环结束后的if条件用于判断循环是正常结束还是提前结束,可以考虑用else子句来替代。

④通过把break语句执行的条件适当修改后放入循环控制条件中,可以取消break语句的使用。

判断素数改进算法:

为提高效率,利用了平方根判别法并允许多次判别

注意break、continue语句以及for循环的else子句在本例的使用

注意永真的while循环的使用

import math
while True:
    m=input("请输入一个大于1的整数(按'q'退出):")
    if m=='q':
        print("程序结束!")
        break
    elif m.isalpha():
        print("你输入的不是大于1的整数,请正确输入!")
        continue
    n=int(m)
    k=int(math.sqrt(n))
    for i in range(2,k+1):    #可验证次循环对2也适用
        if n % i ==0:
            print("{}不是素数".format(n))
            break
    else:
        print("{}是素数".format(n))

三、异常处理

运行期检测到的错误被称为异常

(一)try-except-else-finally结构

以操作文件为例:

try:

       打开文件

except:

       提示打开文件出错

else:

       正常操作文件

finally:

       关闭文件

(二)异常处理示例

没有异常处理时的情形,程序报错无法继续运行。

有异常处理时的情形,程序可以继续运行,异常处理提高了程序健壮性。

#异常处理示例
m=input("请输入被除数(按'q'退出):")
n=input("请输入除数(按'q'退出):")
while m!='q'and n!='q':
    m=int(m)
    n=int(n)
    try:
        print("{}/{}={:.2f}".format(m,n,m/n))
    except ZeroDivisionError:
        print("除数n不能为0,请重新输入除数")
    else:
        m=input("请输入被除数(按'q'退出):")
    finally:
        n=input("请输入除数(按'q'退出):")
目录
相关文章
|
19天前
|
Python
Python循环语句(三)
Python循环语句(三)
55 1
Python循环语句(三)
|
4天前
|
Python
Python条件语句
Python条件语句
12 1
|
4天前
|
Python
Python循环语句
Python循环语句
|
4天前
|
存储 Python
Python while循环语句
Python while循环语句
11 0
|
6天前
|
Python
Python 条件语句
Python 条件语句
|
6天前
|
Python
Python 循环语句
Python 循环语句
|
19天前
|
Python
Python控制语句
Python控制语句
13 0
|
19天前
|
Python
Python系列(19)—— 条件语句
Python系列(19)—— 条件语句
|
19天前
|
编译器 Python
[Python] 可莉深入讲解条件语句
[Python] 可莉深入讲解条件语句
24 0
|
7月前
|
Python
python while循环语句
Python的while循环语句用于重复执行一段代码块,直到指定的条件不再满足。它是Python中最基本的循环结构之一,通过不断地检查条件来控制循环的执行。