zoukankan      html  css  js  c++  java
  • python3练习100题——005

     继续做题~答案都会经过py3测试
    原题网址:http://www.runoob.com/python/python-exercise-example5.html

    题目:输入三个整数x,y,z,请把这三个数由小到大输出。

    我的代码:

    l=[]
    for i in range(3):
        x=int(input("please input a number:"))
        l.append(x)
    l.sort()
    print(l)

    思考:利用了可以对列表进行排序的sort函数,如果不能用呢?——在题目下面的答案中看到了冒泡排序法,而且应该考虑针对多个整数排序。当年学C语言的时候也有学过,感觉有点绕又忘啦~还是应该再学习下!以下代码来自原题下面的评论:

    1. 首先 定义一个对list中的int冒泡比对的函数:
      def Sort(list):
          n = len(list)
          for i in range(1, n):                         #i可以取的值是[1,n-1] 冒泡法比较的循环就是要少一次,最后最小那个不用比就出来了
              for j in range(1, n - i + 1):             #取1为下限,保证j-1位,最开始从0位开始比   取n-i+1为上限,保证j能够取到n-i位
                  if list[j - 1] > list[j]:             #从前到后的比较:最先确定最后的值
                      list[j - 1], list[j] = list[j], list[j - 1]
                  print(list)
          for i in range(0, n):
              print(list[i])

      要用到两个循环,第一个是规定比对到的位数,一次循环从最末尾确定一位最大值,第二个用来两两比对。 循环到上下限有点难确定。

    2. 定义一个读入函数:
      def inputData():
          list_first = []
          while True:
              a = input("please input num:".strip())     #strip()去除输入字符前后的空格
              if len(a) == 0:                            #空白时停止读入的循环
                  return list_first
              else:
                  list_first.append(int(a))
    3. 让函数直接被调用:
      if __name__ == '__main__':         
          lt = inputData()
          print("the list is:",lt)
          Sort(lt)

      用这个if语句,让这个py文件直接使用的时候,函数直接被调用;也可以作为模块中的函数被引入到别的py文件。

    分析很规范的答案~学到了冒泡排序算法的思想,也更加了解了写py文件的格式:比如如何定义函数,运行文件的时候直接调用

    关于冒泡排序法,根据上面的改写了一个由前向后确定由小到大数字的方式:

    def sort(list):
        n=len(list)
        for i in range(0,n-1):               #上下限差值n-1
            for j in range(i,n-1)[::-1]:   #第一次循环上下限差值n-1
                if list[j+1]<list[j]:
                    list[j+1],list[j] = list[j],list[j+1]
                print(list)
        for x in range(0,n):
            print(list[x])

    发现循环的上下标、比较的方向都不是最重要的,重要的是掌握思想:对于n个元素,比较n-1轮(第一个循环);第一轮比较n-1次,每轮-1,直到减少到1次(第二个循环)。

  • 相关阅读:
    fastjson的@JSONField注解
    Java 日期比较大小
    linux 查看文件显示行号
    Java double 加、减、乘、除
    Java 身份证判断性别获取年龄
    linux 查看端口被占用
    Unable to complete the scan for annotations for web application [/wrs] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies.
    nginx 返回数据不完整
    linux redis 启动 overcommit_memory
    IntelliJ IDEA 常用设置
  • 原文地址:https://www.cnblogs.com/drifter/p/9083197.html
Copyright © 2011-2022 走看看