- 程序的描述语言:
- 自然语言:使用人类语言直接描述程序
- 流程图
- 伪代码
- 程序的组织结构
顺序结构
点击查看代码
示例4-1 顺序结构的使用
#赋值运算符的顺序 从右到左
name='张三'
a=b=c=('room')#链式赋值
a,b,c,d='room'#字符串分解赋值
print(a)
print(b)
print(c)
print(d)
print('---------输入输出结构也是典型的顺序结构----------')
name=input('请输入您的姓名:')
age=eval(input('请输入您的年龄:'))
luck_number=eval(input('请输入您的幸运数字:'))
print('姓名:',name)
print('年龄:',age)
print('幸运数字:',luck_number)
一、选择/分支结构(True就执行,Flase就跳过)
1、单分支结构
if 表达式:
语句块
点击查看代码
示例4-2 单分支结构
number=eval(input('请输入您的六位号码:'))
#使用if 语句
if number==987456: #等值判断
print('恭喜你,中奖了')
if number!=987654:
print('您未中本期大奖')
print('------以上if判断表达式,是通过比较运算计算出来的,结果是bool类型-----')
n=98 #赋值操作
if n%2: #98%2的余数是零,0的布尔值Flase,非0的布尔值是True
print(n,'是奇数')
if not n%2:
print(n,'是偶数')
print('---------如何判断一个字符串是空字符串-----------')
x=input('请输入一个字符串:')
if x: #在Pathon中一切对象每个对象都有一个布尔值,而非空字符串的布尔值为True,空字符串的布尔值为Flase
print('x是一个非空字符串')
if not x:#空字符串的布尔值为Flase
print('x是一个空字符串')
print('----表达式也可以是一个单纯的布尔型变量--------')
flag=eval(input('请输入一个布尔类型的值:True或Flase'))
if flag:
print('flag的值为True')
if not flag:
print('flag的值为Flase')
print('-----语句中只有一句代码,可以把语句直接写在冒号后面------')
a=10
b=5
if a>b:max=a #语句只有一句,赋最大值
print('a和b的最大值为:',max)
2、多分支结构
if 表达式:
语句块
else:
语句块
点击查看代码
示例4-3双分支分支结构
number=eval(input('请输入您的中奖号码:'))
#if...else
if number==987654:
print('恭喜你中奖了')
else:
print('您未中本期大奖')
print('------以上代码可以使用条件表达式进行简化(只有两种选择)----')
result='恭喜你中奖了!' if number==987654 else '您未中本期大奖'
print(result)
print('恭喜你中奖了!' if number==987654 else '您未中本期大奖')
3、多分支结构
if 表达式1:
语句块1
elif 表达式2:
语句块2
elif 表达式n:
语句块n
else
语句块n+1
点击查看代码
示例4-4多分支结构
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:12
print('B')
else:
print('A')
点击查看代码
示例4-5嵌套if的使用
answer=input('请问您喝酒了吗?')
if answer=='y':#表示喝酒了
poof=eval(input('请输入酒精含量:'))
if poof<20:
print('构不成酒驾,祝您一路平安')
elif poof<80: #20<=poof<80
print('已构成酒驾,请不要开车')
else:
print('已构成醉驾,请千万不要开车')
else:
print('你走吧,没你啥事')
在使用and连接多个条件判断时,只有同时满足多个条件,才能执行if后面语句块
点击查看代码
示例4-6使用and连接多个选择条件
use_name=input('请输入您的用户名:')
pwd=input('请输入您的密码:')
if use_name=='ysj' and pwd=='888888':
print('登陆成功')
else:
print('用户名或密码不正确')
在使用or连接多个条件判断时,只要满足一个条件,就能执行if后面语句块
点击查看代码
示例4-7使用or连接多个条件
score=eval(input('请输入您的成绩:'))
if score<0 or score>100:
print('成绩无效')
else:
print('您的成绩为:',score)
示例4-8Pathon3.11新特性——模式匹配
score=input('请输入成绩等级:')
match score:
case 'A':
print('优秀')
case 'B':
print('良好')
case 'C':
print('中等')
case 'D':
print('及格')
case 'E':
print('不及格')
二、循环结构
遍历循环结构for,无限循环结构while
for 循环变量 in 遍历对象:
语句块
for 循环变量 in 遍历对象:
语句块1
else:
语句块2
点击查看代码
示例4-9遍历for'循环的使用
#遍历字符串
for i in 'hello':
print(i)
#range()函数,Pathon中的内置函数,产生一个(n,m)的整数序列,包含n,但不包含m
for i in range(1,11):
#print(i)
if i%2==0:
print(i,'为偶数')
#计算1-10之间的累加和
s=0 #用于存储累加和
for i in range(1,11):
s+=i
print('1-10之间的累加和为',s)
print('-----------判断100-999之间的水仙花数-----')
'''
153=3*3*3+5*5*5+1*1*1
'''
for i in range(100,1000):
sd=i%10#获取个位上的数字
tend=i//10%10#获取百位上的数字
hundred=i//100 #获取百位上的数字
#判断
if sd**3+tend**3+hundred**3==i:
print(i,'为水仙花数')
示例4-10遍历循环的扩展形式
s=0 #用于存储累加和
for i in range(1,11):
s+=i
else:
print('1-10之间的累加和为',s)
while 表达式:
语句块
while 表达式:
语句块1
else:
语句块2
while 循环的四个步骤:
1)初始化变量
2)条件判断
3)语句块
4)改变变量
点击查看代码
示例4-11无限循环while的使用
#(1)初始化变量
answer=input('今天要上课吗?y/n')
while answer=='y': #(2)条件判断
print('好好学习,天天向上')#(3)语句块
#(4)改变变量
answer=input('今天要上课吗?y/n')
#求1-100之间的累加和
s=0 #存储累加和
i=1 #(1)初始化变量
while i<=100: #(2)条件判断
s+=i #(3)语句块
#(4)改变变量
i+=1 #相当于i=i+1
print('1-100之间的累加和为:',s)
示例4-12无限循环while的扩展形式
#求1-100之间的累加和
s=0 #存储累加和
i=1 #(1)初始化变量
while i<=100: #(2)条件判断
s+=i #(3)语句块
#(4)改变变量
i+=1 #相当于i=i+1
else:
print('1-100之间的累加和为:',s)
示例4-13使用无限循环去模拟用户登录
#(1)初始化变量
i=0
while i<3: #(2)条件判断
#(3)语句块
user_name=input('请输入用户名:')
pwd=input('请输入密码:')
#登陆操作,if...else
if user_name=='ysj' and pwd=='888888':
print('系统正在登陆,请稍后')
#需要改变循环变量,目的退出循环
i=8 #第三行判断i<3,8<3 Fals退出 while循环
else:
if i<2:
print('用户名或密码不正确,您还有',2-i,'次机会')
i+=1 #相当于i=i+1 #(4)改变变量
#单分支判断
if i==3: #当用户名或密码输入3次不正确的时候,循环结束,i最大值为3
print('对不起,三次均输入错误')
循环结构也可以互相嵌套
while 表达式1:
while 表达式2:
语句块2
for 循环变量1 in 遍历对象1:
for 循环变量2 in 遍历对象2:
语句块2
嵌套尽量不要超过3层
若外层循环要进行3次,那内层循环要进行4次,总循环进行了12次
无限循环与遍历循环可以互相嵌套
- 嵌套循环通常用于输出一些常见图形,如长方形,三角形,菱形等
点击查看代码
示例4-14长方形和直角三角形
#三行四列
for i in range(1,4):
for j in range(1,5): #内层循环
print('*',end='')
print() #空的print 作用是换行
print('------------直角三角形--------')
for i in range(1,6): #表示5行
#*的个数与行数相同,rang(1,2)
for j in range(1,i+1):
print('*', end='')
print()
示例4-15倒三角形和等腰三角形
#我的思路
print('-------------倒直角三角形-----')
for i in range(1,6): #表示5行
s=6-i
for j in range(1,i+1):
print('*'*s, end='')
s-=s
print()
print('-----------')
#1---->5 rang(1,6);2--->4 rang(1,5);3--->3 rang(1,4);4--->2 rang(1,3);5--->1 rang(1,2)
for i in range(1,6):#i表示行号
for j in range(1,7-i):
print('*',end='')
print()
print('----等腰三角形-------')
'''
&&&&*
&&&***
&&*****
&*******
*********
'''
for i in range(1,6):#外层循环5行
#倒三角形
for j in range(1,6-i):
print(' ',end='')
#1,3,5,7...等腰三角形,range(1,2),range(1,4),range(1,6),range(1,8),range(1,10)
for k in range(1,2*i):
print('*',end='')
print() #当两个并列for循环执行完成后,再换行
示例4-16菱形
row=eval(input('请输入菱形行数:'))
while row%2==0:#判断行数的奇偶性
print('重新输入菱形行数')
row=eval(input('请输入菱形行数:'))
#输出菱形
top_row=(row+1)//2 #上半部分行数
for i in range(1,top_row+1):
for j in range(1,top_row+1-i):
print(' ', end='')
# 1,3,5,7...等腰三角形,range(1,2),range(1,4),range(1,6),range(1,8),range(1,10)
for k in range(1,2*i):
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)
print('*',end='')
print()
'''#我的思路
bot_row = (row + 1) // 2 -1 # 下半部分行数
for i in range(1, bot_row + 1):
for j in range(1, i+1):
print(' ', end='')
for k in range(1,2*bot_row+2-2*i):
print('*',end='')
print()
'''
示例4-17空心菱形
'''#我的思路方法一
&&&*
&&*$*
&*$$$*
s=0
for i in range(1, top_row + 1):
for j in range(1, top_row+2-i):
print(' ',end='',)
print('*',end='')
s+=1
if s==1:
print()
else:
for k in range(1,2*s-2):
print(' ',end='')
print('*',end='')
print()
&&*$*
&&&*
bot_row = (row + 1) // 2-1
s=bot_row
for i in range(1, bot_row + 1):
for j in range(1, i+2):
print(' ',end='',)
print('*',end='')
s-=1
if s==0:
print()
else:
for k in range(1, 2*s):
print(' ', end='')
print('*', end='')
print()
'''
row=eval(input('请输入菱形行数:'))
while row%2==0:#判断行数的奇偶性
print('重新输入菱形行数')
row=eval(input('请输入菱形行数:'))
#输出菱形
top_row=(row+1)//2 #上半部分行数
for i in range(1,top_row+1):
for j in range(1,top_row+1-i):
print(' ', end='')
# 1,3,5,7...等腰三角形,range(1,2),range(1,4),range(1,6),range(1,8),range(1,10)
for k in range(1,2*i):
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)
if k == 1 or k==(2*bottom_row-2*i+2-1):
print('*', end='')
else:
print(' ', end='')
print()
三、程序跳转语句
1、break的使用
- break在while中的使用
while 表达式1:
执行代码
if 表达式2:
break
点击查看代码
示例4-18跳转语句break 在while 循环中的使用
s=0 #存储累加和
i=0 #(1)初始化变量
while i<11: #(2)条件判断
#(3)语句块
s+=i
if s>20:
print('累加和大于20的当前数为:',i)
break
i+=1#(4)改变变量
print('-----------')
i=0#统计登录次数
while i<3:
user_name=input('请输入用户名:')
pwd=input('请输入密码:')
if user_name=='ysj' and pwd=='888888':
print('系统正在登陆,请稍后...')
break
else:
if i<2:
print('用户名或密码不正确,你还有',2-i,'次机会')
#(4)改变变量
i+=1
else:
print('三次均输入错误!')
- break在for循环中的使用
for 循环变量 in 遍历对象:
执行代码
if 表达式:
break
点击查看代码
示例4-19break在for循环中的使用![]
for i in 'hello':
if i=='e':
break
print(i)
print('------------')
for i in range(3):
user_name = input('请输入用户名:')
pwd = input('请输入密码:')
if user_name == 'ysj' and pwd == '888888':
print('系统正在登陆,请稍后...')
break
else:
if i < 2:
print('用户名或密码不正确,你还有', 2 - i, '次机会')
else:
print('三次均输入错误!')
2、continue的使用
- continue在while中的使用
while 表达式1:
执行代码
if 表达式2:
continue
点击查看代码
示例4-20跳转语句continue在while中的使用
s=0
i=1
while i<=100:
if i%2==1: #奇数
i+=1
continue #不再执行后面代码
#累加求和的代码
s+=i
i+=1
print('1-100之间的偶数和:',s)
- continue在for循环中的使用
for 循环变量 in 遍历对象:
执行代码
if 表达式:
continue
点击查看代码
示例4-21continue在for循环中的使用
s=0
for i in range(1,101):
if i%2==1:
continue
#累计求和
s+=i
print('1-100之间是我偶数和为:',s)
break与continue的区别
break直接跳出整个循环,continue只跳出此次循环,继续执行下次循环
四、空语句pass
在语法结构中只起到占位符的作用,使语法结构完整,不报错,一般用于if、for、while、函数的定义、类的定义中
点击查看代码
示例4-22空语句pass
if True:
pass
while True:
pass
for i in range(10):
pass
点击查看代码
实战一
#我的思路
year=eval(input('请输入年份;'))
if year%4==0 and year%100!=0:
print(year,'年是闰年')
elif year%400==0:
print(year, '年是闰年')
else:
print(year, '年是平年')
#老师思路
year=eval(input('请输入年份;'))
if (year%4==0 and year%100!=0) or year%400==0:
print(year,'年是闰年')
else:
print(year, '年是平年')
点击查看代码
实战二
#(1)初始化变量
answer='y'
#(2)条件判断
while answer=='y':
#(3)语句块
print('---------欢迎使用10086查询功能------------')
print('1、查询当前余额'
'\n2、查询当前的剩余流量'
'\n3、查询当前的剩余通话时长'
'\n0、退出系统')
search=input('请输入您要执行的操作:')
if search=='1':
print('当前余额为:234.5元')
elif search=='2':
print('当前剩余流量为:4GB')
elif search=='3':
print('当前剩余通话时间为185544分钟')
elif search=='0':
print('退出系统!谢谢您的使用')
break
else:
print('对不起,您输入有误,请重新输入')
#(4)改变变量
answer = input('还要继续操作吗?y/n')
else:
print('对不起您输入有误,请重新输入')
点击查看代码
实战三
for i in range(1,10):
for j in range(1,i+1):
print(str(i)+'*'+str(j)+'='+str(i*j),end='\t')
print()
点击查看代码
实战四
#我的思路
import random
rand = random.randint(1, 100) #产生1-100之间的随机数
count=1 #记录猜数次数
number=eval(input('在我心中有个数,1-100之间,请你猜一猜;'))
while number!=rand:
count+=1
if number>rand:
print('大了')
else:
print('小了')
number = eval(input('在我心中有个数,1-100之间,请你猜一猜;'))
print(count)
else:
print('猜对了')
print('共猜了',count,'次')
#老师的思路
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
#判断次数
if count<=3:
print('真聪明,一共猜了',count,'次')
elif count<=6:
print('还可以,一共猜了',count,'次')
else:
print('猜的次数有点多,一共猜了',count,'次')