py语法基础008_for循环

本文详细介绍了Python中的循环结构,包括while和for循环的基本语法、嵌套循环、循环控制语句(break和continue)以及else子句的用法。同时,强调了循环代码优化的三个原则,并通过实例展示了如何提高循环效率。最后,讨论了死循环的概念及其应用场景。
# encoding=utf-8
"""
循环结构用来重复执行一条或多条语句
循环体里面的语句至少应该包含改变条件表达式的语句,以使循环趋于结束;否则,就会变成一个死循环
如果符合条件,则反 复执行循环体里的语句。在每次执行完后都会判断一次条件是否为 True,如果 为 True 则重复执行循环体里的语句
一个循环体内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”。
break 语句可用于  while  和  for  循环,用来结束整个循环。当有嵌套循环时,break  语句只 能跳出最近一层的循环。
continue  语句用于结束本次循环,继续下一次。多个循环嵌套时,continue  也是应用于最 近的一层循环。

while、for  循环可以附带一个  else  语句(可选)。如果  for、while  语句没有被  break  语句 结束,则会执行  else  子句,否则不执行
循环代码优化 三个原则可以大大提高运行效率,避免不必要的低效计算:
1.    尽量减少循环内部不必要的计算
2.    嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
3.    局部变量查询较快,尽量使用局部变量
其他优化手段
    1.    连接多个字符串,使用  join()而不使用+
    2. 列表进行元素插入和删除,尽量在列表尾部操作

#循环代码优化测试
import time

start = time.time()
for i in range(1000):
    result = []
    for m in range(10000):
        result.append(i*1000+m*100)

end = time.time()
print("耗时:{0}".format((end-start)))

start2 = time.time()
for i in range(1000):
    result = []
    c = i*1000
    for m in range(10000):
        result.append(c+m*100)

end2 = time.time()
print("耗时:{0}".format((end2-start2)))

使用  zip()并行迭代
我们可以通过  zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。
names  =  ("高淇","高老二","高老三","高老四")
ages  =  (18,16,20,25)
jobs  =  ("老师","程序员","公务员")
for  name,age,job  in  zip(names,ages,jobs):
    print("{0}--{1}--{2}".format(name,age,job))


1、while基本格式
(1)初始条件设置:通常是一个计数器,来控制条件表达式是否成立
(2)基本格式
    初始条件设置
    while 条件:
        条件成立时重复执行的代码(一行或多行)
        改变条件的值
(3)else基本格式
    初始条件设置
    while 条件表达式:
        条件成立时执行的代码
        改变条件的值
    else:
        条件不成立时执行的代码
(4)流程
    如果条件表达式成立,执行执行循环体中的代码块
    执行完循环体中的代码后,继续判断条件表达式是否成立
    如果成立继续执行循环体,直到条件表达式为False后程序继续往下执行
(5)使用场景:不确定循环次数,或者已知是一个条件
(6)计数问题,一般需要定义一个计数器:就是使用一个数值使其每次循环增加一定的值,实现计数的功能
2、循环中断关键字
(1)break:结束一个循环,执行循环后的代码
    A、用于完全结束一个循环,跳出循环体执行循环后面的语句
    B、强制结束循环,不会执行while连用的else里面的内容
    C、应用场景,在学生管理系统项目中,退出系统时就可以使用break关键字
(2)continue:结束本次循环(循环体中continue后代码不再执行),执行下一次循环
    A、只终止本次循环,接着还执行后面的循环
    B、跳过当前的循环,会继续执行while连用的else里面的内容
    C、应用场景,只打印0-10之间的奇数,可以用continue语句跳过某些循环
(3)else:循环结束后,一定会执行的结束的语句(非强制结束时,最终都会执行<一次>else代码)
    A、在条件语句为false时执行else的语句块
    B、循环语句正常结束后,执行else代码块中的内容
    C、如果没有正常执行完(有break),则不执行else
    D、如果while中执行了break语句,那么else就不执行,反之,就执行
    E、执行过程:先执行while循环,当循环能够正常结束时,才会执行else里面的代码,如果循环内容里碰到break,就不执行else
3、循环结束的两种方式:
(1)根据判定条件不成立,结束
(2)通过break关键字强制结束循环
4、pass语句
(1)pass是空语句,是为了保持程序结构的完整性
(2)pass不做任何事情,一般用做占位语句
(3)if-pass
    if 条件表达式:
        pass
(4)while-pass
    while 条件表达式:
        pass
(5)for-pass
    for 临时变量 in 可迭代对象:
        pass
5、死循环:循环永不停止
(1)基本格式
    while True:
        重复执行的代码(一行或多行代码)
(2)特点:一直在循环,永远满足循环条件,不能跳出循环
(3)条件:如果条件判断语句永远是 True, 循环体一直执行,这时的循环就变成了死循环
(4)执行过程:表达式的结果是True,才会执行循环内容,如果结果一直是True,会一直循环下去
(5)应用场景:游戏循环,要使用死循环一直让游戏保持运行
6、for循环可以遍历任何有序的序列对象内的元素
(1)应用:主要用于迭代一个对象或明确循环次数
(2)特点:不需要计数器,能够自行结束,循环次数
(1)可用于字符串、列表、元组、其他内置可迭代对象及能够通过类所创建的新对象
(2)遍历: 依次获取容器中的每一个元素
(3)遍历字符串: 依次获取这个字符串中的每一个字符元素
7、for循环结构
    for 临时变量 in 可迭代对象:
        要循环执行的代码
8、for循环执行流程
    将可迭代对象中的数据依次取出,赋值给临时变量,然后执行循环体
    当可迭代对象中的元素全部遍历完后for循环停止运行
9、for-else
    for 临时变量 in 可迭代对象:
        要循环执行的代码
    else:
        循环正常结束执行的代码
10、range(start,stop,step):构造一个从start开始到stop结束的步长为step的一个数列
(1)功能: 函数产生一个满足要求的整数序列
(2)start:表示整数的开始位置,可以省略,默认为0,包含在内
(3)stop:表示整数的结束位置,不可省略,不包含在内
(4)step:表示步长,可以省略,默认为1:next = cur+ step
11、循环嵌套
(1)在一个循环体语句中又包含另一个循环语句
(2)允许在一个循环体里面嵌入另一个循环
12、嵌套循环可能有多层,但一般实际开发最多两层就可以(99%的情况)
(1)for-for循环嵌套
    for 临时变量1 in 可迭代对象1:
        for 临时变量2  in 可迭代对象1:
            需要循环执行的代码
(2)while-while循环嵌套
    while 条件表达式1:
        while 条件表达式2:
            需要循环执行的代码
(3)while-for循环嵌套
    while 条件表达式:
        for 临时变量 in 可迭代对象:
            需要循环执行的代码
(4)for-while嵌套循环
    for 临时变量 in 可迭代对象:
        while 条件表达式:
            需要循环执行的代码
"""
import os
import time
import random
import requests
from sys import stdout
from utils import myPrint

