第九讲:了不起的分支和循环
一、知识点:
0.for循环,可以遍历任何序列的项目,如一个列表或者一个字符串。语法为:
for <变量> in <序列>:
<执行代码>
else:
<执行代码>
1.range()函数,返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。语法:
range(stop)
range(start, stop[, step])
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
2.break和continue语句以及循环中的else子句:
break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。 实例如下:
for letter in 'Runoob': # 第一个实例
if letter == 'b':
break
print ('当前字母为 :', letter)
var = 10 # 第二个实例
while var > 0:
print ('当期变量值为 :', var)
var = var -1
if var == 5:
break
print ("Good bye!")
输出结果:
当前字母为 : R
当前字母为 : u
当前字母为 : n
当前字母为 : o
当前字母为 : o
当期变量值为 : 10
当期变量值为 : 9
当期变量值为 : 8
当期变量值为 : 7
当期变量值为 : 6
Good bye!
continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
for letter in 'Runoob': # 第一个实例
if letter == 'o': # 字母为 o 时跳过输出
continue
print ('当前字母 :', letter)
var = 10 # 第二个实例
while var > 0:
var = var -1
if var == 5: # 变量为 5 时跳过输出
continue
print ('当前变量值 :', var)
print ("Good bye!")
输出结果为:
当前字母 : R
当前字母 : u
当前字母 : n
当前字母 : b
当前变量值 : 9
当前变量值 : 8
当前变量值 : 7
当前变量值 : 6
当前变量值 : 4
当前变量值 : 3
当前变量值 : 2
当前变量值 : 1
当前变量值 : 0
Good bye!
--------------------------------------------------------------------我是一条分割线----------------------------------------------------------------------
二、课后作业:
0. 下面的循环会打印多少次"I Love FishC"?
for i in range(0,10,2):
print('i love fishc')
5次,0到9,每次打印i值递增2,所以在i值为0,2,4,6,8的时候各打印一次
1.下面的循环会打印多少次"I Love FishC"?
for i in 5:
print('i love fishc')
会报错, in 是“成员资格运算符”。
2. 回顾一下 break 和 continue 在循环中起到的作用?
break语句的作用是终止当前循环,跳出循环体。
continue语句的作用是终止本轮循环并开始下一轮循环(这里要注意的是:在开始下一轮循环之前,会先测试循环条件)。
3.请谈下你对列表的理解?
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。
4.请问 range(10) 生成哪些数?
0到9,相当于range(0,10),list(range(0,10))得到[0,1,2,3,4,5,6,7,8,9]
5.目测以下程序会打印什么?
while True:
while True:
break
print(1)
print(2)
break
print(3)
2
3
6.什么情况下我们要使循环永远为真?
用于游戏实现,因为游戏只要运行着,就需要时刻接收用户输入,因此使用永远为真确保游戏“在线”。操作系统也是同样的道理,时刻待命,操作系统永远为真的这个循环叫做消息循环。另外,许多通讯服务器的客户端/服务器系统也是通过这样的原理来工作的。所以永远为“真”虽然是“死循环”,但不一定是坏事,再说了,我们可以随时用 break 来跳出循环!
7.【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)?
i = 0
string = 'http://www.wenkuxiazai.com'
while i < len(string)):
print(i)
i+= 1
上面的代码,每次循环都要调用len()函数,改为一次性直接调用如下:
i = 0
string = 'http://www.wenkuxiazai.com'
length = len(string)
while i < length:
print(i)
i += 1
--------------------------------------------------------------------我是一条分割线----------------------------------------------------------------------
三、动动手:
0.设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内
print('---------验证密码程序---------')
times = 3
password = '123456'
while times > 0:
passwd = input('请输入密码:')
if passwd == password:
print('密码正确,正在进入程序……')
break
elif '*' in passwd:
print('输入的密码不能带‘*’,请重新输入,',end='')
continue
elif passwd != password:
print('密码错误,你还有',times-1,'次机会,',end='')
times -= 1
1.编写一个程序,求 100~999 之间的所有水仙花数。如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i)
其中
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
等价于
sum=(i//100)**3+((i%100)//10)**3+(i%10)**3
2.三色球问题:
有红、黄、蓝三种颜色的球,其中红球3个,黄球3个,绿球6个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。
print('-----三色球问题-----')
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)
--------------------------------------------------------------------我是一条分割线---------------------------------------------------------------------