基础编程思想

算法+数据结构=程序 

那么,当我们在某些特定的条件下应该用什么编程思路??

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)))

 

以上均为个人学习体会,如有错误,请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值