第4章-程序的流程控制

发布于:2024-07-06 ⋅ 阅读:(34) ⋅ 点赞:(0)
#本章目标
了解程序的描述方式
了解程序的组织结构
掌握顺序结构
掌握循环结构forwhile
掌握程序跳转语句breakcontinue
掌握pass空语句

1,程序的描述方式

1,自然语言:就是是用人类语言,直接描述程序

image.png

2,流程图:用一系列图形,流程线和文字说明描述程序的基本操作和控制流程。主要适用于较短的算法

image.png

3,伪代码:是介于自然语言和编程语言之间的一种算法描述语言,如果程序比较小,可以直接使用代码描述。image.png

2,程序的组成结构

image.png

顺序结构

安装程序语句的自然顺序,从上到下,依次执行每条语句的程序。

image.png

#赋值运算符的顺序:从右向左
a=10
a=b=c=d=10      #链式赋值
a,b,c,d,e='linux'      #字符串分解赋值
print(a)
print(b)
print(c)
print(d)
print(e)

print('-----输入/输出-----')
name=input('请输入您的姓名:')
age=eval(input('请输入您的年龄:'))
luch_number=eval(input('请输入您的幸运数字:'))
print('姓名:',name)
print('年龄:',age)
print('数字:',luch_number)

选择结构***

也称为分支结构,是按照条件选择执行不同的代码段。

单分支结构 if
#语法结构:
if  表达式:
    语句块

image.png

number=eval(input('请输入您的6位中奖号码:'))
#使用if语句
if number==123456:      #等值判断
    print('恭喜您,中奖了!')

if number!=123456:
    print('您没有中奖!')

print('-----以上if判断的表达式,是通过比较运算符计算出来的,结果是布尔值类型----')
n=66    #赋值
if n%2:     #66%2的余数是0,0的布尔值是False,非0的布尔值是True。
    print(n,'是奇数!')     #由于66%2余数是0,所以此代码不执行
    pass

if not n%2:     #66%2的余数是0,0的布尔值是False,not False的结果为True。
    print(n,'为偶数!')
    pass

print('-----判断一个字符串是否是空字符串-----')
x=input('请输入一个字符串:')

if x:   #在Python中一切皆对象,每一个对象都有一个布尔值。非空字符串的布尔值为True,空字符串的布尔值为False。
    print('x是一个非空字符串!')
    pass
if not x:   #空字符串的布尔值为False,取反,not False的结果为True。
    print('x是一个空字符串')

print('-----表达式也可以是一个单纯的布尔值变量-----')
flag=eval(input('输入一个布尔类型的值(True|False)'))
if flag:
    print('flag的值为True!')
    pass
if not flag:
    print('flag的值为False!')
    pass

print('-----使用if语句时,如果语句块中只有一句代码,可以将语句块直接写在冒号的后面-----')
a=10
b=5
if a>b:max=a
print('a和b的最大值为:',max)
双分支结构 if…else…
#语法结构
if 表达式:
    语句1
    pass
else:
    语句2

image.png

number=eval(input('请输入您的6位中奖号码:'))
#使用if语句
if number==123456:      #等值判断
    print('恭喜您,中奖了!')
    pass
else:
    print('您没有中奖!')
    pass

print('-----以上代码使用条件表达式(三元运算符)进行简化------')
result='恭喜您中奖啦!' if number==123456 else '您未中奖!'
print(result)
#条件表达式(三元运算符)语法结构:
x if 判断条件 else y
#运算规则
如果判断条件的布尔值为True。条件表达式的返回值为x,否则条件表达式的返回值为False
多分支结构
#语法结构
if 表达式1:
	语句块1
elif 表达式2: 
	语句块2
elif 表达式n:
	语句块n
else:
	语句块n+1

image.png

score=eval(input('请输入您的成绩:'))
#多分支结构
if score<0 or score>100:
    print('成绩出错')
