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'退出):")
目录
相关文章
|
1月前
|
编译器 数据安全/隐私保护 Python
Python 条件语句
【10月更文挑战第6天】
|
3月前
|
Python
3:Python条件语句
这段Python代码展示了if语句的三种使用方式:基础if-else结构、嵌套if语句以及if-elif-else链。基础结构根据条件执行或跳过代码块;嵌套结构允许在if语句中包含另一个if语句,实现更复杂的逻辑判断;if-elif-else链则用于检查多个条件,并在满足第一个真条件时执行相应代码块,若所有条件均不满足,则执行else中的代码。最后都会输出&#39;M6&#39;。
|
4月前
|
程序员 Python
Python条件语句
【7月更文挑战第23天】Python作为一种高级编程语言,以其简洁、易读的语法而闻名。条件语句和循环结构是Python中的两个基本编程概念,它们为程序员提供了在程序中进行逻辑判断和重复执行代码块的能力。本文将深入探讨Python中的条件语句和循环结构,并提供详细的代码实例来说明其用法。
49 1
|
6月前
|
Python
Python控制语句
Python控制语句
35 0
|
6月前
|
程序员 索引 Python
Python 流程控制
Python 流程控制
40 0
|
6月前
|
程序员 Python
Python中的流程控制
Python中的流程控制
36 0
Python中的流程控制
|
6月前
|
Python
Python系列(19)—— 条件语句
Python系列(19)—— 条件语句
|
6月前
|
编译器 Python
[Python] 可莉深入讲解条件语句
[Python] 可莉深入讲解条件语句
59 0
|
索引 Python
python流程控制
python流程控制
86 0