Python基础语法05 循环

循环的作用

循环主要是用来执行重复代码的。比如,我们要打印一行星号,可以执行以下代码:

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(1101):
    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(21012):
    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(21012):
    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(21000000012):
    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(110):
    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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!