elif 0<=score<60:
    print('E')
elif 60<=score<70:
    print('D')
elif 70<=score<80:
    print('C')
elif 80<=score<90:
    print('B')
else:
    print('A')
语句嵌套

image.png

answer=input('请问,您喝酒了吗?')
if answer=='Y':
    proof=eval(input('请输入酒精含量:'))
    if proof<20:
        print('构不成酒驾,注意安全!')
    elif proof<80:
        print('已达到酒驾,请不要开车!')
    else:
        print('您已达到醉酒标准,请下车接受配合!')

else:
    print('谢谢配合,您未喝酒!')

条件结构***

and条件下

在使用and连接多个条件判断时,只有同时满足多个条件,才会执行if后面的语句块。

image.png

user_name=input('请输入您的用户名:')
pwd=input('请输入您的密码:')
if user_name=='li' and pwd=='888888':
    print('登录成功')
    pass
else:
    print('登录失败')
or条件下

使用or连接多个判断条件时,只要满足多个条件中的一个,就可以执行if后面的语句块

image.png

score=eval(input('请输入您的成绩:'))
if score<0 or score >100:
    print("成绩有误!")
    pass
else:
    print('您的成绩为:',score)

Python3.11的新特性-模式匹配(match)

测试之前看一下自己的版本

score=eval(input('请输入成绩等级:'))
match score:
    case 'A':
        print('优秀')
    case 'B':
        print('良好')
    case 'C':
        print('中等')
    case 'D':
        print('及格')
    case 'E':
        print('不及格')

3,循环结构***

在Python中循环结构分两类,一类是遍历循环结构for,一类是无限循环结构while

for循环

image.png

#for结构:(基础版)
#遍历对象可以是:如列表、字符串、元组、字典、集合等序列类型
for 循环变量  in  遍历对象:	
    语句块

#for...else结构:(加强版)
#else只有在循环正常结束之后才会执行。例如:遇见break终端就是不正常的。
for 循环变量  in  遍历对象:
    语句块1
else:
    语句块2 
#遍历字符串
for i in 'hello':
    print(i)
print('----------')
#range()函数,Python中的内置函数,产生一个[n,m)的整数序列,包含n,的呐不包含m。
for i in range(1,11):
    #print(i)
    if i%2==0:
        print(i,'是偶数')
print('----------')
#计算1~10直接的累加和
s=0     #用来存放累加和
for i in range(1,11):
    s+=i
print('累加和是:',s)

print('-----计算100到999之间的水仙花数-----')
'''
水仙花数的说明例如:153=1*1*1+5*5*5+3*3*3
'''
for i in range(100,1000):
    ge=i%10     #获得个位上的数。例如:153%10--->3
    shi=i//10%10    #获得十位上的数。例如:153//10-->15,15%10-->5
    bai=i//100       #获得百位上的数。例如:153/100-->1
    #进行判断
    if ge**3+shi**3+bai**3==i:
        print(i)
        pass
    pass

#for...else
s=0
for i in range(1,11):
    s+=i
    pass
else:
    print('1~10之间的累加和为:',s)

while循环

image.png

#while结构
while 表达式:
    语句块

#while...else...结构(没有break中断就执行语句块2)
while 表达式:
    语句块1
else:
    语句块2
  
#步骤1)初始化变量
(2)条件判断
(3)语句块
(4)改变变量
#判断是否要上课
#(1)初始化变量
answer=input('今天要上课吗?(y/n):')
while answer=='y':  #(2)条件判断
    print('坚持上课,学好Python')  #(3)语句块
    #(4)改变变量
    answer=input('今天要上课吗?(y/n):')

    
#while计算1~100之间的累加和
s=0 #存储累加和
i=1 #(1)初始化变量
while i<=100:    #(2)条件判断
    s+=i    #(3)语句块
    i+=1   #(4)改变变量
print('1~100的和为:',s)    

