Python循环结构

举报
周棋洛 发表于 2022/05/25 23:30:14 2022/05/25
【摘要】 程序的循环结构 学习自中国大学 文章目录 程序的循环结构1,遍历循环2,无限循环3,循环控制保留字4,循环的高级用法5,random库的使用6,圆周率的计算 1,遍历循环 遍...

程序的循环结构

学习自中国大学

在这里插入图片描述


1,遍历循环

遍历某个结构形成的循环运行方式

格式:

for <循环变量> in <遍历结构> : 
	<语句块>
	
#	从遍历结构中逐一提取元素,放在循环变量中
#	由保留字for和in组成,完整遍历所有元素后结束
#	每次循环,所获得元素放入循环变量,并执行一次语句块

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

应用:

计数循环(n次)

代码格式:

for i in range(N) : 
	<语句块>

  
 
  • 1
  • 2

遍历由range()函数产生的数字序列,产生循环

实例:
想了一个倒计时的实现,代码如下:

import time		#引入time库,好调用sleep函数,实现倒计时的效果
for i in range(5):		#本节所学的循环,循环5次
    print("\r{}".format(4-i),end='')		#通过4-i来实现数字的反转,同时\r模拟单行刷新效果
    time.sleep(0.6)		#睡觉函数,让它每隔0.6S打印下一个,完成

  
 
  • 1
  • 2
  • 3
  • 4

计数循环(特定次)

简单说就是 range 函数的使用方法结合版
具体两个栗子,清晰明了。

1.range(a,b) 可以实现a到b-1的遍历,实现b-a次循环,使循环变量得以扩充

for i in range(2,5):
    print(i)

  
 
  • 1
  • 2

结果:
在这里插入图片描述

2.range(a,b,c)意思是从a开始到b-1,每隔c个数有效,所以下面代码结果是1,3,5

for i in range(1,6,2):
    print(i)

  
 
  • 1
  • 2

结果:
在这里插入图片描述


字符串遍历循环

for c in s : 
	<语句块>

  
 
  • 1
  • 2
  • s是字符串,遍历字符串每个字符,产生循环
for i in "xiaozhang":
    print(i,end=" ")

  
 
  • 1
  • 2

在这里插入图片描述


列表遍历循环

for item in ls : 
	<语句块>

  
 
  • 1
  • 2
  • ls是一个列表,遍历其每个元素,产生循环
for item in ["xiaozhang", "and", "xiaoliu"]:
    print(item,end=" ")

  
 
  • 1
  • 2

在这里插入图片描述


文件遍历循环

for line in fi : 
	<语句块>

  
 
  • 1
  • 2
  • fi是一个文件标识符,遍历其每行,产生循环
for line in fi :
	print(line)

  
 
  • 1
  • 2

在这里插入图片描述
shuai qi xiao liu


2,无限循环

由条件控制的循环运行方式

while <条件> : 
	<语句块>

  
 
  • 1
  • 2
  • 反复执行语句块,直到条件不满足时结束
a = 3
while a > 0 :
    a-=1
    print(a)

  
 
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
但如果我们更改循环语句为a=a+1,此时a将一直大于0,代码将一直跑,若无外力,累死断电死机。。。。。。在这里插入图片描述


3,循环控制保留字

break 和 continue

  • break跳出并结束当前整个循环,执行循环后的语句(结束当次,-break仅跳出当前最内层循环
  • continue结束当次循环,继续执行后续次数循环(结束当前
  • break和continue可以与for和while循环搭配使用

实例1continue:

for i in range(5):
    if i==3:
        continue
    print(i)
print("看我看我")



  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

从结果也可以发现使用了continue关键字使得 i 等于3时跳出那一次循环,3没有输出,而程序依旧在跑,所以4输出了。然后执行完循环输出看我看我。

实例2break:

for i in range(5):
    if i==3:
        break
    print(i)
print("看我看我")

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

从结果输出了0,1,2程序结束了,可以看出来break使得跳出了这个循环,继续执行循环外的语句

是不是很清晰了

在这里插入图片描述


4,循环的高级用法

  • 当循环没有被break语句退出时,执行else语句块
  • else语句块作为"正常"完成循环的奖励
  • 这里else的用法与异常处理中else用法相似

5,random库的使用

random库是使用随机数的Python标准库

  • 伪随机数: 采用梅森旋转算法生成的(伪)随机序列中元素
  • random库主要用于生成随机数
  • 使用random库: import random

random库包括两类函数,常用共8个

  • 基本随机数函数: seed(), random()
  • 扩展随机数函数: randint(), getrandbits(), uniform(),
    randrange(), choice(), shuffle()

基本随机数函数

随机数种子通过梅森旋转算法生成确定的随机序列,说随机,在计算机中真正的随机数是不存在的,要不然我可能会睡不着觉。啊啊啊,事已至此,先睡一觉。。。。。。。
在这里插入图片描述


在这里插入图片描述
这里说一下,使用随机数种子,可以使得随机数复现。自己找准需求,合理使用即可。


扩展随机数函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


6,圆周率的计算

两种方法:

  1. 公式
  2. 蒙特卡罗方法

公式法(计算机最适合做循环,这要交给人,不敢想)

pi = 0
N = 100
for k in range(N):
    pi += 1/pow(16,k)*( \			#一行写不下或是什么可以用反斜杠然后换行写
              4/(8*k+1) - 2/(8*k+4) - \
              1/(8*k+5) - 1/(8*k+6) ) 
print("圆周率值是: {}".format(pi))

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
Python的浮点数16位


蒙特卡罗方法

撒沙子模拟掉落在四分之一扇形部分的数量,然后算出4份,当模拟数量很大,结果可能更准确,理论来说。这在工程问题应用广泛。模拟的精度肯定没有公式准确,可有些问题不会公式可以解决的。下面我们用代码实现

在这里插入图片描述

from random import random
from time import perf_counter
DARTS = 1000*1000
hits = 0.0
start = perf_counter()
for i in range(1, DARTS+1):
    x, y = random(), random()
    dist = pow(x ** 2 + y ** 2, 0.5)
    if dist <= 1.0:
        hits = hits + 1
pi = 4 * (hits/DARTS)
print("圆周率值是: {}".format(pi))
print("运行时间是: {:.5f}s".format(perf_counter() - start))

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述
我一共测试了4次,数量级分别为100万,500万,800万和1000万。从代码的运行时间就可以看出。计算机模拟执行1000万次只用了5秒多,是人无法触及的,而且我的处理器中等。可想计算机的强大。

再说这四次模拟的最终结果,因为数量级是依次增大,我们可能觉得会越来越精确,可实际上并不如此,通过数据可以发现第二次数量级为500万最接近,值得我们深思。


在这里插入图片描述


溜了溜了 Bye


文章来源: blog.csdn.net,作者:周棋洛ყ ᥱ ᥉,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/m0_53321320/article/details/118281733

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。