算法+数据结构=程序
那么,当我们在某些特定的条件下应该用什么编程思路??
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)))
以上均为个人学习体会,如有错误,请指正。