(python冒泡排序小练习)

(python冒泡排序练习)

冒泡排序初战

首先,要先理解什么是冒泡函数(个人觉得这就相当于了解需求)。
冒泡排序是一种交换排序。
所谓交换排序就是,两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。
文字表述不太直观,那么我们用一个简易的流程图来整理一下思路:
冒泡排序示例图
那么,在直观的理解了冒泡排序后,我们可以从上得出冒泡排序流程:

假设有一个无序序列 { 1, 3, 5, 0 } ,从大到小排序

第一趟排序:通过两两比较,找到第一小的数值 0 ,将其放在序列的第最后位。
接下来只需要进行前3位数的排序,后面以此类推;
以上图为例,演示一下冒泡排序的实际流程:
第二趟排序:通过两两比较,找到第二小的数值 1 ,将其放在序列的倒数第二位。
第三趟排序:通过两两比较,找到第三小的数值 3 ,将其放在序列的倒数第三位。
至此,所有元素已经有序,排序结束
冒泡函数每次排序可确定一个数的位置,那么对n个数进行排序,其实只需要重复n-1次操作就可以了。

现在逻辑理清楚了,针对逻辑想到要用到 for 循环的嵌套 , 以及条件判断。那么冒泡排序的大体框架已经可以搭建出来了。
冒泡排序的代码
冒泡排序运行结果

新的要求

现在需要手动输入冒泡函数列表的数字,并且要对列表中的每个数字进行判定(如果不是整型,那么弹出错误提示):
(这算是需求变更吗??)
首先还是进行逻辑分析,要手动输入列表,ostrich首先想到的是input;对于判定类型首先想到的是if语句
但是,input()默认输入的都是字符串类型,怎么办呢?那么我们先用int()函数尝试一下吧:

list1 = [int(n) for n in input('请输入您想要的列表:').split(',')]
def maopao(list1):
    a = len(list1)
    for b in range(a - 1):
        for c in range(a - 1 - b):
            if list1[c] > list1[c + 1]:
                list1[c], list1[c + 1] = list1[c + 1], list1[c]
    return list1
print(maopao(list1))

list1 = [int(n) for n in input(‘请输入您想要的列表:’).split(’,’)]
这段代码实现了输入为列表的需求

之后的,类型判断需求,用if语句进行尝试:

list1 = [n for n in input('请输入您想要的列表:').split(' ')]
#     输入想要的列表,但print输入值默认为字符串  .split() 作用是拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
for i in range(len(list1)):     #     依次从list1列表中得到列表长度,从0开始取到列表长度数-1,并依次赋值给 i
    if list1[i].isdigit():
#    对list1 列表中的值进行判定,看它是否是数字。   .isdigit()  作用检测字符串是否只由数字组成
        list1[i] = int(list1[i])    #   条件为真,则将改数字类型转为整型
    else:
        exit('你的输入有误,{}不是整数'.format(list1[i]))
#  直接终止Python程序 : exit()的作用  (也可以用break终止循环)
def maopao(list1):              #    建立函数
    a = len(list1)             #    得到列表长度
    for b in range(a - 1):      #   决定循环次数
        for c in range(a - 1 - b):
#   提取c 值  作为索引对象,每次比较都会确定好一个数的位置,因此被确定的数字就不用了在进行比较了
            if list1[c] > list1[c + 1]:              #    进行冒泡条件判断
                list1[c], list1[c + 1] = list1[c + 1], list1[c]      #  条件成立,调换两者位置
    return list1        #    返回list1
print(maopao(list1))     #   打印

但是结果并不满足需求,负数被判定为非整数。
因此,想到使用 try-except 异常处理语句:

list1 = [n for n in input('请输入您想要的列表:').split(' ')]
for i in range(len(list1)):
    try:       #   try - except 用于引发异常,程序执行try部分,若try部分报错,则执行except部分
        list1[i] = int(list1[i])
    except:
        print('你的输入有误,不是整数')
        exit()
def maopao(list1):
    a = len(list1)
    for b in range(a - 1):
        for c in range(a - 1 - b):
            if list1[c] > list1[c + 1]:
                list1[c], list1[c + 1] = list1[c + 1], list1[c]
    return list1
print(maopao(list1))

终于算是完成了,Python学习的初战,心里还是有点小兴奋。
菜鸟新人,有什么不足还请大神们,多多指点。

猜你喜欢

转载自blog.csdn.net/an_ostrich/article/details/88025798