day3课程内容 - 分支循环
一、IF条件分支
普通语法:
if 条件 :
执行
else:
执行
例如:
scoer = int(input('请输入您的考试成绩:'))
if 90 <= scoer <=100 :
print('A')
else:
if 80 <= scoer < 90:
print('B')
else:
if 60 <= scoer < 80:
print('C')
else:
if 0 <= scoer < 60:
print('D')
else:
print('输入错误!')
改进语法:
if 条件:
执行
elif 条件:
执行
else:
执行
例如:
scoer = int(input('请输入您的考试成绩:'))
if 90 <= scoer <=100:
print('A')
elif 80 <= scoer <= 90:
print('B')
elif 60 <= scoer <= 80:
print('C')
elif 0 <= scoer <= 60:
print('D')
else:
print('输入错误!')
二、可有效避免’悬挂else’
例如:
if hi >2:
if hi > 7:
print('好棒')
else:
print('切')
#C语言为就近匹配的原则,即便下面的else想匹配最上方的if,但其实匹配的是最近的if。
#但在python中,就会严格按照缩进原则来执行,同一缩进,同一执行
三、条件表达式(三元操作符)
使用三元操作符后可用一条语句来完成条件判断和赋值的操作
一元操作符
#例如:正号、负号。- + 3
二元操作符
#例如:赋值。y = 3
三元操作符
#例如:判断和赋值
二元操作符转三元操作符,例如:
# 二元操作符形式
x,y=4,5
if x > y:
number = x
else:
number = y
#三元操作符形式
number = x if x > y else y
四、断言【assert】
含义:assert关键字称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常
例如:
assert 3 >4
AssertionError
用途:可用它在程序中置入检查点,可以确保当需要程序中的某一个条件一定为真时才可以让程序工作
五、while循环
语法:
while 条件:
循环体
退出循环的方法:
1、break
2、当条件为假时,即不成立时
例如:
i = 10
while i < 10:
循环体
i += 1
# 即当i>=10的时候,停止while循环
六、计数器循环
语法:
for 目标 in 表达式:
循环体
例如:
for i in range(10):
print('i')
#这个程序就会将0-9依次打印出来
七、range()【python内置函数BIF】
语法:
range([start,]stop[,step=1])
# 共3个参数,[]内的可不填写
# step = 1表示第三个参数默认值为1
# range的作用为生成一个从start参数的值开始到stop参数值结束的数字序列
例如:
>>> range(1,10,2)
range(1, 10, 2)
>>> list(range(1,10,2))
[1, 3, 5, 7, 9]
>>> for i in range(5):
print(i)
0
1
2
3
4
八、最重要的两个语句【break、continue】
1、break语句
例如:
bingo = 123
join = int(input('请输入密码:'))
while True:
if bingo == join:
break
join = int(input('密码错误!请重新输入:'))
print('密码正确!')
当while为True时循环将一直执行,循环体内的条件判断为真时,才会到break,断掉while循环。
即,只有当bingo == join时,才会触发break机制将while循环断掉,不然while循环将持续到天荒地老
2、continue语句
例如:
1、for x in range(10): #0,1,2,3,4
2、 if x % 2 == 0:
3、 x += 2
4、 print(x,end=',')
5、 continue
6、print(x)
# 输出结果为:2、4、6、8、10、9
for循环有一个概念叫循环遍历【即for循环完毕】,上面代码中有3个知识和注意点,即:
#for循环从range(10)中依次取出的值,不受下面任何赋值语句的干扰,所以是0、1、2、3、4、5、6、7、8、9
#当x通过for循环从range(10)中取出的值,符合下方的if判断条件时,会对x+2后进行打印,然后continue继续进行第1行到第5行的代码,若不符合下方的if判断条件时,则不会对x进行打印,continue继续进行第1行到第5行的代码
#当for循环遍历,即赋最后一个值给x后,for循环停止,程序开始从第2行往下执行,即进行条件判断,若条件为真时,则打印x+2,然后结束循环,来到最外层,按照当时的x值执行最外层的打印,若条件为假时,则结束continue循环,来到最外层,按照当时的x值执行最外层的打印
day3疑问
暂无
day3作业
测试题:
0.if not (money < 100): 上边这行代码相当于?
自答:判断当money >= 100时,执行
参考答案:if money >= 100:
1.assert 的作用是什么?
自答:判断某段代码是否正确,为真,若为真才执行,不为真则报错
参考答案:
assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。
什么情况下我们会需要这样的代码呢?当我们在测试程序的时候就很好用,因为与其让错误的条件导致程序今后莫名其妙地崩溃,不如在错误条件出现的那一瞬间我们实现“自爆”。
一般来说我们可以用Ta再程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。
2. 假设有 x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换?
自答:x,y,z=z,x,y
参考答案:x, y, z = z, y, x
3. 猜猜 (x < y and [x] or [y])[0] 实现什么样的功能?
自答:当x<y时,x=0,当x>=y时,y=0
*** 参考答案:未给出***
4. 你听说过成员资格运算符吗?
自答:没有哎
*** 参考答案:
Python 有一个成员资格运算符:in,用于检查一个值是否在序列中,如果在序列中返回 True,否则返回 False。***
>>> name = '小甲鱼'
>>> '鱼' in name
True
>>> '肥鱼' in name
False
5.下面的循环会打印多少次"I Love FishC"?
for i in range(0, 10, 2):
print('I Love FishC')
自答:0、2、4、6、8,5次
参考答案:5 次,因为从 0 开始,到 10 结束,步进为 2。
6.下面的循环会打印多少次"I Love FishC"?
for i in 5:
print('I Love FishC')
自答:不打印,因为5不是表达式
参考答案:会报错,上节课的课后习题我们提到了 in 是“成员资格运算符”,而不是像 C 语言那样去使用 for 语法。Python 的 for 更像脚本语言的 foreach
7 回顾一下 break 和 continue 在循环中起到的作用?
自答:break当循环体中的判断为真或假时,退出循环;continue一直进行循环,直到循环遍历
参考答案:break语句的作用是终止当前循环,跳出循环体。
continue语句的作用是终止本轮循环并开始下一轮循环(这里要注意的是:在开始下一轮循环之前,会先测试循环条件)
8.请谈下你对列表的理解?
自答:用户储存信息,类似于MySQL里面的表
参考答案:未给出
9.请问 range(10) 生成哪些数?
自答:0、1、2、3、4、5、6、7、8、9
参考答案:会生成 range(0, 10),list(range(0, 10)) 转换成列表是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10.目测以下程序会打印什么?
while True:
break
print(1)
print(2)
break
print(3)
自答:2、3
参考答案:2、3
11.什么情况下我们要使循环永远为真?
自答:需要进行条件判断时
参考答案:
while Ture:
循环体
同样用于游戏实现,因为游戏只要运行着,就需要时刻接收用户输入,因此使用永远为真确保游戏“在线”。操作系统也是同样的道理,时刻待命,操作系统永远为真的这个循环叫做消息循环。另外,许多通讯服务器的客户端/服务器系统也是通过这样的原理来工作的。
所以永远为“真”虽然是“死循环”,但不一定是坏事,再说了,我们可以随时用 break 来跳出循环
12.【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)?
i = 0
string = 'ILoveFishC.com'
while i < len(string):
print(i)
i += 1
自答:【具体未想出来】
参考答案:
#这段代码之所以“效率比较低”是因为每次循环都需要调用一次 len() 函数
i = 0
string = 'ILoveFishC.com'
length = len(string)
while i < length:
print(i)
i += 1
动动手:
13.视频中小甲鱼使用 if-elif-else 在大多数情况下效率要比全部使用 if 要高,但根据一般的统计规律,一个班的成绩一般服从正态分布,也就是说平均成绩一般集中在 70~80 分之间,因此根据统计规律,我们还可以改进下程序以提高效率。
题目备忘:按照 100 分制,90 分以上成绩为 A,80 到 90 为 B,60 到 80 为 C,60 以下为 D,写一个程序,当用户输入分数,自动转换为ABCD 的形式打印。
自答:将条件判断的顺序改变,改为先判断70-80分
参考答案:
ore = int(input('请输入一个分数:'))
if 80 > score >= 60:
print('C')
elif 90 > score >= 80:
print('B')
elif 60 > score >= 0:
print('D')
elif 100 >= score >= 90:
print('A')
else:
print('输入错误!')
14.Python 的作者在很长一段时间不肯加入三元操作符就是怕跟 C 语言一样搞出国际乱码大赛,蛋疼的复杂度让初学者望而生畏,不过,如果你一旦搞清楚了三元操作符的使用技巧,或许一些比较复杂的问题反而迎刃而解。
请将以下代码修改为三元操作符实现:
x, y, z = 6, 5, 4
if x < y:
small = x
if z < small:
small = z
elif y < z:
small = y
else:
small = z
自答:
small = x if (x<y or z>x) elif y (y<z) else z
参考答案:
small = x if (x < y and x < z) else (y if y < z else z)
15.设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。
程序演示如图:
自答:
cishu = 3
screct = '123'
while cishu:
shuru = input('请输入密码:')
if shuru == screct:
print('密码正确')
break
elif '*' in shuru:
print('密码错误!不可以输入"*"号!您还有',cishu,'次机会')
continue
else:
print('密码错误!您还有',cishu-1,'次机会')
cishu -=1
16.编写一个程序,求 100~999 之间的所有水仙花数。
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
自答:
for i in range(100,1000):
x = int(i/100)#百位
y = int(i/10 % 10)#十位
n = int(i % 10)#个位
if i == x*x*x + y*y*y + n*n*n:
print(i)
17.三色球问题
有红、黄、蓝三种颜色的球,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。
自答:
for red in range(0, 4):
for yellow in range(0, 4):
for green in range(2, 7):
if red + yellow + green == 8:
print(red, yellow, green)