python学习--几种简单算法(冒泡,插入,斐波纳契数列,阿姆斯特朗数,阶乘)

 

一、斐波纳契数列

 

'''
for 循环
斐波纳契数列
'''

num1 = 0
num2 = 1
num_input = input('输入斐波纳契数列个数:')
if not num_input.isdigit():                  # 判断是否为数字
    print('输入数字')
else:
    if int(num_input) >0:                    # 判定数字 > 0
        for i in range(int(num_input)):    # 遍历斐波纳契数列个数
            print(num2,end=' ')               # 打印 斐波纳契数列
            num1,num2=num2,num1+num2     # 规律计算
    else:
        print('数字要求大于0')   
print('python---------------------------')
'''
while 循环
斐波纳契数列
'''

#获得需要得到的斐波那契数列的个数
num0,num1=0,1
item=input('请输入你要得到的斐波那契数列的个数')
if not  item.isdigit(): #不是数字
    print("请输入数字")
else:#是数字
    itemNum=int(item) #转换为int类型
    #判断数字是否合格
    if itemNum>0:
        if itemNum==1:
            print(num1)
        else :
            #定义变量控制循环次数(while)
            co=0
            while True:
                print(num1,end=' ')
                res=num0+num1#获得第二个数字
                num0,num1=num1,res
                co+=1
                if co>=itemNum:
                    break

    else:
        print("请输入一个正整数")

 

 

 

二、阿姆斯特朗数

 

'''
阿姆斯特朗数
判断

for 循环

列表推导式
'''
# # 输入范围
# input_min = int(input('输入最小值:'))
# input_max = int(input('输入最大值:'))

# # 循环范围内所有数字
# for i in range(input_min,input_max+1):
#     # print(i)
#     n = len(str(i))                                 # 数字位数
#     info = [i//10**j%10 for j in range(n-1,-1,-1)]  # 拆分数字
#     # print(info)
#     num =0                                         # 初始 和
#     temp = i                                        # 数字对照
#     for s in range(n):              # 循环数字位数
#         # print(s)
#         num += info[s] **n         # 计算单位幂 和
#     if num == temp:                # 判断 和 与原始数字
#         print(num,end= ' ')
# print() 

# print('='*25)

'''
阿姆斯特朗数
判断
while 循环

'''
num_min = int(input('输入最小值:'))
num_max = int(input('输入最大值:'))

for n in range(num_min,num_max +1): # 循环所有范围内数字
    n_len = len(str(n))
    sum_A = 0
    num1 = n
   # print(num1)                        # 数字对照组
    while n > 0:
        s = n%10
        sum_A += s**n_len
        n//=10
    if sum_A == num1:
        print(num1,end = ' ')
    pass

#综合应用
print('---------------------------------------------')
number=1634
numlist=[number//10**i%10 for i in range(len(str(number))-1,-1,-1) ]
result=0#累加和值
for i in range(len(str(number))):
    res=numlist[i]
    result+=res**len(str(number))
if result==number:
    print(number,'是水仙花数')
else:
    print('不是水仙花数')

 

 

三、插入排序

 

'''
插入排序
'''
# 步骤1:导入随机模块
import random 
# 步骤2:创建一个空列表,用于存放待排序随机数据集
data = [random.randint(0, 100) for i in range(10)]
print('待排序的随机数列: {0}'.format(data))
# 步骤3:获取列表数据集中随机数的个数
length = len(data)
# 步骤4:嵌套for循环实现插入排序
# 外层循环控制排序次数
print("---------------------------------------------")
for i in range(1, length):
    print(i)
    # 将当前的数字备份
    x = data[i]
    # 内层循环进行
    for j in range(i,-1,-1):
        print('正在排序的有序序列: {0}'.format(data))
        # j为当前位置,试探j-1位置
        if x < data[j-1]:
            # 换值
            data[j] = data[j-1]
        else:
            break # 确定j位置
    print('------------------------一次插序结束-------------------------------')
    data[j] = x
    
print("++++++++++++++++++++++++++++++++++++++++++")
# 步骤5:输出排序后的结果
print('排序后的有序序列: {0}'.format(data))


 

 

四、冒泡排序

'''
冒泡排序
从小到大
'''
random1 = [1,8,11,2,33,12,5,23]
for i  in range(len(random1)-1):
    for j in range(len(random1)-i-1):
        if random1[j] < random1[j+1]:
            random1[j],random1[j+1]

 

 

五、阶乘

'''
n!=1*2*3.....*n
阶乘的两种实现
'''
#控制台输入数字 获得数字阶乘结果
# 使用while 循环实现
#1.获取控制台输入内容
info=input("请输入你要计算的阶乘的数: ")
if info.isdigit():
    num=int(info)
    #定义一个阶乘结果变量
    res=1
    while True:
        res=res*num
        num-=1
        if num<=0:
            break
    print('{0}!={1}'.format(info,res))

# 使用for 循环实现
if info.isdigit():#判断是否是数字
    num=int(info)
    #定义一个阶乘结果变量
    res=1
    for i in range(1,num+1):
         res=res*i
    print('{0}!={1}'.format(num,res))

 

posted @ 2018-08-28 20:21  差不多努力python之路  阅读(559)  评论(0编辑  收藏  举报