#while计算1~100之间的累加和
s=0 #存储累加和
i=1 #(1)初始化变量
while i<=100:    #(2)条件判断
    s+=i    #(3)语句块
    i+=1   #(4)改变变量
else:
    print('1~100的和为:',s)
使用while循环模拟用户登录*
#(1)初始化变量
i=0
while i<3:   #(2)条件判断 0 1 2
    #(3)语句块
    user_name=input('请输入您的用户名:')
    pwd=input('请输入您的密码:')
    #登录操作,if...else...
    if user_name=='li' and pwd=='888888':
        print('系统正在登录中....')
        #需要改变循环变量。目的:退出循环。
        i=8     #第三行 判读i<3,8<3 false退出while循环。改变变量
    else:
        if i<2:
             print('用户名或密码不正确,您还有',2-i,'次机会')
        i+=1 #相当于i=i+1  #改变变量
#单分支的判断
if i==3:    #当用户名或密码输入三次不正确的时候,循环执行结束了,i的最大值为3
    print('对不起,三次均输入错误,正在退出系统....')
#用户登录系统。如果用户输入三次用户名和密码就自动退出系统。
#思路:需要在while中判断一下用户名和密码是否正确,用if-else。

i=0     #初始变量
while i<3:  #条件判断
    user_name=input('请输入您的用户名:')
    pwd=input('请输入您的密码:')
    #登录时,验证用户名和密码的判断
    if user_name=='康熙' and pwd=='666666':
        print('输入正确,正在登录系统,请稍等....')
        i=4     #改变环境变量,目的是为了退出循环,因为我们已经正确登录,就不用再执行下面的命令了!
        pass
    else:
        if i<2:
            print('用户名或密码错误,您还有',2-i,'次机会')
        i+=1        #改变环境变量
        pass
    pass
if i==3:
    print('三次机会都用完了,正在退出系统....')

4,嵌套循环

循环结构也可以互相嵌套,在一个循环结构中嵌套另一个完整的循环结构称为循环嵌套。

image.png

image.png

打印三角形

#打印三行四列,长方形
for i in range(1,4):    #外层循环的行数
    for j in range(1,5):     #内层循环的列数
        print('*',end='')
        pass
    print()     #目的是换行
    pass
print('--------------------')
#打印正直角三角形
for i in range(1,6):    #打印5行
    #*的个数与行数相等,第一行range(1,2),第二行range(1,3)
    for j in range(1,i+1):      #打印行数
        print('*',end='')
    print()
print('--------------------')
#打印道直角三角形
for i in range(1,6):    #打印行数
    for j in range(1,7-i):      #打印列数
        print('*',end='')
        pass
    print()     #内层循环执行完成后,打印空行,换行
    pass
print('--------------------')
#打印等腰三角形
for i in range(1,6):     #外层循环行数。5行
    #打印倒三角
    for j in range(1,6-i):  #6-i表示实际第一个数是5,但是取不到所以为4.
        print(' ',end='')
        pass
    # 1,3,5,7...等腰三角形,range(1,2),range(1,4),range(1,6),range(1,8),range(1,10)
    for k in range(1,i*2):
        print('*',end='')
    print()     #当两个并列的for循环执行完毕后再换行
print('--------------------')

打印菱形***

'''
&&&*
&&***
&*****
*******
&*****
&&***
&&&*
'''
#打印菱形。注意:只有奇数行才能打印出菱形。最长的一行放上半部分。
row=eval(input('请输入菱形的行数:'))
while row%2==0:     #判断行数的奇偶性,行数是偶数,重新输入行数。
    print('请重新输入菱形的行数:')
    row=eval(input('请输入菱形的行数:'))