myPrint("while循环")
# ticket ~ 票;整数表示票的号码
ticket = 1
# 循环卖票
while ticket <= 10:
    print("卖出了一张票:", ticket, "号票")
    ticket += 1 # 票的号码~增加1
print("所有的票都卖完啦~ 下班下班,回家老婆孩子热炕头")

myPrint("while循环+if判断")
# 输出1-100的所有数字
print("\n输出1-100的所有数字:", end=" ")
# 记录数字的和
sum = 0
# 记录偶数数字的和
even = 0
# 记录奇数数字的和
odd = 0
# 控制次数,构造输出的数字
i = 1
while i <= 10:
    print(i, end=",")
    sum = sum + i
    if i % 2 == 0:
        even = even + i
    else:
        odd = odd - i
    i += 1
print("\n输出1-100的和:", sum)
print("\n输出1-100的所有偶数和是:", even)
print("\n输出1-100的所有偶数和与奇数和之差是:", even-odd)

myPrint("while循环+break关键字")
# 当前还剩10张票,当剩3张时,不再卖票
print("\n剩10张票,剩3张时,停卖:", end="")
i = 10  # 票
while True:
    if i == 3:
        print("反恐演练,终止售票,提前下班")
        break
    print("成功售出",ticket,"号票")
    i -= 1
# 不论while的条件是否为true,有else关键字时,只要不执行break,这里的代码就会执行一次
else:
    print("售票完成,下班回家")

myPrint("while循环+continue关键字")
# 当前还剩10张票,第五张票不卖,其他票卖光为止。
print("\n剩10张票,第5张不卖,其余卖完:", end="")
i = 11  # 票
while i > 1:
    i -= 1
    if i == 5:
        continue
    print(f"卖第{i}张", end=",")

