零基础入门学习Python(9)--了不起的分支和循环3

前言

本节继续介绍分支和循环

知识点

while循环

Python while循环与if条件分支有点类似,在条件为真的情况下,执行某一段指定的代码。不同的是只要条件为True,while循环就会一直重复执行那一段代码,我们把这段代码称之为循环体。直到条件为False时,才会停止。

当我们在这个循环体设置一些语句,以修改条件,那么我们这个while循环运行到指定位置时,就会退出。
语法:

while 条件:
    循环体

例如:
我们条件设置为 i<10, 循环体设置为i += 1,那么每执行一次循环体,条件i就会加1,直到i=10时,条件为假,才会退出循环。

for循环

虽然说Python是由C语言编写而来的,但是它的for循环跟C语言的for循环不太一样,Python的for循环显得更为智能和强大!
主要是体现在Python的for循环可以自动的调用迭代器,自动捕获一些异常,并结束循环
语法

for 目标 in 表达式:
    循环体

目标:每一次迭代的变量
表达式:一个列表或者元祖

实验:

>>> for i in a:
    print(i,end=' ')


F i s h C 


>>> for each in member:
    print(each,len(each))


小甲鱼 3
黑夜 2
小布丁 3
迷途 2
怡静 2

range()

for循环的小伙伴

语法range([start],stop[,step=1])
这个BIF有三个参数,其中用中括号括起来的两个表示这两个参数是可选的
step=1:第三个参数的值默认为1,表示每次递增为1
range这个BIF的作用是生成一个从start参数的值开始到stop参数值结束的数字序列

实验:

>>> range(5)
range(0, 5)

>>> list(range(5))
[0, 1, 2, 3, 4]
>>> for i in range(5):
    print(i)


0
1
2
3
4
>>> for i in range(2,9):
    print(i)


2
3
4
5
6
7
8
>>> for i in range(1,10,2):
    print(i)


1
3
5
7
9

两个关键的语句break,continue

break作用终止当前循环,跳出循环体

例子:

bingo = '小甲鱼是帅哥'
answer = input('请输入小甲鱼最想听的一句话:')

while True:
    if answer == bingo:
        break
    answer = input('抱歉,错了,请重新输入(答案正确才能退出游戏):')

print('哎哟,帅哦~')
print('您真是小甲鱼肚子里的蛔虫啊^_^')

运行结果:

请输入小甲鱼最想听的一句话:sha
抱歉,错了,请重新输入(答案正确才能退出游戏):bi
抱歉,错了,请重新输入(答案正确才能退出游戏):nidaye
抱歉,错了,请重新输入(答案正确才能退出游戏):小甲鱼是帅哥
哎哟,帅哦~
您真是小甲鱼肚子里的蛔虫啊^_^

continue作用终止本轮循环并开始下一轮循环,在开始下一轮循环之前,会先测试循环条件,只有循环条件为True时,它才会开始下一轮循环。否则,退出循环。

例子:

for i in range(10):
    if i%2 != 0:
        print(i)
        continue
    i += 2
    print(i)

运行结果:
2
1
4
3
6
5
8
7
10
9

分析:
range(10) = [0,1,2,3,4,5,6,7,8,9]
当i为0时,if条件为假,直接运行i += 2,打印2
当i为1时,if条件为真,打印1,终止本轮循环,开始下一轮循环
当i为2时,if条件为假,直接运行i += 2,打印 4
当i为3时,if条件为真,打印3,终止本轮循环,开始下一轮循环
当i为4时,if条件为假,直接运行i += 2,打印6
当i为5时,if条件为真,打印5,终止本轮循环,开始下一轮循环
当i为6时,if条件为假,直接运行i += 2,打印8
当i为7时,if条件为真,打印7,终止本轮循环,开始下一轮循环
当i为8时,if条件为假,直接运行i += 2,打印 10
当i为9时,if条件为真,打印9,终止本轮循环,开始下一轮循环

课后习题

  • 目测以下程序会打印什么?
while True:
    while True:
        break
        print(1)
    print(2)
    break
print(3)

运行结果:
2,3
  • 以下程序有没有办法大幅提升效率(仍然使用while):
i = 0
string = 'ILoveFishC.com'
while i < len(string):
    print(i)
    i += 1
-------
while True:
    for i in range( len('ILoveFishC.com')):
        print(i)
    break
--------
i = 0
string = 'ILoveFishC.com'
length = len(string)
while i < length:
    print(i)
    i += 1  
---------
这段代码之所以效率低,是因为每次循环都需要调用len()函数。
  • 设计一个验证密码程序,用户只有三次机会输入错误,如果用户输入的内容中包含*则不计算在内。
password = 'fishC'
count = 3
while count:
    passwd = input('请输入密码:')
    if passwd == password:
        print('密码正确,进入程序...')
        break
    elif '*' in passwd:
        print('密码中不能含有"*"号!您还有',count,'次机会~',end=' ')
        continue
    else:
        print('密码输入错误!您还有',count-1,'次机会~',end=' ')
    count -= 1

运行结果:

请输入密码:*
密码中不能含有"*"号!您还有 3 次机会~ 请输入密码:*
密码中不能含有"*"号!您还有 3 次机会~ 请输入密码:*
密码中不能含有"*"号!您还有 3 次机会~ 请输入密码:k
密码输入错误!您还有 2 次机会~ 请输入密码:k
密码输入错误!您还有 1 次机会~ 请输入密码:*
密码中不能含有"*"号!您还有 1 次机会~ 请输入密码:*
密码中不能含有"*"号!您还有 1 次机会~ 请输入密码:*
密码中不能含有"*"号!您还有 1 次机会~ 请输入密码:fishC
密码正确,进入程序...


  • 编写一个程序,求100~999之间的所有水仙花数。

如果一个3位数等于各位数字的立方和,则称这个数为水仙花数,例如:153 = 1^3 + 5^3 + 3^3
for x in range(0,10):
    for y in range(0,10):
        for z in range(0,10):
            sum = x*100 + y*10 +z
            if x**3 + y**3 + z **3 == sum and sum>=100 and sum<1000:
                print(sum)

---------
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
        print(i)       

运行结果:
================== RESTART: C:/Users/ThinkPad/Desktop/1.py ==================
153
370
371
407

解释:
这里写图片描述

posted @ 2018-03-01 16:37  DB-Engineer  阅读(219)  评论(0编辑  收藏  举报