#输出菱形。
top_row=(row+1)//2      #上半部分的行数。
#上半部分,其实就是等腰三角形
for i in range(1,top_row):
    #打印倒三角
    for j in range(1,top_row+1-i):      #top_row+1-i举例:row=7时,top_row=(7+1)//2=4,top_row+1-i=4+1-1=4
        print(' ',end='')
        pass
    # 1,3,5,7...等腰三角形,range(1,2),range(1,4),range(1,6),range(1,8),range(1,10)
    for k in range(1,i*2):
        print('*',end='')
    print()     #当两个并列的for循环执行完毕后再换行
#下半部分是由一个直角三角形和倒等腰三角形。
bottom_row=row//2
for i in range(1,bottom_row+1):
    #直角三角形
    for j in range(1,i+1):     #打印直角三角形的行。
        print(' ',end='')
    #倒三角形
    for k in range(1,2*bottom_row-2*i+2):   #1-->range(1,8),2-->range(1,6),3-->range(1,4),4-->range(1,2)
    #2*bottom_row-2*i+2代表1-->2*4-2*1+2=8.这个的公式不太懂。
        print('*',end='')
        pass
    print()



#打印空心菱形。在最左侧和最右侧是*,其他情况都是空格
row=eval(input('请输入菱形的行数:'))
while row%2==0:     #判断行数的奇偶性,行数是偶数,重新输入行数。
    print('请重新输入菱形的行数:')
    row=eval(input('请输入菱形的行数:'))
#输出菱形。
top_row=(row+1)//2      #上半部分的行数。
#上半部分,其实就是等腰三角形
for i in range(1,top_row):
    #打印倒三角
    for j in range(1,top_row+1-i):      #top_row+1-i举例:row=7时,top_row=(7+1)//2=4,top_row+1-i=4+1-1=4
        print(' ',end='')
        pass
    # 1,3,5,7...等腰三角形,range(1,2),range(1,4),range(1,6),range(1,8),range(1,10)
    for k in range(1,i*2):
        if k==1 or k==i*2-1:
            print('*',end='')
        else:
            print(' ',end='')
    print()     #当两个并列的for循环执行完毕后再换行
#下半部分是由一个直角三角形和倒等腰三角形。
bottom_row=row//2
for i in range(1,bottom_row+1):
    #直角三角形
    for j in range(1,i+1):     #打印直角三角形的行。
        print(' ',end='')
    #倒三角形
    for k in range(1,2*bottom_row-2*i+2):   #1-->range(1,8),2-->range(1,6),3-->range(1,4),4-->range(1,2)
    #2*bottom_row-2*i+2代表1-->2*4-2*1+2=8.这个的公式不太懂。
        if k == 1 or k == 2*bottom_row-2*i+2 - 1:
           print('*', end='')
        else:
           print(' ', end='')
    print()     #换行

5,break在循环中的使用(无限循环与遍历循环)

程序跳转语句 break,用于跳出循环结构,通常与if搭配使用

image.png

无限循环

#计算累加和
s=0
i=1     #(1)初始化变量
while i<11:     #(2)条件判断
    #(3)语句
    s+=i
    if s>20:
        print('累加和大于20的当前数是:',i)
        break
    i+=1    #改变变量

print('--------------------')
 
#用户登录。    
i=0     #统计登录次数。(1)初始变量
while i<3:  #(2)条件判断
    #(3)语句块
    user_name=input('请输入您的用户名:')
    pwd=input('请输入您的密码:')
    #登录时,验证用户名和密码的判断
    if user_name=='成龙' and pwd=='888888':
        print('输入正确,正在登录系统,请稍等....')
        break
    else:
        if i<2:
            print('用户名或密码错误,您还有',2-i,'次机会')
    i+=1        #改变环境变量

else:   #while...else结构
    print('三次机会都用完了,正在退出系统....')    

遍历循环

image.png

#遇到条件直接退出
for i in 'hello':
    if i=='l':
        break
    print(i)

6,continue在循环中的使用

continue的作用:用于跳过本次循环的后续代码,而继续执行下一次循环操作,与if搭配使用

image.png

