首页 > 编程语言 >python流程控制下-for、while循环补充

python流程控制下-for、while循环补充

时间:2022-09-28 18:58:06浏览次数:81  
标签:循环体 python 流程 range break while 循环 print

循环结构之for循环

实现循环结构还可以用关键字for

for关键字

我们来看这一段代码:

emotions = ['smile', 'laugh', 'cry', 'angry']
for emo in emotions:
    print('我现在的心情是:', emo)
"""运行结果:
我现在的心情是: smile
我现在的心情是: laugh
我现在的心情是: cry
我现在的心情是: angry
"""

for循环可以遍历一个含多元素的数据类型,如字符串、列表 、元组、字典、集合等

上述程序就是将列表中的每个元素逐个取出,并且打印了出来。

image

那么for循环具体怎么呢,适用什么场景?

用法:

for 变量名 in 能遍历的数据类型:
    子代码块
  • 与while不同,for循环后面跟的不是条件,它的循环体正常结束的条件是数据值被遍历完了
  • for 后面的变量会绑定本次遍历的元素值,这个变量在循环体中可取(不可改)
练习
 l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
 # 统计列表中有多少个数字2

count = 0
for i in l1:
    if i == 2:
        count += 1
print('列表中有%s个2' % count)

for循环体的break和continue

for同样作为循环结构的关键字,与while自然也有一些共性

  • for循环体中碰到break关键字,会立即终止循环,执行for后续的同级代码

    l1 = [1, 2, 3, 4]
    for i in l1:
        if i == 3:
            break
        print(i)
    # 输出结果
    1
    2
    
  • for循环体中碰到continue关键字,会立即停止本次循环,执行下一次循环

    l1 = [1, 2, 3, 4]
    for i in l1:
        if i == 3:
            continue
        print(i)
    # 输出结果
    1
    2
    4
    

for配合else

for循环如果是正常结束循环(没有被break打断的而结束了循环)

则会执行else子代码块的内容:

l1 = [1, 2, 3, 4]
for i in l1:
    if i == 3:
        continue
    print(i)
else:
    print('正常结束就能看到我喽')
# 输出结果
1
2
4
正常结束就能看到我喽

range

range()常常能和for循环搭配起来,因为它可以生成一个可以遍历的数据类型。

