day 3-分支和循环
一、分支结构
python实现分支结构的工具只有:if
1.单分支结构
1)应用场景:如果xxx就xxx(满足条件才执行某个操作,如果这个条件不满足这个造作就不执行)
2)语法:
if 条件语句: 代码段
3)说明:
a. if - 关键字
b. 条件语句 - 判断语句(可以是任何有结果的表达式)
c. : - 固定写法(注意:必须是英文输入法的冒号)
d. 代码段 - 结构上是和if保持一个缩进的一条或者多条语句(至少一条);
逻辑上代码段就是满足条件才会执行的代码
案例1:如果age大于等于18就打印成年
age = 48
if age >= 18:
print('成年')
#案例2:如果year对应的是闰年,就打印’闰年’
year = 1990
if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
print('闰年')
练习1:根据num的值打印‘偶数’
num = 209
if num % 2 == 0:
print('偶数')
练习2: 如果不能被3整除就让num加1
num = 23
if num % 3 != 0:
num += 1
print(num)
2.双分支结构
1)应用场景:如果xxx否则就xxx(满足条件执行某个操作,条件不满足的时候执行另外一个操作)
2)语法:
if 条件语句: 代码段1(满足条件需要执行的代码) else: 代码段2(不满足条件需要执行的代码)
案例:根据aeg值打印‘成年’或者‘未成年’
age = 18
if age >= 18:
print('成年')
else:
print('未成年')
3.多分支结构
1)应用场景:如果xxx就xxx,如果xxx就xxx,如果xxx就xxx,…(根据不同做不同的事情)
语法1:
语法1: if 条件语句1: 代码段1 if 条件语句2: 代码段2 if 条件语句3: 代码段3 ...
语法2: - 多个条件之间存在:其中一个成立,别的条件一定不会成立的关系
if 条件语句1: 代码段1 elif 条件语句2: 代码段2 elif 条件语句3: 代码段3 ... else: 代码段n
案例: 根据年龄打印: 幼儿(0,3]、儿童(3,12]、青少年[13,18]、青年[19,28]、壮年[29,39]、中年[40,65]、老年(>65)
age = 3
# 方法1:
if age <= 3:
print('幼儿')
if 3 < age <= 12:
print('儿童')
if 12 < age <= 18:
print('青少年')
if 18 < age <= 28:
print('青年')
if 28 < age <= 39:
print('壮年')
if 39 < age <= 65:
print('中年')
if age > 65:
print('老年')
# 方法2:
if age <= 3:
print('幼儿')
elif 3 < age <= 12:
print('儿童')
elif 12 < age <= 18:
print('青少年')
elif 18 < age <= 28:
print('青年')
elif 28 < age <= 39:
print('壮年')
elif 39 < age <= 65:
print('中年')
else:
print('老年')
练习:根据分数打等级:A(>=90)、B[80,90)、C[60,80)、D(<60)
score = 34
if score < 60:
print('D')
elif 60 <= score < 80:
print('C')
elif 80 <= score < 90:
print('B')
else:
print('A')
二、for循环
循环: 代码只写一遍,然后反复执行多次
1.for 循环
1)语法:
for 变量 in 序列: 循环体
2)说明
a. for - 关键字:固定写法
b. 变量 - 变量名(已经定义过的,或者没有定义过的变量都可以)
c. in - 关键字;固定写法
d. 序列 - 可以是任何容器型数据类型的数据;例如:字符串、列表、元组、字典、集合、迭代器、生成器、range
e. : - 固定写法
f. 循坏体 - 结构上和for保持一个缩进的一条或者多条语句(至少一句)
逻辑上循环体就是需要重复执行的代码
3)执行过程
让变量去序列中取值,一个一个取,去完为止;每取一个值就执行一次循环体。
如果要控制for循环次数,只需要控制序列中的元素个数。
for x in 'bjddm':
print(x,'hello world!')
思考:控制‘hello world!’打印100遍
for x in range(100):
print('hello world!')
2.range函数 - 创建等差数列的函数
1)range(N) - 产生[0,N)的等差数列,差是1; range(5):0、1、2、3、4
2)range(M,N) - 产生[M,N)的等差数列,差是1; range(5,10):5 6 7 8 9
3)range(M,N,step) - 产生[M,N)的等差数列,差是step; range(2,7):2,2,3,4,6,
range(6,1,-1):6,5,4,3,2,
for x in range(5):
print(x)
for x in range(5,10):
print(x)
#练习1:使用range创建等差数列:0 1 2 3 4 5 6 7
for x in range(8):
print(x)
# 练习2:使用range创建等差数列:0 10 20 30 40
for x in range(0,41,10):
print(x)
# 练习3:使用range创建等差数列:5 10 15 25
for x in range(5,26,5):
print(x)
# 练习4:使用range创建等差数列:25 20 15 5
for x in range(25,4,-5):
print(x)
# 练习5:使用range创建等差数列:-1 0 1 2
for x in range(-1,3,1):
print(x)
range(-1,3)
三、for循坏的应用
1.套路:
1)定义变量保存最后的和
2)用循坏依次获取所有需要求和的数据
3)在循环体中获取到的一个需要求和的数据就用保存最后的变量加上这个数据
案例1:用循环求1+2+3+…+100的和
sum1 = 0
for x in range(1,101):
sum1 += x # sum1 = sum1 + x
print(sum1)
案例2:求scores中所有分数的和
scores = [98, 34, 78, 89, 78, 23, 56]
total_score = 0
for x in scores:
total_score += x
print(total_score)
练习1:计算1+3+5+7+…+99
sum1 = 0
for x in range(1,100,2):
sum1 += x
print(sum1)
练习2:求scores所有及格学生的总分
scores = [98, 34, 78, 89, 78, 23, 56]
total_score = 0
for x in scores:
if x >= 60:
total_score += x
print(total_score)
练习3:求100以内所有能被3整除但是不能被2整除的数的和
sum2 = 0
for x in range(100):
if x % 3 == 0 and x % 2 != 0:
sum2 += x
print(sum2)
求3 6 9 12 15 … 99的和
sum2 = 0
for x in range(0,100,3):
if x % 2 != 0:
sum2 += x
print(sum2)
2.统计个数
1)定义变量保存最后的个数,默认值0
2)通过循环获取通缉对象
3)获得一个统计对象个数就加1
案例:根据scores统计不及格学生人数
scores = [98, 34, 78, 89, 78, 23, 56]
count = 0
for x in scores:
if x < 60:
count += 1
print(count)
练习: 统计1000以内能被3整除的数的个数(不包括0)
# 方法1:
count = 0
for x in range(1,1000):
if x % 3 == 0:
count += 1
print(count)
# 方法2:
count = 0
for x in range(3,1000):
count += 1
print(count)
四、while循环
1.while循环
1)语法:
while 条件语句: 循环体
2)执行过程:
先判断条件语句是否成立,如果成立就执行循环体,执行完循环再判断条件语句是否成立,成立就再执行循环体…以此类推,直到条件不成立循环就结束。
案例1:打印1、2、3、4、5、…、10
num = 1
while num <= 10:
print(num)
num += 1
案例2:打印10个’hello world!‘
x = 0
while x < 10:
print('hello world!')
x += 1
# for x in range(10):
# print('hello world!')
2.for循环和while循环的选择问题
1)原则:能用for的时候尽量用for,for解决不了的问题才考虑使用while循环。
2)for循环能够解决的问题:循环次数确定的时候
3)for循环不能解决的问题:
a.死循环
b.循环次数不确定(程序员在写代码的时候无法得知循环的次数 - 这个循环的次数由使用者行为来决定)
案例:写程序提示用户输入密码,直到密码输出正确为止
pw = '123abc'
请输入密码:123456
请输入密码:142567
请输入密码:ndndns
...
请输入密码:123abc
(结束)
pw = '123abc' # 系统密码
value = None # 输入的密码
while value != pw:
value = input('请输入密码:')
3.有了break的while循环:
while True:
需要重复执行操作
if 循环结束条件:
break
while True:
value = input('请输入密码:')
if pw == value:
break
五、循环关键字
循环关键字:continue、break
1. continnue
作用:结束一次循环(结束当次循环) - 执行循环体的时候如果遇到了continue,那么这次循环直接结束。
for x in range(5):
print('+++++')
continue
print('-----')
print('*****')
练习:打印10以内的所有奇数
for x in range(10):
if x % 2 == 0:
continue
print(x)
for循环中continue的过程:
x = 0: if 0 % 2 == 0 -> if 0 == 0 -> if True -> continue
x = 1: if 1 % 2 == 0 -> if 1 == 0 -> if False;
print(1)
x = 2: if 2 % 2 == 0 -> if 0 == 0 -> if True -> continue
...
2.break
作用:结束整个循环 - 执行循环体的时候如果遇到break整个循环直接结束
for x in range(5):
print('+++++')
break
print('-----')
print('*****')
# 此时break只打印'+++++'
for x in range(10):
if x > 4:
break
print(x)
# 运行结果:0,1,2,3,4
六、作业
分支与结构:
-
写出判断⼀个数是否能同时被2和5整除的条件语句, 并且打印对应的结果。
num = 60 if num % 2 == 0 and num % 5 == 0: print(num)
-
写出判断⼀个数是否能够被2或者5整除,但是不能同时被2或者5整除的条件语句, 并且打印对应。
num = 250 if (num % 2 == 0 or num % 5 == 0)and num % 10 != 0: print(num)
-
假设今天的上课时间为15678秒,编程计算今天上课时间是多少⼩时,多少分钟,多少秒;以‘XX时XX分XX秒’的⽅式表示出来。
例如:100秒表示成**
0时1分40秒
**h = 15678 // 3600 m = 15678 % 3600 // 60 s = 15678 % 3600 % 60 print("%s时%s分%s秒" % (h,m,s)) #输出:4时21分18秒
-
定义两个变量保存⼀个⼈的身⾼和体重,编程实现判断这个⼈的身材是否正常!
公式:体重(kg) / (身⾼(m)的平⽅值) 在18.5 ~ 24.9之间属于正常。
输出格式:是否正常:True / False
w = float(input("输入体重:")) h = float(input("输入身高:")) value = w / (h**2) if 18.5 <= value <=24.9: print("是否正常:True") else: print("是否正常:False")
-
写程序判断指定的整数(num)是否是水仙花数。
水仙花:一个三位,其各个位数的立方和等于这个数本身,比如:153是水仙花数,因为1^3 + 5^3 + 3^3 等于153
num = 153 num_1 = num // 100 num_2 = num // 10 % 10 num_3 = num % 10 sum = num_1 ** 3 +num_2 ** 3+ num_3 ** 3 if sum == num: print(sum)
分支和循环的综合应用:
一、基础题
-
根据输入的成绩的范围打印
及格
或者不及格
。score = int(input('请输入成绩:')) if score >= 60: print('及格') else: print('不及格')
-
根据输入的年纪范围打印
成年
或者未成年
,如果年龄不在正常范围内(0~150)打印这不是人!
。age = int(input('请输入年龄:')) if 0 < age < 18: print('未成年') elif age < 150: print('成年') else: print('这不是人')
-
输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息
a-b的结果不是奇数
。a = int(input("请输入整数a:")) b = int(input("请输入整数b:")) x = a-b if x % 2 != 0: print(x) else: print('a-b的结果不是奇数')
-
使用while循环输出 0~100内所有3的倍数。
num = 0 while num <= 100: print(num) num += 3
-
使用while循环输出0~100内所有的偶数。
num = 0 while num <= 100: if num % 2 == 0: print(num) num += 1
二、进阶题
-
使用循环计算
1*2*3*4*...*10
的结果。num = 1 numx = 1 while num <= 11: numx *= num num += 1 print(numx)
-
统计100以内个位数是2并且能够被3整除的数的个数。
count = 0 for x in range(0,100): if (x % 10 == 2) and (x % 3 == 0): count += 1 print(count)
-