python中一些算法数列

斐波那契数列:

 1 def fn(n):
 2     if n==1:
 3         return 1
 4     elif n==2:
 5         return 1
 6     else:
 7         return fn(n-1)+fn(n-2)
 8 
 9 for i in range(1,10):
10     print(fn(i))

 python实现输出黑白棋盘:

1 for i in range(1,11):
2     for j in range(1,11):
3         if (i+j)%2==0:
4             print('',end='')
5         else:
6             print('', end='')
7     print('
')

输出由1,2,3,4 这四个数字组成的每位数都不相同的 所有三位数

1 list1 = [1,2,3,4]
2 
3 for i in list1:
4     for k in list1:
5         for j in list1:
6             if i != k and k != j and i != j:
7                 print(i*100+k*10+j)

 python 实现冒泡排序

 1 import random
 2 
 3 def bubbleSort(lis):
 4     length = len(lis)
 5     for i in range(0,length):        #下标为0,1,2,3,4,5     
 6         for j in range(i+1,length):  #下标为1,2,3,4,5,6
 7             if lis[i] > lis[j]:    #相邻的两位数进行比较
 8                 lis[j],lis[i] = lis[i],lis[j]      #进行数据交换
 9 
10 lis = [random.randint(1,100) for i in range(20)]  #随机生成长度为20的 列表
11 bubbleSort(lis)

 python 实现二分法查找

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

你观察这个列表,这是不是一个从小到大排序的 有序 列表呀?

如果这样,假如我要找的数比列表中间的数还大,是不是我直接在列表的后半边找就行了?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
def find2(l, num, start=0, end=None):
    end = end if end else len(l) - 1        #程序执行开始先找列表中间值的下标
    mid = (end-start)//2 + start        #计算列表中间值得下标
    if start > end:               #如果满足这个条件,则说明查找一遍无法找到匹配的结果
        print('找不到')
    elif l[mid] > num:             #如果被查找的数没有中间的数字大,则递归调用自身从列表的左边开始比较,注意end的值
        find2(l, num, end=mid)    
    elif l[mid] < num:             #如果被查找的数比中间的数字大,则递归调用自身从列表的右边开始查找,开始位置是中间值下标+1,末尾下标还是末尾的下标
        find2(l, num, start=mid+1, end=end)
    else:                     #条件都不符合  则说明已找到 该值得下标  
        print('找到啦', mid)

find2(l,88) #比如找88的下标

请证明 一个偶数是两个素数的和

def su(n):
    for i in range(2,n//2+1):
        if n%i == 0:
            return False
    else:
        return True

if __name__ == '__main__':
    while True:
        n =int(input('please input a num'))
        if n%2 == 0:
            break

    for i in range(2,n//2+1):
        if su(i) and su(n-i):
            print(i,'+',n-i,'=',n)
原文地址:https://www.cnblogs.com/lvye001/p/9898274.html