任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成
一、顺序结构
程序从上到下顺序地执行代码,中间没有任何的判断和跳转,直到程序结束
eg:把大象装冰箱一共分几步
print('---------程序开始----------')
print('1.把冰箱门打开')
print('2.把大象放冰箱里')
print('3.把冰箱门关上')
print('---------程序结束-------------')
二、对象的布尔值
1、Python一切皆对象,所有对象都有一个布尔值
2、获取对象的布尔值,使用内置函数bool()
3、以下对象的布尔值为False
print(bool(False)) #False
print(bool(0)) #False
print(bool(0.0)) #False
print(bool(None)) #False
print(bool('')) #False
print(bool("")) #False
print(bool([])) #空列表
print(bool(list())) #空列表
print(bool(())) #空元组
print(bool(tuple())) #空元组
print(bool({})) #空字典
print(bool(dict())) #空字典
print(bool(set())) #空集合
三、分支结构(选择结构)
程序根据判断条件的布尔值选择性地执行部分代码
明确的让计算机知道在什么条件下,该去做什么
3.1、单分支if结构
1、流程图
2、中文语义:如果......就....
3、语法结构:
if 条件表达式:
条件执行体
4、eg:从键盘录入一个数 ,表示取款金额,编写程序让计算机判断是否取款成功,并显示余额
money=1000 #余额
s=int(input('请输入取款金额')) #取款金额
#判断余额是否充足
if money>=s:
money=money-s
print('取款成功,余额为:',money)
3.2、双分支if...else结构
1、流程图
2、中文语义:如果......不满足......就......
3、语法结构:
if 条件表达式:
条件执行体1
else:
条件执行体2
4、eg:从键盘录入一个整数 ,编写程序让计算机判断是奇数还是偶数
num=int(input('请输入一个整数'))
#条件判断
if num%2==0:
print(num,'是偶数')
else:
print(num,'是奇数')
3.3、多分支if...elif...else结构
1、流程图
2、中文语义:
成绩是在90分以上吗?不是
成绩是80到90分之间吗?不是
成绩是70到80分之间吗?不是
成绩是60到70分之间吗?不是
成绩是60分以下吗?是
3、语法结构:多分支结构,多选一执行
if 条件表达式1:
条件执行体1
elif 条件表达式2:
条件执行体2
………… …………
elif 条件表达式N:
条件执行体N
[else:]
条件执行体N+1
4、eg:
从键盘录入一个整数 成绩
90-100 A
80-89 B
70-79 C
60-69 D
0-59 E
小于0或大于100 为非法数据(不是成绩的有效范围)
score=int(input('请输入一个成绩:'))
#判断
if score>=90 and score<=100:
print('A级')
elif score>=80 and score<=89:
print('B级')
elif score>=70 and score<=79:
print('C级')
elif score>=60 and score<=69:
print('D级')
elif score>=0 and score<=59:
print('E级')
else:
print('对不起,成绩有误,不在成绩的有效范围')
score=int(input('请输入一个成绩:'))
#判断
if 90<=score<=100:
print('A级')
elif 80<=score<=89:
print('B级')
elif 70<=score<=79:
print('C级')
elif 60<=score<=69:
print('D级')
elif 0<=score<=59:
print('E级')
else:
print('对不起,成绩有误,不在成绩的有效范围')
3.4、if语句的嵌套
1、流程图
2、语法结构:
if 条件表达式1:
if 内层条件表达式:
内存条件执行体1
else:
内存条件执行体2
else:
条件执行体
3、eg:
会员 >=200 8折
>=100 9折
不打折
非会员 >=200 9.5折
不打折
answer=input('您是会员吗?y/n')
money=float(input('请输入您的购物金额:'))
#外层判断是否是会员
if answer=='y' : #会员
if money>=200:
print('打8折,付款金额为:',money*0.8)
elif money>=100:
print('打9折,付款金额为:',money*0.9)
else:
print('不打折,付款金额为:',money)
else: #非会员
if money>=200:
print('打9.5折,付款金额为:',money*0.95)
else:
print('不打折,付款金额为:',money)
3.5、条件表达式
1、条件表达式是if......else的简写
2、语法结构:
x if 判断条件 else y
3、运算规则
如果判断条件的布尔值为True,条件表达式的返回值为x,否则条件表达式的返回值为False
4、eg:从键盘录入两个整数,比较两个整数的大小
num_a=int(input('请输入第一个整数'))
num_b=int(input('请输入第二个整数'))
print('使用双分支结构进入比较')
if num_a>=num_b:
print(num_a,'大于等于',num_b)
else:
print(num_a,'小于',num_b)
print('使用条件表达式进入比较')
print(str(num_a)+'大于等于'+str(num_b) if num_a>=num_b else str( num_a)+'小于'+str(num_b))
四、pass空语句
1、pass语句:语句什么都不做,只是一个占位符,用在语法上需要语句的地方
2、什么时候使用:先搭建语法结构,还没想好代码怎么写的时候
3、哪些语句一起使用
if语句的条件执行体
for-in语句的循环体
定义函数时的函数体
4、eg:判断是否是会员
answer=input('您是会员吗?y/n')
#判断是否是会员
if answer=='y':
pass
else:
pass
五、循环结构
5.1、range()函数的使用
1、range()函数:用于生成一个整数序列
2、创建range对象的三种方式
3、返回值是一个迭代器对象
4、range类型的优点:不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为仅仅需要存储start,stop和step,只有当用到range对象时,才会去计算序列中的相关元素
5、in与not in 判断整数序列中是否存在(不存在)指定的整数
6、eg:
'''第一种创建方式,只有一个参数(小括号中只给了一个数)'''
r=range(10) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],默认从0开始,默认相差1称为步长
print(r) #range(0, 10)
print(list(r)) #用于查看range对象中的整数序列 -->list是列表的意思
'''第二种创建方式,给了两个参数(小括号中给了两个数)'''
r=range(1,10) #指定了起始值,从1开始,到10结束(不包含10),默认步长为1
print(list(r)) #[1, 2, 3, 4, 5, 6, 7, 8, 9]
'''第三种创建方式,给了三个参数(小括号中给了三个数)'''
r=range(1,10,2)
print(list(r)) #[1, 3, 5, 7, 9]
'''判断指定的整数 在序列中是否存在 in ,not in'''
print(10 in r) #False ,10不在当前的r这个整数序列中
print(9 in r) #True,9在当关的r这个序列中
print(10 not in r) #True
print(9 not in r) #False
print(range(1,20,1)) #[1...19]
print(range(1,101,1)) #[1,....100]
5.2、enumerate()函数的使用
1、enumerate()函数:提供序列中每个元素的索引和值
2、enumerate()函数接受两个参数:一个可迭代对象和一个可选的起始索引值。
enumerate(iterable, start=0)
iterable:一个可迭代的对象,如列表、元组等。
start(可选):计数的起始值,默认为0。
3、注:
1)enumerate返回的是一个枚举对象,它是一个可迭代对象。
2) 通过enumerate获取的索引是从start参数指定的值开始的,而不是从可迭代对象的第一个元素开始。
3) 在使用enumerate时,应避免在循环内部修改可迭代对象的长度,否则可能会导致意外的结果。
4、eg:
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(index, fruit)
for index, fruit in enumerate(fruits, start=1):
print(index, fruit)
enumerate可以与zip函数结合使用,同时遍历多个列表。
names = ['Alice', 'Bob', 'Charlie']
scores = [90, 95, 88]
for index, (name, score) in enumerate(zip(names, scores), start=1):
print(f"学生 {index} 名字: {name}, 分数: {score}")
5.3、循环结构
1、反复做同一件事情的情况,称为循环
2、循环结构的流程图
5.3.1、while循环
1、语法结构
while 条件表达式:
条件执行体(循环体)
2、四步循环法
初始化变量
条件判断
条件执行体(循环体)
改变变量
总结: 初始化的变量与条件判断的变量与改变的变量为同一个
eg:
sum=0 #用存储累加和
'''初始化变量为0'''
a=0
'''条件判断'''
while a<5:
'''条件执行体(循环体)'''
sum+=a
'''改变变量'''
a+=1
print('和为',sum)
3、while循环的执行流程
4、eg:计算1到100之间的偶数和
sum=0 #用于存储偶数和
'''初始化变量'''
a=1
'''条件判断'''
while a<=100:
'''条件执行体(求和)'''
#条件判断是否是偶数
if not bool(a%2): #if a%2==0:
sum+=a
'''改变变量'''
a+=1
print('1-100之间的偶数和',sum)
5.3.2、for-in循环
1、for-in循环
in表达从(字符串、序列等)中依次取值,又称为遍历
for-in遍历的对象必须是可迭代对象
2、for-in的语法结构
for 自定义的变量 in 可迭代对象:
循环体
3、for-in的执行图
4、循环体内不需要访问自定义变量,可以将自定义变量替代为下划线_
5、eg:*4
#输出:Python(一行一个字符)
for item in 'Python': #第一次取出来的是P ,将P赋值值item,将item的值输出
print(item)
#range() 产生一个整数序列,--》也是一个可迭代对象
for i in range(10):
print(i)
#如果在循环体中不需要使用到自定义变量,可将自定义变量写为“_”
for _ in range(5):
print('人生苦短,我用Python')
#使用for循环,计算1到100之间的偶数和
sum=0 #用于存储偶数和
for item in range(1,101):
if item %2==0:
sum+=item
print('1到100之间的偶数和为:',sum)
输出100到999之间的水仙花数
举例:153=3*3*3+5*5*5+1*1*1
for item in range(100,1000):
ge=item%10 #个位
shi=item//10%10 #十位
bai=item//100 #百位
#判断
if ge**3+shi**3+bai**3==item:
print(item)
5.3.3、选择结构的if与循环结构while的区别
If是判断一次,条件为True执行一行
while是判断N+1次,条件为True执行N次
5.4、break、continue与else语句
5.4.1、流程控制语句break
用于结束循环结构,通常与分支结构if一起使用
5.4.2、流程控制语句continue
1、用于结束当前循环,进入下一次循环,通常与分支结构中的if一起使用
2、eg:
要求输出1到50之间所有5的倍数, 5,10,15,20,25....
5的倍数的共同点: 和5的余数为0的数都是5的倍数
什么样的数不是5的倍数, 1,2,3,4,6,7,8,9.。。 与5的余数不为0的数都不是5的倍数
要求是使用continue实现
for item in range(1,51):
if item%5==0:
print(item)
print('-------------使用continue-----------------')
for item in range(1,51):
if item%5!=0:
continue
print(item)
5.4.3、else语句
1、与else语句配合使用的三种情况
2、eg:从键盘输入密码,判断密码是否正确
while a<3:
pwd=input('请输入密码')
if pwd=='8888':
print('密码正确')
break
else:
print('密码不正确')
'''改变变量'''
a+=1
else:
print('对不起,三次密码均输入错误')
for item in range(3):
pwd=input('请输入密码:')
if pwd=='8888':
print('密码正确')
break
else:
print('密码不正确')
else:
print('对不起,三次密码均输入错误')
5.5、嵌套循环
5.5.1、嵌套循环
循环结构中又嵌套了另外的完整的循环结构,其中内层循环做为外层循环的循环体执行
eg:打印九九乘法表
for i in range(1,10): #行数
for j in range(1,i+1):
print(i,'*',j,'=',i*j,end='\t')
print()
5.5.2、二重循环中的break和continue
二重循环中的break和continue用于控制本层循环
eg:
for i in range(5): #代表外层循环要执行5次
for j in range(1,11):
if j%2==0:
#break #(1)break
continue #(2)continue
#比较两者的区别
print(j,end='\t')
print()