了不起的分支和循环 3
测试题:
0. 下面的循环会打印多少次 ‘I Love China!’?
for i in range(0, 10, 2):
print('I Love China!')
会打印 5 次,因为从 0 开始,到 10 结束,步进为 2(0,2,4,6,8)
- 下面的循环会打印多少次 ‘I Love China!’?
for i in 5:
print('I Love China!')
会报错!因为 in 在 Python 是 “成员资格运算符”,而不是像 C 语言那样去使用 for 语法
Python 的 for 更像脚本语言的 foreach
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
for i in 5:
TypeError: 'int' object is not iterable
2. 回顾一下 break 和 continue 在循环中起到的作用?
(1) break 语句的作用是终止当前循环,跳出循环体
(2) continue 语句的作用是终止本轮循环并开始下一轮循环
(这里要注意的是:在开始下一轮循环之前,会测试循环条件)
3. 请谈下你对列表的理解?
和 C语言的数组差不多,和 Vector容器也很像,有许多套的方法
4. 请问 range(10) 生成那些数?
会生成 range(0, 10), list(range(0, 10)) 转换成列表是: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
注意不包括 10
5. 目测以下程序会打印什么?
while True:
while True:
break
print(1)
print(2)
break
print(3)
会打印 2 3;因为print(1)不在第一个循环直接执行了break跳出此次循环,所以print(1)不起作用
6. 什么情况下我们要使循环永远为真?
while True:
循环体
(1) 同样用于游戏实现,因为游戏只要运行着,就需要时刻接收用户输入,因此使用永远为真确保游戏“在线”
(2) 操作系统也是同样的道理,时刻待命,操作系统永远为真的这个循环叫做消息循环
(3) 另外,许多通讯服务器的客户点/服务器系统也是通过这样的原理来工作的
所以永远为“真”虽然是“死循环”,但不一定是坏事,再说了,我们可以随时用 break 来跳出循环!
7. 你觉得以下代码效率方面怎样?有没有办法可以大幅度改进?(仍然使用while)
这段代码之所以“效率比较低”是因为每次循环都需要调用一次 len() 函数
i = 0
string = 'ILoveChina!'
while i < len(string):
print(i)
i += 1
改进后:
i = 0
string = 'ILoveChina!'
lenght = len(string)
while i < lenght:
print(i)
i += 1
动动手:
0. 设计一个验证用户密码的程序,用户只有三次错误机会,不过如果用户输入的内容中包含 “*” 则不计算在内
# 定义三次输入错误机会
times = 3
# 用户输入密码
passwd = input('请输入密码:')
# while循环,如果用户输入的内容中包含 '*' ,则需要用户重新输入
while '*' in passwd:
passwd = input('请重新输入密码:') # 重新输入
print('合法') # 密码合法
1. 编写一个程序,求 100~999 之间的所有水仙花数
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数
for i in range(100, 1000):
sum = 0
temp = i
sum += (temp % 10)**3
temp //= 10
sum += (temp % 10)**3
temp //= 10
sum += (temp % 10)**3
if i == sum:
print(i)
注意这里要用 float 除法 //
2. 三色球问题: 有红、黄、绿三种颜色的球,其中红球3个,黄球3个,绿球6个
先将这12个球混合放在一个盒子中,从中任意摸出8个球,编程计算摸出球的各种颜色搭配
count = 0 # 记录情况总数
# 红球3个
for red in range(0, 4): # 等同于 i=0, i<4,i++
# 黄球3个
for yellow in range(0, 4):
# 绿球6个
for green in range(0, 7):
# 任意摸出的球8个
if red + yellow + green == 8:
print('红球: ', red, '黄球: ', yellow, '绿球: ', green)
count += 1
print('总数:', count)
3. range( [start,] stop [, step = 1] )的使用
(1) 这个BIF有三个参数,其中用中括号括起来的两个表示这两个参数是可选的。
step = 1 表示第三个参数的默认值是1
(2) range这个BIF的作用是生成一个从start参数的值开始到stop参数的值结束的数字序列
(包含start,不包含stop)。
range(5)
range(0,5)
range(1,100,2)
上面第一个语句和第二个语句范围相同
第三个语句步进为2相当于生成1-100的奇数