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