【问题标题】:I have to sort numbers using only the min() and the max() functions我必须只使用 min() 和 max() 函数对数字进行排序
【发布时间】:2016-03-19 05:16:22
【问题描述】:

我有一些作业要交,我需要仅使用 min() 和 max() 函数对数字进行排序,并使用它来查找中间数字。我有一组 4 个整数。如何在不使用其他方法的情况下使用此代码并使用它来查找中间数字。

first_integer = input("Please enter the first integer: ")
second_integer = input("Please enter the second integer: ")
third_integer = input("Please enter the third integer: ")
fourth_integer = input("Please enter the fourth integer: ")

integer1 = int(first_integer)
integer2 = int(second_integer)
integer3 = int(third_integer)
integer4 = int(fourth_integer)

integers = (integer1, integer2, integer3, integer4)

min_number = min (integers)
max_number = max (integers)
mid_number_max = min (max(integers),max(integers),max(integers))
mid_number_low = max (min(integers),min(integers),min(integers))

当我尝试使用数字 1、2、3、4 执行此操作时 我明白了

1 1 4 4

我怎样才能得到

1 2 3 4

提示我必须删除最低和最高的数字,然后找到其余数字的最小值和最大值。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    我明白了。

    看了别人给我的例子后,我就明白了。

    first_integer = input("Please enter the first integer: ")
    second_integer = input("Please enter the second integer: ")
    third_integer = input("Please enter the third integer: ")
    fourth_integer = input("Please enter the fourth integer: ")
    
    integer1 = int(first_integer)
    integer2 = int(second_integer)
    integer3 = int(third_integer)
    integer4 = int(fourth_integer)
    
    
    min_number = min(integer1, integer2, integer3, integer4)
    max_number = max(integer1, integer2, integer3, integer4)
    mid_number_min = min(max(integer1, integer2), max(integer2, integer3),
                         max(integer3, integer4), max(integer1, integer3),
                         max(integer1, integer4), max(integer2, integer4))
    mid_number_max = max(min(integer1, integer2), min(integer2, integer3),
                         min(integer3, integer4), min(integer1, integer3),
                         min(integer1, integer4), min(integer2, integer4))
    
    print (min_number, mid_number_min, mid_number_max, max_number)
    

    结果:

    1 2 3 4
    

    感谢任何试图帮助我的人。

    编辑:感谢@AChampion 指出我错过了一个组合 (1,4)。

    【讨论】:

    • 我相信您仍然缺少一种组合(1 和 4)...尝试 3、1、2、4 -> 1、2、2、4
    【解决方案2】:

    不知道您希望如何从元组中仅使用 min max 获取中间数。您需要检查每个整数组合:

    >>> import itertools as it
    >>> integers = 4, 3, 2, 1
    >>> (min(integers),
    ... min(*(max(a, b) for a, b in it.combinations(integers, 2)))
    ... max(*(min(a, b) for a, b in it.combinations(integers, 2)))
    ... max(integers)
    (1, 2, 3, 4)
    

    【讨论】:

      【解决方案3】:

      如果您使用list 而不是tuple,您可以这样做:

      integers = [integer1, integer2, integer3, integer4]
      
      min_number = min(integers)
      max_number = max(integers)
      # Now remove the already found numbers
      integers.remove(min_number)
      integers.remove(max_number)
      mid_number_max = max(integers)
      mid_number_min = min(integers)
      

      【讨论】:

        【解决方案4】:

        要找出max_numbermid_number_max,我们首先找出左边3个元素的最大值(max_left)和右边3个元素的最大值(max_right)。然后比较max_leftmax_right。如果它们不相等,则表示其中一个是max_number,另一个是mid_number_max。如果它们相等,则表示max_number 位于integers[1]integers[2]。所以mid_number_max 的值应该是min(integers[1], integers[2])max(integers[0], integers[3])。因此,只需选择较大的mid_number_max。同样的思路找出min_numbermid_number_low

        integers = (3, 1, 2, 4)
        
        max_left = max(integers[0], integers[1], integers[2])
        max_right = max(integers[1], integers[2], integers[3])
        min_left = min(integers[0], integers[1], integers[2])
        min_right = min(integers[1], integers[2], integers[3])
        
        if (max_left != max_right):
            max_number = max(max_left, max_right)
            mid_number_max = min(max_left, max_right)
        else:
            max_number = max_left
            mid_number_max = max (min(integers[1], integers[2]), max(integers[0], integers[3]))
        
        if (min_left != min_right):
            min_number = min(min_left, min_right)
            mid_number_low = max(min_left, min_right)
        else:
            min_number = min_left
            mid_number_low = min (max(integers[1], integers[2]), min(integers[0], integers[3]))
        
        print (min_number)
        print (mid_number_low)
        print (mid_number_max)
        print (max_number)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-09
          • 2022-01-17
          • 1970-01-01
          • 1970-01-01
          • 2017-08-06
          • 1970-01-01
          • 1970-01-01
          • 2010-12-10
          相关资源
          最近更新 更多