#计算累加和
s=0
i=0     #(1)初始化变量
while i<=100:     #(2)条件判断
    #(3)语句
    if i%2==1:  #为奇数
        i+=1
        continue    #不再执行后面的代码
#累加求和的代码
    s+=i
    i+=1
print('1~100之间的偶数和:',s)

image.png

#计算累加和
s=0
for i in range(1,101):
    #(3)语句
    if i%2==1:  #为奇数
        continue    #不再执行后面的代码
    #累加求和的代码
    s+=i
print('1~100之间的偶数和:',s)

7,pass语句(空语句)

  • Python中的保留字。
  • 在语法结构中起到占位符的作用,使语法结构完成,不报错。
  • 一般可用在if,for,while,函数的定义,类的定义中。

8,break和continue的对比

共同点:

  • 在Python中,break和continue只能使用在循环语句中。

不同点:

  • break 用来结束整个循环。
  • continue 用来结束本轮循环,开启下一轮循环。
#break和continue的对比
print('----break,结束循环----')
for i in 'hello world':
    if i=='o':
        break
    print(i)
print('----continue,结束本轮循环----')
for i in 'hello world':
    if i=='o':
        continue
    print(i)

9,练习题

实战一

#输入一个年份,判断是否闰年。
#需求:从键盘获取一个四位的整数年份,判断其是否为闰年。
#闰年的判断条件为:能被4整除但不能被100整除,或者不能被400整除。
year=eval(input("请输入一个四位数的年份:"))
if (year%4==0 and year!=100) or year!=400:
    print(year,"是闰年")
else:
    print(year,'是平年')

实战二

#模拟10086查询功能
#需求:输入1,显示当前余额;输入2,显示当前的剩余流量,单位为G;输入3,显示当前的剩余通话,单位为分钟;输入0,退出自助查询系统。
#(1)初始化变量
answer='y'
#(2)条件判断
while answer=='y':
    #(3)循环操作,语句块
    print('-----欢迎使用10086查询功能-----')
    print('1.查询当前余额')
    print('2.查询当前的剩余流量')
    print('3.查询当前剩余通话时长')
    print('0.退出系统')
    choice=input('输入您要执行的操作:')
    if choice=='1':
        print('当前余额为:23.45元')
    elif choice=='2':
        print('当前的剩余流量:4GB')
    elif choice=='3':
        print('当前的剩余通话时长为:200分钟')
    elif choice=='0':
        print('程序退出,谢谢您的使用')
        break
    else:
        print('对不起,输入错误')
else:   #while..else
    print('程序退出,谢谢使用')

实战三

#使用嵌套循环输出九九乘法表。
#使用嵌套循环输出九九乘法表,内层循环与外层循环的关系,输出的数据的个数与行数相同,即第一行输出一个,1*1=1,第二行输出两个1*2=2,2*2=4依次类推。
for i in range(1,10):
    for j in range(1,i+1):
        print(str(j)+'*'+str(i)+'='+str(i*j),end='\t')
    print()

实战四

#猜数游戏
#需求:随机生成一个‘1~100’之间的整数,然后用户循环这个数,对于用户的输入,可以提示‘大了’,‘小了’,直到猜准确为止,输出用户的猜测次数。
#前两行没学过,先用着
import  random
rand=random.randint(1,100)  #产生1~100之间的随机数
count=1 #记录猜数的次数
while count<10:
    number=eval(input('在我心中有一个数,在1~100之间,请你猜一猜:'))
    if number==rand:
        print('猜对了')
        break
    elif number>rand:
        print('大了')
    else:
        print('小了')
    count+=1    #每猜一次count次数加1
#判断次数
if count<=3:
    print('真聪明,一共猜了',count,'次')
elif count<=6:
    print('还可以,一共猜了',count,'次')
else:
    print('猜的次数有点多啊!一共猜了',count,'次')

网站公告

今日签到

点亮在社区的每一天
去签到