1. 程式人生 > >基礎程式設計思想

基礎程式設計思想

演算法+資料結構=程式 

那麼,當我們在某些特定的條件下應該用什麼程式設計思路??

1、折半:當我們需要去判斷一個數需要去對應哪個區間的時候,且能找到中間區域

#輸入一個數字,判斷它屬於哪個數字區間

n=int(input('>>>'))
if n > 100:
    pass if n > 1000 else pass
else:
    pass if n >10 else pass

2、輸入次數限定時:for 迴圈指定迴圈次數

for _ in range(n): #n為指定輸入次數
    a=input('>>>')

3、輸入次數不限定時:while迴圈不限定次數,只需要指定條件或者break條件

while True:
    a = input('>>>')
    if a == '':
        break    #輸入完結條件為:輸入為空
pass

4、分支語句判定大小順序:先指定第一位數,再去對比餘下的數

a=[]
for i in range(3):
    a.append(int(input('>>>')))

if a[0]>a[1] and a[0]>a[2]:
    out=[0,1,2] if a[1]>a[2] else out=[0,2,1]
if a[1]>a[0] and a[1]>a[2]:
    out=[1,0,2] if a[0]>a[2] else out=[1,2,0]
if a[2]>a[0] and a[2]>a[1]:
    out=[2,0,1] if a[0]>a[1] else out=[2,1,0]
for i in out:
    print(a[i],end=',')

5、優化print列印時,使用format函式的對齊:下面為列印右上部分九九乘法表

for i in range(1,10):
    for j in range(1,10):
        print('{0}*{1}={2:<{3}}'.format(j, i, i*j, 2 if j<4 else 3),end='') if i <= j else print(' '*(6 if j<4 else 7), end ='')
    print()

6、標記

a=0 #100以內的斐波那契數列
b=1
f=False
print(1,end=' ')
while a+b<=100:
    if not f:
        print(a+b,end=' ')
        a=a+b         
        f=True
    else:
        print(a+b,end=' ')
        b=a+b
        f=False

7、迭代

#斐波那契數列
a=1
b=1
print(0,1,end=' ')
while 1:
    c=a+b
    b=a
    a=c
    print(b,end=' ')
    if c>100:
        break

8、列印圖形時,如果圖形對稱

#列印菱形
num = int(input('>>>'))
num2 = num//2
for i in range(-num2,num2+1):
    x= -i if i < 0 else i
    print(' '*x+'*'*(num-2*x))

9、列印圖形時,如果能代入座標系:方程式的交集

#列印行數為7的菱形
for x in range(-3,4):
    for y in range(-3,4):
        if y<=0:
            if y>=abs(x)-3:         #方程y<=0  與y=abs(x)-3相交
                print('*',end='')
            else:
                print(' ',end='')
        else:
            if y<=3-abs(x):        #方程y>0  與y=3-abs(x)相交
                print('*',end='')
            else:
                print(' ',end='')                
    print()

10、空間複雜度優化:單列表列印楊輝三角。

#楊輝三角
n=5
a=[1]*n
for i in range(n):  #n=[0,n]
    offect = -(n-i)
    z=1
    for j in range(1,(i//2)+1):
        tmp = z+a[j]
        z=a[j]
        a[j]=tmp
        if i != 2j:  
            a[offect-j]=tmp
    print(a[:i+1])

11、時間複雜度優化:(使用已計算出的素數,用空間換時間)

#10W以內的素數
n=100000
primenumber = [2,3]
a=5
step=2
while a<=n:
    temp=a**0.5
    for i in primenumber:
        if a % i == 0 :
            break
        if i>temp:
            primenumber.append(a)
            break
    a += step
    step=  4  if step==2 else 2
print(len(primenumber))

12、新建一列表,使用index作為數字,列表中填充0做為這個數字出現的次數

import random
a=[]

for _ in range(10):
    a.append(random.randint(1,20))
print(a)

b=[0]*21
for i in a:
    b[i]=b[i]+1

echolist=[]
singlelist=[]
for j in range(len(b)):
    if b[j] == 1:
        singlelist.append(j)
    elif b[j] > 1:
        echolist.append(j)
print('{1} single number:{0}'.format(singlelist,len(singlelist)))
print('{1} echo number:{0}'.format(echolist,len(echolist)))

 

以上均為個人學習體會,如有錯誤,請指正。