我们可以看一看range和for循环搭配的几种用法

  1. range(一个数字)

    for i in range(10):
        print(i, end=' ')
    #  0 1 2 3 4 5 6 7 8 9 
    for i in [0, 1, 2, 3 ,4 ,5 ,6, 7, 8, 9]:
    	print(i, end=' ')
    #  0 1 2 3 4 5 6 7 8 9 
    

    可以看见range(10)相当于生成了一个从0开始到9的一个列表。(是括号中的数字的前一个数)

  2. range(两个数字)

    for i in range(5, 10):
        print(i, end=' ')
    # 5 6 7 8 9 
    for i in [5 ,6, 7, 8, 9]:
        print(i, end=' ')
    

    从效果来看,range(5, 10)相当于从5到9的一个列表。(左边包含,右边不包含

  3. range(三个数字)

    for i in range(1, 10, 2):
        print(i, end=' ')
    # 1 3 5 7 9
    for i in [1 ,3, 5, 7, 9]:
        print(i, end=' ')
    # 1 3 5 7 9
    

    range(1, 10, 2)表示从1开始,到10之前,以等差为2生成一个列表。(最后一个数字表示步长

所以我们可以知道range的括号内含的几个参数代表什么意思了,也简单掌握了range生成数字列表的功能。

练习
  1. 用循环计算数字1-100的和:
# 参考
total = 0
for i in range(1, 101):
    total += i
print('1-100的总和为:', total)
  1. 编写代码自动生成所有页网址(注意总共多少页)
    https://movie.douban.com/top250
# 参考
douban_url = 'https://movie.douban.com/top%s'
for i in range(1, 251):
    print(douban_url % i)

for循环嵌套

循环嵌套,就是拿循环中套循环。

# 除了利用range()生成数字列表,还可以range决定循环次数。
for i in range(4):  # 外循环运行四次
    for j in range(5):  # 内循环运行五次
        print('*', end='')
    print()
'''运行结果:
*****
*****
*****
*****
'''
内循环循环五次产生一行五个*号
外循环将循环五次的内循环循环了四次,产生了4行

image

while配合else

while配合else使用,则在正常结束循环体代码时会触发else的代码块。

# 猜数字
i = 0
num = '17'
while i < 3:
    # 每次循环要求猜数字
    guess_num = input('猜一下数字')
    # 猜数字猜对了,通过break退出循环
    if num == guess_num:
        print('猜对了,你还是懂我')
        break
# 三次循环都没有猜对,正常结束循环体
else:
    print('猜了三次还猜不出来,不心有灵犀')

image

while循环补充

死循环

不仅无法自动结束,在持续期间还会占用CPU的大量资源。

是十分危险的无限循环行为。

说到危险就要提到不久前,b站因为几行代码,导致“0”溢事件,不断的循环运算,导致b站的服务器被占满,直接崩了。

什么样的代码算死循环呢?

count = 2
while True:
    count **= 2
    # 无限幂运算,想想就刺激,不要复制到自己的电脑尝试。

while循环嵌套

while循环嵌套,是大循环嵌套小循环非常6的一个构造。

i = 1
while i < 3:
    print('外层循环%s' % i)
    j = 1
    while j < 3:
        print('内层循环%s' % j)
        j += 1
    i += 1
# 运行结果:
'''
外层循环1
内层循环1
内层循环2
外层循环2
内层循环1
内层循环2
'''

每执行一次外层循环体,都会完整的走完一次内层循环。

因为内层while是外层while的循环体。

image

了解:while嵌套之break生效
# 不断询问账户,直到输入正确进入内层循环
while True:
    account = input('输入账户')
    if account == 'leethon':
        # 不断输入数字,当数字输入是3时,退出程序
        while True:
            num = input('输入数字')
            if num == '3':
                break
	else:
    	print('账户错了,重新输入')

以上的程序中,当我们猜对数字后,会发现程序要求我们继续输入账户,说明内层的break让程序退出了内层循环,但却无法跳出外层循环。

所以我们可以得出一个结论:break仅打断它所在的最内层循环

那么我们想要跳出外层循环应该怎么做呢?

有两个方案:

  • 在外层的while循环体也加一个break

    image

    • 如上,当内循环结束后就立马跟一个break结束外循环
    • 新加的break放在这里与内while同级,同属于外循环体,所以碰到后会结束外循环
    • 这个break在if分支下,即当账户正确时且内部数字也猜对了才会结束外循环
  • 使用全局标记退出

    # 定义一个全局变量
    flag = True
    # 一开始flag一直为真
    while flag:
        account = input('输入账户')
        if account == 'leethon':
            # 不断输入数字,当数字输入是3时,退出程序
            while flag:
                num = input('输入数字')
                if num == '3':
                    # 只有当这里才可以修改flag为假
                    flag = False
    	else:
        	print('账户错了,重新输入')
    
    1. 当猜对数字后,flag修改为False并不是立即结束循环,只有break才能打断循环
    2. flag修改后,此次循环正常结束,进入下一次while条件判断
    3. 内层while条件判断发现flag为假,不必进行下一次循环了
    4. 外层while条件判断发现flag为假,不必进行下一次循环了

标签:循环体,python,流程,range,break,while,循环,print
From: https://www.cnblogs.com/Leethon-lizhilog/p/16739212.html

相关文章

  • python-装饰器
    装饰器(1)什么是装饰器:器指的是工具,可以定义成函数装饰指的是为其他事务添加额外的东西来点缀上面两者合到一起:装饰器指的是定义一个函数,该函数用来为其他函数添......
  • python开发学习全记录
    目录Python开发学习全记录Python基础开发者最常用的文本工具——typoratypora安装与使用计算机基础知识编程与编程语言Python开发所使用的IDE工具——pycharmpycharm的下载......
  • python-正则表达式re模块
    07、正则表达式学习正则表达式操作字符串re模块是用C语言写的没匹配速度非常快其中compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象,该对象拥有......
  • python-函数的参数与返回值
    Python函数4.1、函数初识在编写程序的过程中,有某一功能代码块出现多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数就......
  • python中字典更新键(key)的方式
    字典中的键(key)是哈希类型,不可以直接修改,需要修改键值用以下方法.方法一:新增key其value为原key的value,删除原key及其对应的value demo1={'name':'小瓜',......
  • python-简单模块的使用
    提示:简单模块了解掌握@目录uuid模块calendar日历模块time模块datetime模块os模块sys模块random模块json和pickle模块jsonpickle模块hashlib模块configparser模块subproc......
  • python-名称空间与作用域
    名称空间与作用域(1)名称空间(namespaces)用来存放名字的地方是对栈区的划分有了名称空间,就可在栈区中放相同的名字1.1、内置名称空间存放的名字:是Python解释器内置的名字......
  • while.for循环和基本数据类型内置方法
    while循环补充说明流程控制之for循环基本数据类型内置方法内容详细1.死循环真正的死循环是一旦执行,Cpu的功耗会急速上升知道系统采取紧急措施所以尽......
  • python-并发编程
    目录01、理论多道技术null02、进程进程运行的三状态图同步和异步阻塞和非阻塞开启进程的两种方式进程对象的join方法进程之间数据相互隔离(默认情况下)进程对象及其他方法僵......
  • Python错误:模块导入失败from scrapy.xlib.pydispatch import dispatcher
    问题描述:python中使用pip安装模块时,出现:Fatalerrorinlauncher:Unabletocreateprocessusing'"' 解决办法: 原因分析:scrapy版本不对。测试了一下,发现最......