python笔记1(杨辉三角、质数问题)
1、math的一些常用函数
print(round(2.5)) #round()是四舍六入,五取偶;不是math下面的函数 print(round(1.2)) import math print(math.floor(2.5)) #向下取整 print(math.ceil(2.5)) #向上取整 print(math.sqrt(3)) #开平方 print(math.pi) #pai print(math.e) #自然常数
2、杨辉三角
lst=[] n=6 for i in range(n): row=[1] lst.append(row) if i==0: continue for j in range(i-1): row.append(lst[i-1][j]+lst[i-1][j+1]) else: row.append(1) print(lst)
结果:
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
#改进 n=6 p=[] for i in range(n): #每一个行遍历 row=[1] #每行开头都给一个1 for k in range(i): #每一行尾部给1 row.append(1) if k==i-1 else row.append(0) #改进:可以直接给每一行的元素全部赋值为1 p.append(row) #,后面再对中间的数进行重新赋值 if i==0: #对于第一行特殊对待,不进行下面的赋值运算 continue for j in range(1,i//2+1): #对每一行的一半元素进行处理直到中间的元素 val=p[i-1][j-1]+p[i-1][j]#每次以上一行的元素进行相加 row[j]=val #每一个元素加入到row中 if j!=i-j: #这是对奇数个数的中间点跳过 row[-j-1]=val #利用列表的倒序来对称赋值 print(p) #如p[-1]为列表p的倒数第一个
结果:
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
打印杨辉三角第n行第m个数:
#改进 a=6 lst=[] k=5 for i in range(a): row=[1]*(i+1) lst.append(row) if i==0: continue for j in range(1,i//2+1): val=lst[i-1][j-1]+lst[i-1][j] row[j]=val if j!=i-j: row[-j-1]=val print(lst[a-1][k-1]) #打印第a行,第k列
### 改进:根据杨辉三角定理:第n行的m个数可以表示为C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数C(n,r)=n!/(r!(n-r)!)
n=10 k=5 n,r=n-1,k-1 d=n-r lst=[] #用来装n,r,d temp=1 for i in range(1,n+1): temp*=i if i==r: #利用一个循环把阶乘过程中所要截取的阶乘用if语句截断下来 lst.append(temp) #最先加进去的是最小的,所以与if的先后无关 if i==d: lst.append(temp) #即[0][1],[2]分别是d,r以及n if i==n: lst.append(temp) #三个条件不要写在一起了,因为逻辑不允许,如果有两两相等就会出错 print(lst[2]//(lst[1]*lst[0]))
3、求10万以内的质数方法时间效率的比较
#改进
import math n=100000 p=[] count=0 flag=True start=datetime.datetime.now() for x in range(2,n): for i in p: count+=1 if x%i==0: flag=False break if i>=math.ceil(x**0.5): flag=True break if flag: p.append(x) delta=(datetime.datetime.now()-start).total_seconds() print(len(p)) print(count) print(delta)
结果:
9592 754026 0.447888
import math import datetime n=100000 p=[] count=0 start=datetime.datetime.now() for x in range(2,n): for i in p: count+=1 if(x%i)==0: break else: p.append(x) delta=(datetime.datetime.now()-start).total_seconds() print(len(p)) print(count) print(delta)
结果:
9592 46314476 9.33169