循环的作用
循环主要是用来执行重复代码的。比如,我们要打印一行星号,可以执行以下代码:
print("**********")
那我们要打印10行星号呢?最简单的方式就是重复10次打印,比如:
print("**********")
print("**********")
print("**********")
print("**********")
print("**********")
print("**********")
print("**********")
print("**********")
print("**********")
print("**********")
那么我们要打印100行星号呢?这个时候再重复是不太现实的,因为相同的代码,出现的次数太多了。而且你必须要自己记住print语句究竟写了多少行,还很有可能出错。
对于这种重复的代码,使用循环就能够轻松的解决。无论是while循环还是for循环都可以。不过,while循环适合那种不固定次数的循环,for循环适合那种固定次数的循环。比如这里的打印10行星号,就是固定次数的,很适合用for来解决。当然,用while也可以。
示例:使用for循环打印10行星号
for i in range(10):
print("* " * 10)
输出结果:
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
示例:使用while循环打印10行星号
i = 0
while i < 10:
print("* " * 10)
i += 1
输出结果:
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
循环的分类
在Python中,循环分为while 和for 两种,最终实现效果相同。
while循环的语法
while 条件:
条件成⽴重复执⾏的代码1
条件成⽴重复执⾏的代码2
......
for循环语法
for 临时变量量 in 序列:
重复执⾏的代码1
重复执⾏的代码2
......
计算1-100累加和
需求:有1到100共100个整数,计算所有整数的累加和。
这是一个比较经典的数学问题,用数学的方式来解决是最高效的。不过,当交给计算机来解决的时候,计算机强大的计算能力会让我们认为,即使用低效的1+2+3+...
这样不断累加的方式,速度依然非常的块,依旧能够很快的得到结果。
示例1:使用for循环求累加和
sum_num = 0
for i in range(1, 101):
sum_num += i
print(sum_num)
输出结果:
5050
示例2:使用while循环求累加和
i = 1
sum_num = 0
while i < 101:
sum_num += i
i += 1
print(sum_num)
输出结果:
5050
示例3:使用数学公式求累加和。这里为了体验区别,我们求1-1亿的累加和,分别用for,while和数学公式实现,并统计时间。
import time
start_num = 1
end_num = 100000000
sum_num = 0
start_time = 0
end_time = 0
spend_time = 0
print("for循环")
start_time = time.time()
sum_num = 0
for i in range(start_num, end_num + 1):
sum_num += i
print(sum_num)
end_time = time.time()
spend_time = end_time - start_time
print(f"消耗时间:{spend_time}")
print("while循环")
start_time = time.time()
sum_num = 0
i = 1
while i <= end_num:
sum_num += i
i += 1
print(sum_num)
end_time = time.time()
spend_time = end_time - start_time
print(f"消耗时间:{spend_time}")
print("数学公式")
start_time = time.time()
sum_num = 0
# (开始值 + 结束值) * (结束值 / 2)
sum_num = (start_num + end_num) * (end_num // 2)
print(sum_num)
end_time = time.time()
spend_time = end_time - start_time
print(f"消耗时间:{spend_time}")
输出结果:
for循环
5000000050000000
消耗时间:8.482921123504639
while循环
5000000050000000
消耗时间:14.070146799087524
数学公式
5000000050000000
消耗时间:0.0
从结果我们可以看出来,在执行大量重复计算的时候,for循环比while循环更高效,但是和利用数学公式比起来,两者都太差了。所以,数学太重要了,一定要学好数学。
计算1-100偶数累加和
这里的需求也比较简单,只是在之前的基础上,筛选出偶数而已,实现的方法也有很多种。
示例:使用for循环求偶数和
sum_num = 0
for i in range(2, 101, 2):
print(i, end=" ")
sum_num += i
print(f"n{sum_num}")
输出结果:
2 4 6 8 10 12 14 16 18 ...
2550
示例:使用while循环求偶数和
sum_num = 0
i = 2
while i < 101:
print(i, end=" ")
sum_num += i
i += 2
print(f"n{sum_num}")
输出结果:
2 4 6 8 10 12 14 16 18 ...
2550
示例:使用数学公式求偶数和。当重复次数太多的时候,还是要用数学公式优化,比如求1-1亿之间的偶数和。
# 1-100 偶数和
# 数学公式
sum_num = (2 + 100) * (100 // 2 // 2)
print(sum_num)
# for循环
sum_num = 0
for i in range(2, 101, 2):
sum_num += i
print(sum_num)
print("============")
# 1-100000000 偶数和
# 数学公式
sum_num = (2 + 100000000) * (100000000 // 2 // 2)
print(sum_num)
# for循环
sum_num = 0
for i in range(2, 100000001, 2):
sum_num += i
print(sum_num)
print("============")
输出结果:
2550
2550
============
2500000050000000
2500000050000000
============
break和continue
break和continue是循环中满⾜一定条件退出循环的两种不同⽅式。break用于跳出当前整个循环,continue用于跳过本次循环。也就是说,使用break,循环会结束,使用continue,循环没有结束,而是会跳到下一次循环。
比如:一共吃5个苹果,吃完第⼀个,吃第二个…,这⾥”吃苹果”的动作是不是重复执行?
-
如果吃的过程中,吃完第三个吃饱了了,则不不需要再吃第4个和第五个苹果,即是吃苹果的动作停止,这⾥就是break控制循环流程,即终⽌止此循环。
-
如果吃的过程中,吃到第三个吃出⼀个⼤⾍子…,是不是这个苹果就不吃了,开始吃第四个苹果,这⾥就是continue控制循环流程,即退出当前⼀次循环继而执行下一次循环代码。
情况1:break
i = 1
while i <= 5:
if i == 4:
print(f'吃饱了了不不吃了了')
break
print(f'吃了了第{i}个苹果')
i += 1
情况2:continue
i = 1
while i <= 5:
if i == 3:
print(f'⼤大⾍虫⼦子,第{i}个不不吃了了')
# 在continue之前⼀一定要修改计数器器,否则会陷⼊入死循环
i += 1
continue
print(f'吃了了第{i}个苹果')
i += 1
while循环嵌套
语法:
while 条件1:
条件1成⽴立执⾏行行的代码
......
while 条件2:
条件2成⽴立执⾏行行的代码
......
打印正⽅方形
需求,打印如下形状:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
分析:一⾏输出5个星号,重复打印5⾏。
示例:打印正方形
for i in range(5):
for j in range(5):
print("*", end="t")
print()
打印三角形
需求,打印如下图形:
*
* *
* * *
* * * *
* * * * *
示例:打印三角形
for i in range(5):
for j in range(i + 1):
print("*", end="t")
print()
打印九九乘法表
需要,打印如下内容:
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
九九乘法表,实际上也就是一个三角形,只要替换星号为乘法内容即可。
示例:打印九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j} * {i} = {i * j}", end="t")
print()
else分支
while-else语法:
while 条件:
条件成⽴立重复执⾏行行的代码
else:
循环正常结束之后要执⾏行行的代码
for-else语法:
for 临时变量量 in 序列列:
重复执⾏行行的代码
...
else:
循环正常结束之后要执⾏行行的代码
如果循环正常结束,会执行else语句,如果被break中断,则不会执行else语句。
示例:else的用法
# for-else用法
for i in range(3):
print(i, end=" ")
else:
print("nfor循环结束")
# while-else用法
i = 0
while i < 3:
print(i, end=" ")
i += 1
else:
print("nwhile循环结束")
原文始发于微信公众号(张大鹏520):Python基础语法05 循环
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/48660.html