1.遍历循环
for <循环变量> in <遍历结构>:
<语句块>
它的应用,计数循环,变量i可以使用,也可以不使用
for i in range(n):
<语句块>
字符串遍历循环:
for c in s:
<语句块>
列表遍历循环:
for item in ls:
<语句块>
还能对文件,字典,元祖等各种数据结构进行遍历循环。
2.无限循环
while <条件>:
<语句块>
s="python"
while s !="":
for c in s:
print(c,end="")
s=s[:-1]
while循环一次,输出当前字符串,并把字符串s截掉最后一个字符
3.循环扩展
for <循环变量> in <遍历结构>:
<语句块1>
else:
<语句块2>
while <条件>:
<语句块1>
else:
<语句块2>
含义:当循环没有被break语句退出时,执行else语句块,类似把else当作“正常”完成循环的奖励,设计它的目的在于可以让程序员判断,在循环中的break有没有起效果。
random库,是使用随机数的python标准库
基本随机数函数: seed() , random()
扩展随机数函数: randint(), getrandbits(), uniform(), randrange(), choice(), shuffle()
核心就一个random()产生随机数,其他7个都是为了使用方便,在此基础上扩展而来。
给定一个具体的随机数种子seed(),经过梅森旋转算法,计算机就能产生一系列的伪随机数。
只要种子相同,产生的随机序列,序列中无论是每一个元素的值,还是它出现的位置都相同。
random.seed(10)
如果不给seed指定值,它会使用系统时间作为种子,去产生随机序列。
这两种方式各有优缺点,给定种子,当程序再次运行时,产生的随机数也相同。
那么它能够复现,重现程序运行的过程。
如果不给种子,系统时间(精确到微秒)就很难再现,当程序再次运行时,就无法重现随机运行过程。
random.seed()
random()生成一个[0.0, 1.0]之间的随机小数
randint()并非直接把产生的随机小数直接乘以100,否则结果该为57
只要种子相同,产生的顺序和大小一样
种子的影响随时随地:
从0到29的数字里随机选择一个,只要种子一样,程序再次运行,选择的结果相同。
随机去撒点,只要撒点的数量足够多,撒点的总量就构成了正方形和圆形的面积。
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('圆周率为:',pi)
print('消耗时间为:{:.5f}秒'.format(perf_counter()-start))
x,y去模拟撒点的坐标,然后通过dist计算点到圆心的距离,小于1.0说明落在圆内,hits+1
整个过程并没有用到任何公式,意义在于很多问题并没有一个公式,那就可以使用蒙特卡罗方法近似计算。