# 买票中途,要求预留6号和8号票
# 票的号码
ticket = 1
print()
while ticket <= 10:
    print("准备售出",ticket,"号票")
    # 预留6|8号票
    if ticket == 6 or ticket == 8:
        print("这是预留票,不能出售")
    else:
        print("成功售出", ticket, "号票")
    ticket += 1
print("售票完成,下班回家")

# 火车站卖票,买到一半不卖了
a = 0
while a <10 :
    a+=1
    print("正在售出第",a,"张票")
    if a>6:
        print("提前下班了,停止卖票~")
print("结束一天的工作,高高兴兴的回家了~~")

myPrint("while循环+else分支")
# 练习:某人买了10张彩票,需要一一刮开,当中奖后就兴奋把剩余的彩票扔掉了,如果没有中奖就一直刮
ticket = 11
key = 8   # 模拟中奖号码
while ticket>1:
    num = random.randint(1,10)   # 刮开的数字
    if key == num:
        print("第",11-ticket,"张彩票中奖了")
        print("我中奖了~~~,其他彩票不要了")
        break
    ticket -= 1  # 彩票数量减少
else:
    print("呜呜呜~全没中奖!!!次日,新闻报道一男子因彩票没中奖,跳楼了~~~")


# while-break-else循环
a = 0
while a < 10:
    print("break不执行")
    if a == 6:
        break
    a = a + 1
    print(a)
else:
    print('else下的代码')

# while-continue-else循环
a = 0
while a < 10:
    print("continue执行")
    a = a + 1
    if a == 6 or a == 7:
        continue
    print(a)
else:
    print('else下的代码')

# 执行10次后退出程序
print("\n执行10次后退出程序:", end="")
i = 0  # 次数
while True:
    print(f"第{i}次", end=",")
    i += 1
    if i == 10:
        break

myPrint("for循环结构")
# 迭代字符串
s = "hello world"
for i in s:
    print(i,end='/')

# 从0开始到9,步长为1
print("获取10以内的数列对象:",range(10))
print("range的数列类型:",type(range(3)))  # 可迭代对象

# range低层原理:是可迭代的(不是迭代器)
R = range(1,10,2)
from collections import Iterable,Iterator
print(R,type(R),isinstance(R,Iterable),isinstance(R,Iterator))

# 判定数字是否是质数(除1和本身,无其他因数)
# for-for循环方法
for i in range(2,100):
    for j in range(2,i):
        if i%j == 0:
            break
    else:
        print(i)

# while-while循环方法
c = 0
while c<200:
    c += 1
    a = c
    i = 2
    while i < a:
        if a % i == 0:
            # print("不是质数")
            break
        i += 1
    else:
        print(a,"是质数")


myPrint("死循环")
# 死循环
a = 2
while a < 3:
    print('我是一个死循环...我永远不会结束...')


### Python `for` 循环的用法与示例 #### 基础语法 Python 的 `for` 循环用于遍历任何序列中的项目,如列表、元组、字符串等。基本语法如下: ```python for 变量 in 序列: 执行代码块 ``` 每次迭代时,变量会被赋值为序列中的下一个值,直到序列耗尽为止。 #### 示例 1:遍历列表 以下是通过 `for` 循环遍历列表的一个简单例子[^2]: ```python fruits = ['apple', 'banana', 'cherry'] for fruit in fruits: print(fruit) ``` 此代码会依次打印列表中的每个水果名称。 #### 示例 2:使用 `range()` 函数 `range()` 是一个内置函数,常用于生成一系列数字。下面的例子展示了如何利用它创建一个简单的计数器[^3]: ```python for i in range(5): print(i, end=' ') ``` 这段代码将输出:`0 1 2 3 4`。 #### 示例 3:带有条件判断的循环 可以在 `for` 循环内部加入条件语句来控制流程。例如,在找到特定项时提前退出循环: ```python numbers = [1, 2, 3, 4, 5] search_value = 3 for num in numbers: if num == search_value: print(f"找到了 {num}") break ``` #### 示例 4:带 `else` 子句的循环 当 `for` 循环正常完成而未被 `break` 终止时,可执行附加的 `else` 块[^3]: ```python for i in range(5): if i == 6: # 此处不会触发 break else: print("循环正常结束") ``` 如果没有任何中断发生,则显示消息“循环正常结束”。 #### 性能优化提示 尽管以上介绍了标准用法,但在实际应用中应考虑性能因素。对于大规模数据集的操作,纯 Python 的 `for` 循环可能较慢;此时推荐采用 NumPy 或 Pandas 等库实现矢量化运算以提高速度[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值