random库是使用随机数的Python 标准库
伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素
random库主要用生成伪随机数
random库包含两类函数,常用的包含8个
基本随机函数:seed(),random()
拓展随机函数:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()
1.种子只给一次,随着random的调用会产生随机数
2.不给种子,默认的种子是当前第一次调用random函数的系统时间
给出种子的意义,在于可以复现程序的运行过程,种子确定随机数就是确定的
拓展随机数函数:
圆周率计算问题分析:蒙特卡罗方法
为了使代码形式易看,加上 \ 可以将原本一行的代码分成多行。
#yuanzhoulvwn.py
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,圆心在(0,0)
#yuanzhoulvwn.py
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()#利用random生成随机坐标(x,y)
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:
for i in range(0,3,1):
name=input()
password=input()
if name=="Kate"and password=="666666":
print("登录成功!")
break
else:
while i==2:
print("3次用户名或者密码均有误!退出程序。")
break
代码2:
count=0
while count <3:
name=input()
password=input()
if name=="Kate"and password=="666666":
print("登录成功!")
break
else:
count+=1
if count==3:
print("3次用户名或者密码均有误!退出程序。")
三位水仙花数:
t=""
for i in range (100,1000):
s=str(i)
if i==pow(eval(s[0]),3)+pow(eval(s[1]),3)+pow(eval(s[2]),3):
t+="{},".format(i)
print(t[:-1])
四位玫瑰数:与三位水仙花数大同小异
for i in range(1000,10000):
t=str(i)
if i==pow(eval(t[0]),4)+pow(eval(t[1]),4)+pow(eval(t[2]),4)+pow(eval(t[3]),4):
print(i)
100之内素数之和:定义函数的使用,首先判断是否是素数
def is_sushu(n):
for i in range(2,n):
if n%i==0:
return False
return True
sum=0
for i in range(2,100):
if is_sushu(i):
sum+=i
print(sum)