python | 控制流语句(二)


第1节 循环结构

1.1 分类

循环结构共有两种:

  • while循环:「无限循环」,用于循环次数难以提前确定,也可以用于循环次数确定的情况
  • for循环:「有限循环」,用于循环次数可以提前确定,尤其常用于枚举序列,或迭代对象中的元素

一般而言,优先考虑使用for循环,而相同或不同的循环结构之间可以互相嵌套,实现更为复杂的逻辑。


1.1.1 for循环

for循环适用场景:

  • 循环次数确定的时候
  • 遍历序列

其使用语法如下:

for 变量 in 序列:
    循环体

说明:
for       -     关键字,固定写法
变量名     -     和声明变量的要求一样
in        -     关键字,固定写法
序列       -     容器型数据:字符串、列表、字典、元组、集合、迭代器、生成器、range、文件、组合数据类型
:         -     固定写法
循环体     -     和for保持一个缩进的一条或者多条语句;需要重复执行的语句

执行过程         让变量去序列中取值,一个一个的取,取完为止,每取一个值执行一次循环体,
                for循环可以通过控制序列中元素的个数来控制循环的次数
# 测量列表中每个字符的长度
words=["思想","邓小平理论","三个代表重要思想","科学发展观","新时代中国特色社会主义思想"]
for w in words[:]:
    print(w,len(w))

# 测量列表中每个字符的长度
words = ["思想", "邓小平理论", "三个代表重要思想", "科学发展观", "新时代中国特色社会主义思想"]
for w in words[:]:
    if len(w) > 5:
        words.remove(w)
print(words)

# 求输入n个数的平均数
n=eval(input('要输入多少个数'))
sum=0.0
for i in range(n):
    x=eval(input('请输入数字'))
    sum=sum+x
print(sum/n)


1.1.2 while循环

while循环适用场景:

  • 死循环
  • 循环次数不确定

其使用语法如下:

while 条件语句:
    循环体

说明:
while      -    关键字,固定写法
条件语句    -    任何有结果的表达式;数据、已经声明过的变量、运算表达式(不能是赋值语句)等
:          -    固定写法
循环体      -    和while保持缩进的一条或者多条语句;(需要重复执行的语句)

执行过程:        先判断条件语句是否为True,如果为True就执行循环体,执行完循环体再判断条件语句是否为True,
                如果为True又执行循环体,以此类推;直到条件语句为False,循环结束
# while循环:实现0到100的求和
i = 1
sum = 0
while i <= 100:
    sum = sum+i
    i = i+1          # 等价于i += 1(累加)
print(sum)


1.2 else拓展

for循环和while循环都存在else拓展用法:

  • for循环:else语句只在for循环遍历完成后才执行,可用于判断循环执行情况
  • while循环:else语句只在while循环条件不被满足时(为False)才执行
  • break:若循环是因为break结束的,则else语句不会执行

其使用语法如下:

for 变量 in 序列:
    循环体
else:
    代码段

while 条件语句:
    循环体
else:
    代码段

else中代码段:       当循环自然死亡(for后的变量数据取完了;while后面的条件为False),else后面的代码段                           
                  会在循环结束后执行;如果循环是因为遇到break而结束的,那么else后面的代码段就不会执行
else的意义:        可以通过判断else中的代码有没有执行来判断循环有没有遇到break
words=["思想","邓小平理论","三个代表重要思想","科学发展观","新时代中国特色社会主义思想"]
for w in words:
    print(w, len(w))
    break
else:
    print('循环正常结束')


1.3 循环结构优化

为了获得更高的效率和运行速度,有必要对循环语句进行优化,遵循两个优化原则:

  • 原则1:减少循环内部不必要计算,将与循环变量无关代码尽可能提取到循环之外
  • 原则2:多重循环嵌套时,尽量减少内层循环中不必要计算,尽可能往外提
# 循环结构-优化前
import time
start = time.time()  # 获取当前时间
digits = (1, 2, 3, 4)
for i in range(10000):
    result = []
    for i in digits:
        for j in digits:
            for k in digits:
                result.append(i*100+j*10+k)
print('Time Used:', time.time()-start)  # 输出所用时间
len(result)

# 循环结构-优化后,把计算的东西提出来
start = time.time()  # 获取当前时间
digits = (1, 2, 3, 4)
for i in range(10000):
    result = []
    for i in digits:
        i = i*100
        for j in digits:
            j = j*10
            for k in digits:
                result.append(i+j+k)
print('Time Used:', time.time()-start)  # 输出所用时间
len(result)


1.4 循环控制语句

python中用breakcontinue来控制循环语句,以实现循环的终止跳出

1.4.1 break

「终止当次循环,并跳出当前循环」 —— 循环层结束

可以从两方面理解:

  • 终止当次循环:则当次循环后面的if、elif、else…都不再执行
  • 跳出当前循环:若break跳出的是循环嵌套内层循环,则外层的循环会继续执行
# 遍历循环拓展模式:通过else判断循环是否正常结束
words=["思想","邓小平理论","三个代表重要思想","科学发展观","新时代中国特色社会主义思想"]
for w in words[:]:
    print(w,len(w))
    break
else:
    print('循环正常结束')
    
# 从1开始累加,当和超过100时停止
i = 1
sum = 0
while i in range(100):
    sum = sum+i
    i = i+1
    if sum > 100:
        break
print(sum)
print(i)

# 计算小于100的最大素数
# 素数:只能表示为它自己和1的乘积,如13=13*1
for i in range(99, 1, -1):
    for j in range(2, i):
        if i % j == 0:     # 不是素数
            break          # 跳出当前循环,继续遍历列表
    else:
        print(i)
        break              # break,跳出所有循环;删除break,输出所有素数


1.4.2 continue

「终止当次循环,不跳出当前循环」 —— 循环层未结束

可以从两方面理解:

  • 终止当次循环:则当次循环后面的if、elif、else…都不再执行
  • 不跳出当前循环:循环会继续执行,直接进入下一次循环的条件判断
# 找出0-9之间的奇数、偶数,并打印出来
L1=[]
L2=[]
for i in range(10):
    if i%2==0:
        L1.append(i)
        continue
    L2.append(i)
L1
L2   

# 找出符合条件的字符:打印非T的字符
for i in 'PYTHON':
    if i == 'T':
        continue
    print(i)
else:
    print('正常退出')

# 找出符合条件的字符:打印非T的字符
for i in 'PYTHON':
    if i == 'T':
        break        # 体会break和continue的区别
    print(i)
else:
    print('正常退出')


1.5 死循环

死循环就是循环不会终止的循环类型,很多都是由于continue使用不当造成的,即continue使得条件表达式判断的结果永远为True,则产生死循环。

但死循环并非一无是处,可用于完成指定功能,如设置中断程序,常用while truewhile 1

# continue使用不当带来的死循环
# 输出小于10的奇数
i = 0
while i < 10:
    if i % 2 == 0:
        continue
        i += 1
    print(i)

# 正确的用法
i = 0
while i < 10:
    i += 1
    if i % 2 == 0:
        continue
    print(i)

# 死循环巧妙应用
# 输入正数时一直循环,输入负数时停止
while True:     # 等价于while 1
    num = eval(input('请输入一个正数'))
    if num < 0:
        break
print('程序终止')

猜你喜欢

转载自www.cnblogs.com/1k-yang/p/12100437.html
今日推荐