第009讲:了不起的分支和循环3
第009讲:了不起的分支和循环3
测试题:
0. 下面的循环会打印多少次"I Love FishC"?
for i in range(0, 10, 2): #每次打印完+2
print('I Love FishC')
5次
1. 下面的循环会打印多少次"I Love FishC"?
for i in 5:
print('I Love FishC')
# 会报错,in 是成员资格运算符,5是整数
2. 回顾一下 break 和 continue 在循环中起到的作用?
# break 是结束整个循环块
# continue 是在真的情况下结束当前循环并从新开始下一个循环
3. 请谈下你对列表的理解?
# 嗯,有些知识点需要自己总结才能加固,下节课小甲鱼将跟大家畅谈一个打了激素的数组:列表,不容错过哦_
4. 请问 range(10) 生成哪些数?
# 0,1,2,3,4,5,6,7,8,9
# 从0开始十个数
5. 目测以下程序会打印什么?
while True:
while True:
break
print(1) # 上一行已经结束了循环体,所以这一行无效
print(2)
break
print(3)
2
3
6. 什么情况下我们要使循环永远为真?
while Ture:
循环体
'''
同样用于游戏实现,因为游戏只要运行着,就需要时刻接收用户输入,因此使用永远为真确保游戏“在线”。
操作系统也是同样的道理,时刻待命,操作系统永远为真的这个循环叫做消息循环。另外,许多通讯服务器
的客户端/服务器系统也是通过这样的原理来工作的。
所以永远为“真”虽然是“死循环”,但不一定是坏事,再说了,我们可以随时用 break 来跳出循环!
'''
7. 【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)?
i = 0
string = 'ILoveFishC.com'
while i < len(string):
print(i)
i += 1
i = 0
string = 'ILoveFishC.com'
length = len(string) # 有时候多一行代码不一定就不简洁,像这里,多了这一行代码 len 函数就只需要调用一次
while i < length:
print(i)
i += 1
动动手:
0. 设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。
程序演示图
data = 'hello233'
number = 3
while number: # 0为False,非0都是True,这里一旦number变量为0的时候,循环则停止
password = input('请输入密码:')
if password == data:
print('密码正确,正在进入.....')
break
elif '*' in password: # 条件在左,被检测的变量在右
password = input('密码不能含有\'*\'号.请重新输入:')
continue
elif password != data:
number -= 1
print('对不起,密码错误,当前还剩',number,'次机会!')
if number == 0:
print('今日密码错误3次,请明天在来....')
1. 编写一个程序,求 100~999 之间的所有水仙花数。
# 如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。
# 例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
for i in range(100, 1000000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
'''联合一下行看,则是每计算一次当前数字的末尾数则地板除一次,3位计算了末尾就计算前两位的末尾数在计算第一位的数
例如153,第一次计算 0+(153%10)**3=3**3=0+27 下一行代码则将153//10得到15,15带入第二次计算
第二次计算,27+(15%10)**3=5**3=0+27+125
第三次计算 27+125+(1%10)**3=0+27+125+1
'''
temp //= 10
if sum == i:
print(i)
2. 三色球问题
# 有红、黄、蓝三种颜色的球,其中红球 3 个,黄球 3 个,绿球 6 个。
# 先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。
print('red\tyellow\tgreen')
for red in range(0, 4):
for yellow in range(0, 4):
for green in range(0, 7):
if red + yellow + green == 8:
print(red, '\t', yellow, '\t', green)
'''
小甲鱼的答案中,green是 range(2,7),并注释:range(2, 7) 是产生 [2, 3, 4, 5, 6] 这 5 个数,
绿球不能是 1 个,因为如果绿球是 1 个的话,红球 + 黄球需要有 7 个才能符合题意,而红球和黄球每种只有 3 个,因此是 range(2, 7)
而实际上上面的代码已经指定了答案必须是3个颜色球数总和为8,所以不存在green为0或1个的情况,因此用 range(0,7) 也是可以的
Python语言学习菜鸟 老家四川南充,来玩留言,嘻嘻
话说觉得这个主题难受的请下面评论