一.打印99乘法表
#打印99乘法表
for i in range(1,10): #[1,9]
for j in range(1,i+1): #通過對(duì)角線分析可以知道,i>=j ,所以范圍是[1,i]
# 控制輸出格式,向左對(duì)齊,如果j=1 ,寬度為2,否則寬度為3
print('{}*{}={:<{}}'.format(j,i,j*i,2 if j == 1 else 3), end="")
print()
99乘法表.png
打印方向99乘法表
#方法一
for i in range(1,10): # [1,9]
for j in range(1,10):
if j >= i: # [i,10] ,打印乘法表
print("{}*{}={:<{}}".format(i,j,i+j,3 if j < 5 else 4), end="")
else : #如果i > j 補(bǔ)空格,[1,i)
print("{} {} {:<{}}".format(" "," "," ",3 if j < 5 else 4), end="")
print()
反99乘法表.png
#方法二
for i in range(1,10):#[1,9]
s = "" # 定義一個(gè)空字符串
for j in range(i,10): #[i,10]
#將輸出拼接為一行的字符串
s += '{}*{}={:<{}}'.format(i,j,i+j,3 if j < 5 else 4)
#講整行字符串右對(duì)齊,寬度是75
print("{:>75}".format(s))
反99乘法表.png
二.打印菱形
#打印菱形
#方法一
n = 7
for x in range(-(n//2),n//2+1):#[-3,3]
if x < 0:
y = -x
else:
y = x
print(y*' '+(n-2*y)*'*')
菱形.png
#打印菱形
#方法二,坐標(biāo)建模,菱形的范圍就在|x|+|y|< n//2+1
n = 7
for x in range(n//2,-(n//2+1),-1): #[3,-3]
print(abs(x)*' ',end='')
for y in range(-(n//2),(n//2)+1):#[-3,3]
if abs(x)+abs(y)<(n//2+1):
print('*',end='')
print()
菱形.png
#打印對(duì)頂三角形
n = 7
for x in range(-(n//2),n//2+1):
y = -x if x <= 0 else x #三元表達(dá)式
print((n//2-y)*' '+(2*y+1)*'*')
對(duì)頂三角形.png
#打印閃電
n = 7
for x in range(-(n//2),n//2+1):
if x == 0:
print(n*'*')
elif x < 0:
print(-x*' '+(n//2+1+x)*'*')
else:
print(n//2*' '+(n//2+1-x)*'*')
閃電.png
三. 斐波那契數(shù)列
斐波那契數(shù)列F(0) = 0 , F(1) = 1, n > 1, F(n) = F(n-1) + F(n-2)
#打印100以內(nèi)的斐波那契數(shù)列
#第0項(xiàng)
a = 0
#第1項(xiàng)
b = 1
print(0 ,1,end=' ')
while True:
c = a + b
a,b = b,c
if c > 100:
break
print(c , end=' ')
100以內(nèi)fib數(shù).png
#求斐波那契數(shù)列第101項(xiàng)
a = 0
b = 1
for i in range(2,102): #[2,101]
c = a + b
a,b = b,c
print(c)
fib第101項(xiàng).png
四.求10萬內(nèi)的所有素?cái)?shù)
假設(shè)a>=b
m = a*b >= b^2
a >= m **0.5
b <= m **0.5
因?yàn)槿绻粋€(gè)數(shù)不是素?cái)?shù)是合數(shù), 那么一定可以由兩個(gè)自然數(shù)相乘得到,合數(shù)m 一定有小于或者等于m的平方根的因數(shù),所以只要驗(yàn)證素?cái)?shù)的除數(shù)的范圍只需其平方根。
第一種方法:
import time
start = time.clock()
number = 100000
count = 1
print(2,end=' ')
#除了2以外,所有素?cái)?shù)都是奇數(shù)
for num in range(3,24,2):
flag = True
for i in range(2,int(num**0.5)+ 1):
m = num % i
if m == 0 :
flag = False
break
else:
flag = True
if flag:
count += 1
print(num, end=' ')
for num in range(25,number,2):
##大于6的質(zhì)數(shù)除以6,余數(shù)都是1或者5
if num % 6 != 1 and num % 6 != 5:
continue
else :
flag = False
for i in range(5,int(num**0.5 + 1),6):
if ( not num % i ) or ( not num % (i+2) ):
flag = False
break
else:
flag = True
if flag :
print(num, end= ' ')
count += 1
print()
print(count)
end = time.clock()
time = end - start
print(time)
第二種方法
import time
start = time.clock()
count = 2
print(2, end=' ')
print(3, end=' ')
number = 100000
for num in range(5,number,2):
#大于6的質(zhì)數(shù)除以6,余數(shù)都是1或者5
if num % 6 != 1 and num % 6 != 5:
continue
else :
flag = False
if num < 30 :
for i in range(3,num,2):
if not ( num % i ):
flag = False
break
else:
flag = True
else:
for i in range(5,int(num**0.5 + 1),6):
if ( not num % i ) or ( not num % (i+2) ):
flag = False
break
else:
flag = True
if flag :
print(num, end= ' ')
count += 1
print()
print(count)
end = time.clock()
time = end - start
print(time)
#打印10萬以內(nèi)的素?cái)?shù)
#第三種方法
n = 100000
#除了2 以外的素?cái)?shù),都是奇數(shù)
count=1
print(2,end=' ')
for i in range(3,n,2):
flag = False
if i > 10 and i % 5 == 0 :
continue
for j in range(3,int(i**0.5)+1,2):
if i % j == 0:
break
else:
print(i,end=' ')
count += 1
print()
print(count)
總共9592個(gè),最后一項(xiàng)是99991