python复盘:007-009了不起的分支和循环
本帖最后由 慕良 于 2020-1-31 18:41 编辑007 了不起的分支和循环I
要点:判断、持续
例1:打飞机
简易版代码:
加载背景音乐
播放背景音乐(设置单曲循环)
我方飞机诞生
interval = 0
while True:
if 用户是否点击了关闭按钮:
退出程序
interval += 1
if interval = 50:
interval = 0
小飞机诞生
小飞机移动一个位置
屏幕刷新
if 用户鼠标产生移动:
我方飞机中心位置 = 用户鼠标位置
屏幕刷新
if 我方飞机与小飞机发生肢体冲突:
我方挂,播放撞机音乐
修改我方飞机图案
打印"Game over"
停止背景音乐,最好淡出
008 了不起的分支II
例2 分数ABCD
0-60为D,60-80为C,80-90为B,90-100为A。
方法一:if
方法二:if....else.....
方法三:if....elif....else....
score = int(input('请输入一个分数:'))
if 90<=score <=100:
print('A')
elif 80<=score <=90:
print('B')
elif 60<=score <=80:
print('C')
elif 0<=score <=60:
print('D')
else:
print('输入错误!')
一、python可以有效避免“悬挂else”
缩进匹配
二、条件表达式(三元操作符)
语法:x if 条件 else y
x,y = 4,5
if x<y:
small = x
else:
small = y
可改为:
small = x if x<y else y
三、断言assert
当assert后边的条件为假时,系统自动崩溃并显示‘Assertion Error’
如:assert 3>4
009 了不起的循环III
一、while循环
语法:
while 条件:
循环体
二、for循环
语法:
for 目标 in 表达式:
循环体
例3:
favourite = 'fishC'
for i in favourite:
print(i,end =' ')
输出:
f i s h C
例4:
member = ['小甲鱼','小布丁','黑夜','张良','颜路']
for zhang in member:
print(zhang,len(zhang))
输出:
小甲鱼 3
小布丁 3
黑夜 2
张良 2
颜路 2
三、range( )
语法:
range( stop[ , step=1] )
作用:
生成一个从start参数值到stop参数值的数字序列
例5:
range(7)
输出:range(0,7)
例6:
for i in range(2,9):
print(i)
输出:
2
3
4
5
6
7
8
例7:
for i in range(1,10,2)
print(i)
输出:
1
3
5
7
9
四、两个关键的语句
break:终止循环
continue:终止本轮循环,开始下一轮循环
例8:
for i in range(10):
if i % 2 !=0:
print(i)
continue
i += 2
print(i)
输出:
2
1
4
3
6
5
8
7
10
9 本帖最后由 慕良 于 2020-2-10 12:09 编辑
思考题
0. if not (money < 100): 上边这行代码相当于?
if money >= 100:
1. assert 的作用是什么?
assert 这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出 AssertionError 的异常。什么情况下我们会需要这样的代码呢?当我们在测试程序的时候就很好用, 因为与其让错误的条件导致程序今后莫名其妙地崩溃, 不如在错误条件出现的那一瞬间我们实现“自爆”。一般来说我们可以用 Ta 再程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话, assert 关键字就非常有用了。
2. 假设有 x = 1 ,y = 2 ,z = 3 ,请问如何快速将三个变量的值互相交换?
x, y, z = y, z, x
3. 猜猜 (x < y and or ) 实现什么样的功能?
三元操作符
4. 你听说过成员资格运算符吗?
Python有一个成员资格运算符:in,用于检查一个值是否在序列中,如果在序列中返回True,否则返回False。
5.下面的循环会打印多少次“I Love FishC”?
for i in range(0,10,2):
print('I Love FishC')
5次
6.下面的循环会打印多少次“I Love FishC”?
for i in 5:
print('I Love FishC')
会报错,因为in是“成员资格运算符”,而不是像C语言那样去使用for语法。python的for更像脚本语言的foreach。
7.回顾一下break和continue在循环中起到的作用?
break:终止循环,跳出循环体
continue:结果为True则中断后进入下一循环,结果为False则直接中断
8.谈谈对列表的理解?
9.range(10)生成哪些数?
会生成range(0,10)
转成列表:list(range(0,10))=【0,1,2,3,4,5,6,7,8,9】
10.目测以下程序会打印什么?
while True:
while True:
break
print(1)
print(2)
break
print(3)
2
3
ps:break只能跳出一层循环
11.什么情况下我们要使循环永远为真?
用于游戏实现、操作系统、许多通讯服务器的客户端/服务器系统
12.用while 提高代码效率
i = 0
string = 'ILoveFishC.com'
while i< len(string):
print(i)
i += 1
ps:效率低是因为每次循环都需要调用一次len()函数
改进如下:
i = 0
string = 'ILoveFishC.com'
length = len(string)
while i < length:
print(i)
i += 1 本帖最后由 慕良 于 2020-2-2 21:45 编辑
操作题
0. 视频中小甲鱼使用 if elif else 在大多数情况下效率要比全部使用 if 要高,但根据一般的统计规律, 一个班的成绩一般服从正态分布, 也就是说平均成绩一般集中在 70~80 分之间,因此根据统计规律,我们还可以改进下程序以提高效率。
题目备忘: 按照 100 分制,90 分以上成绩为 A,80 到 90 为 B,60 到 80 为 C,60 以下为 D,写一个程序,当用户输入分数,自动转换为 ABCD 的形式打印。
grade = int(input('请输入分数:'))
if 60 <= grade < 80:
print('C')
elif 80 < grade <= 90:
print('B')
elif 90 < grade:
print('A')
elifgrade < 60:
print('D')
else:
print('输入错误!')
1. 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
修改如下:
x,y,z = 6,5,4
min = x if x < y else y
small = min if min < z else z
2.设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含‘*’则不计算在内。
程序演示如图:
https://xxx.ilovefishc.com/forum/201309/27/053244g5qmc891goc9mm1x.png
print('==========RESTART==========')
password = 'FishC.com'
i = 3
while i:
write = input('请输入密码:')
if write == password:
print('密码正确,进入程序……')
break
elif '*' inwrite:
print('密码中不能含有“*”号!您还有',i,'次机会!',end = "")
continue
else:
print('密码输入错误!您还有', i, '次机会!',end = "")
i -= 1
3.编写一个程序,求100-999之间的所有水仙花数。
如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153=1^3+5^3+3^3,因此153就是一个水仙花数。
i = 100
while i <= 999:
number = (i//100)**3 + (((i-(i//100)*100))//10)**3 + (i-(i//10)*10)**3
if i == number:
print(i)
i += 1
else:
i += 1
4.三色球问题
有红、黄、蓝三种颜色的球,其中红球3个,黄球3个,绿球6个。先将这12个球混合放在一个盒子中,从中任意摸出8个球,编程计算摸出球的各种颜色搭配。
print('red\yellow\green')
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,'\t',yellow,'\t',green)
ps:\t
https://img.php.cn/upload/image/443/582/434/1561000487848529.png 想问一下为什么要把 i 的值赋给 temp 变量, 直接用 i 进行运算 , 得不出结果
for i in range(100,1000):
sum = 0
while i:
sum = sum + (i%10)**3
i //= 10
if sum == i:
print(i)
折折叠叠像弹簧 发表于 2020-2-15 10:57
想问一下为什么要把 i 的值赋给 temp 变量, 直接用 i 进行运算 , 得不出结果
for i in range(100,1000): ...
你方便把原题以及你的做法发一下吗?不太理解你说的 慕良 发表于 2020-2-16 10:17
你方便把原题以及你的做法发一下吗?不太理解你说的
他(@折折叠叠像弹簧)的意思是
水仙花数的那个题,给出的答案是这个
for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i)
在给出的答案中为什么要把 i 赋值给temp,而不直接用 i ,他尝试直接用 i ,得不出结果。 折折叠叠像弹簧 发表于 2020-2-15 10:57
想问一下为什么要把 i 的值赋给 temp 变量, 直接用 i 进行运算 , 得不出结果
for i in range(100,1000): ...
我认为是因为 i 在为一个数的时候,while 就循环了三次,才表达出需要满足的式子(像153=1^3+5^3+3^3)
我昨天对这个问题的疑惑
https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=156572&pid=4364369 隋戈子 发表于 2020-2-16 12:40
他(@折折叠叠像弹簧)的意思是
水仙花数的那个题,给出的答案是这个
哦哦,原来是这样 本帖最后由 慕良 于 2020-2-16 13:21 编辑
折折叠叠像弹簧 发表于 2020-2-15 10:57
想问一下为什么要把 i 的值赋给 temp 变量, 直接用 i 进行运算 , 得不出结果
for i in range(100,1000): ...
for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i)
因为如果不赋值到temp的话,第06行代码‘i //= 10’会把原来的i值改变
从而此时的 i 为个位数,不等于sum
页:
[1]