#本章目标
了解程序的描述方式
了解程序的组织结构
掌握顺序结构
掌握循环结构for与while
掌握程序跳转语句break和continue
掌握pass空语句
1,程序的描述方式
1,自然语言:就是是用人类语言,直接描述程序
2,流程图:用一系列图形,流程线和文字说明描述程序的基本操作和控制流程。主要适用于较短的算法。
3,伪代码:是介于自然语言和编程语言之间的一种算法描述语言,如果程序比较小,可以直接使用代码描述。
2,程序的组成结构
顺序结构
安装程序语句的自然顺序,从上到下,依次执行每条语句的程序。
#赋值运算符的顺序:从右向左
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 表达式:
语句块
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
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
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')
语句嵌套
answer=input('请问,您喝酒了吗?')
if answer=='Y':
proof=eval(input('请输入酒精含量:'))
if proof<20:
print('构不成酒驾,注意安全!')
elif proof<80:
print('已达到酒驾,请不要开车!')
else:
print('您已达到醉酒标准,请下车接受配合!')
else:
print('谢谢配合,您未喝酒!')
条件结构***
and条件下
在使用and连接多个条件判断时,只有同时满足多个条件,才会执行if后面的语句块。
user_name=input('请输入您的用户名:')
pwd=input('请输入您的密码:')
if user_name=='li' and pwd=='888888':
print('登录成功')
pass
else:
print('登录失败')
or条件下
使用or连接多个判断条件时,只要满足多个条件中的一个,就可以执行if后面的语句块
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循环
#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循环
#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,嵌套循环
循环结构也可以互相嵌套,在一个循环结构中嵌套另一个完整的循环结构称为循环嵌套。
打印三角形
#打印三行四列,长方形
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搭配使用
无限循环
#计算累加和
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('三次机会都用完了,正在退出系统....')
遍历循环
#遇到条件直接退出
for i in 'hello':
if i=='l':
break
print(i)
6,continue在循环中的使用
continue的作用:用于跳过本次循环的后续代码,而继续执行下一次循环操作,与if搭配使用。
#计算累加和
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)
#计算累加和
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,'次')