小甲鱼Python3学习笔记之第九讲(仅记录学习)

时间:2022-04-24 21:36:04

第九讲:了不起的分支和循环

一、知识点:

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=(i//100)**3+((i%100)//10)**3+(i%10)**3
    if sum == i:
        print(i)

小甲鱼代码:

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)

-------------------------------------------------------------------------------------------------------------------------