最新消息:

Python入门教程09:分支和循环3

Python 少儿编程 2125浏览 0评论
Python入门教程一

本节继续介绍分支和循环

Python入门教程09:分支和循环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  
  • 设计一个验证密码程序,用户只有三次机会输入错误,如果用户输入的内容中包含*则不计算在内。
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

 

解释: 

Python入门教程09:分支和循环3

您必须 登录 才能发表评论!