第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. 设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。

程序演示图
image

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) 也是可以的
posted @ 2021-05-20 13:59  田二爷  阅读(67)  评论(0)    收藏  举报