【问题标题】:Function to find the max of 3 numbers in Python在 Python 中查找最大 3 个数字的函数
【发布时间】:2017-04-12 09:50:10
【问题描述】:

我正在尝试编写一个函数,它接受输入并将它们放入一个列表中,然后对列表进行排序,并找到最大的数字。我不断收到错误,我不确定出了什么问题。我将发布我已经输入的当前代码。任何帮助或建议将不胜感激,谢谢。

代码:

def findMax3():
    y = list(lst)
    y.sort(lst)
    y[0] == y[-1]

lst = int(input())
print(findMax3())

【问题讨论】:

  • 您需要传入lstlst 在函数中不存在。还有,未来极日是什么错误。
  • findMax3 不返回任何内容。你会得到的只是None
  • 正如@Carcigenicate 所说,您需要将列表参数传递给您的函数,但还需要从中返回一些内容(可能是排序列表?只是最大值?由您决定......)。当应该给出列表时,您还将用户输入转换为整数。
  • y[0] == y[-1] 什么都不做。
  • 如果您只需要找到max,则无需对列表进行排序 - 只需return max(lst)

标签: python list function


【解决方案1】:

如果我们不想使用内置函数来解决问题,我们总是可以遵循以下简单的方法。

使用 ma​​x() 求最大数已在上述几个解决方案中展示。

在不使用 ma​​x()

的情况下发布示例解决方案
num1=51
num2=6
num3=72

def find_max(num1,num2,num3):
    if (num1 > num2) and (num1 > num3):
        largest = num1
    elif (num2 > num1) and (num2 > num3):
        largest = num2
    else:
        largest = num3
return largest

print(find_max(num1,num2,num3))

【讨论】:

    【解决方案2】:

    如果您已经有一个列表,那么您可以简单地使用max 函数来获取列表中 3 个数字中最大的数字。

    lst = [5, 2, 9]
    print(max(lst))
    # output
    9
    

    或者我假设您有三个不同的数字作为输入,然后您可以将它们传递给您想要的方法以获得最大的数字。

    # function to get max among 3 integers
    find_max(x, y, z):
        return max([x, y, z])
    
    # take input
    num1 = int(input("enter num1: "))
    num2 = int(input("enter num2: "))
    num3 = int(input("enter num3: "))
    
    # call your function
    print(find_max(num1, num2, num3))
     
    

    【讨论】:

      【解决方案3】:

      正如许多人所提到的,您需要让您的函数知道要查找最大值的列表。为此,您需要将列表的名称放入函数的参数列表中,即findMax3(lst)

      你的函数仍然不能工作,因为你没有从它返回任何东西。您需要使用 return 关键字,后跟要返回的内容才能让函数给您响应。例如,return 1 会将1 的值返回给调用此函数的任何人。使用该示例,您需要决定向调用者返回什么。

      我的findMax3 版本没有任何其他函数调用:

      def findMax3(*args):
          max3 = args[0]
          for n in args[1:3]:
              if n > max3:
                  max3 = n
          return max3
      

      这与内置 max 函数在相同的 3 个输入下所做的非常接近

      【讨论】:

        【解决方案4】:

        首先,Ebe Isaac 给出了很好的解释,您应该查看他的解决方案并了解它为什么有效。 您的代码存在一些问题。

        lst = int(input())
        print(findMax3())
        

        您正在输入一个需要用一些非数字字符分隔的数字列表,因此您不能在输入值上使用 int()。

        lst = [int(x) for x in input().split()]

        应该给你你想要的(默认分隔符是空格)。要了解有关此格式的更多信息,请参阅列表推导式。

        接下来,您调用 findMax3() 但此函数不返回值,因此它不会打印任何内容(见下文)。此外,最好将您的列表作为参数发送给它,这将使您免于稍后复制它的另一行(见下文)。

        lst = input().split()
        print(findMax3(lst))
        

        现在开始你的功能:

        def findMax3():
            y = list(lst)
        

        您可能应该向函数发送一个参数(输入的列表)。该参数可以重命名为函数名称后括号中的任何内容。您在这里使用 y,因此我们可以将其重写为:

        def findMax3(y):
        

        并删除 y = list(lst) 行。

        y.sort(lst)
        

        使用方法或函数时,最好查阅文档以确定它需要哪些参数。你会看到 sort 可以接受两个参数(key 和 reverse),这里都不需要,所以我们可以通过将其更改为来修复此行:

        y.sort()
        

        下一行:

        y[0] == y[-1]
        

        是一个布尔表达式,如果排序列表的第一个元素 (y[0]) 等于排序列表的最后一个元素 (y[-1]),则返回 True 或 False。老实说,我不太确定你想在这里做什么。由于该函数旨在查找列表的最大值,因此它需要返回该值,因此我们需要使用 return()。最大值将是列表的最后一个,因此您可以这样做:

        return(y[-1])
        

        因此,如果您想保持原始代码的流畅,可以将其更改为:

        def findMax3(y):
            y.sort()
            return(y[-1])
        
        lst = [int(x) for x in input().split()]
        print(findMax3(lst))
        

        我希望这会有所帮助。祝你好运。

        【讨论】:

          【解决方案5】:

          这是更正后的代码:

          def findMax3(lst):
              y = lst[:]
              y.sort()
              return y[-1]
          
          lst = [int(x) for x in input().split()]
          print(findMax3(lst))
          

          我会说findMax() 会是一个更好的名称,因为它可以找到任意长度的列表的最大值。

          请记住,以下内容会做同样的事情:

          lst = [int(x) for x in input().split()]
          print(max(lst))
          

          【讨论】:

          • OP 表示整数列表。此代码适用于字符串并按字母而不是数字排序。
          • @UrielEli:感谢您指出;我已经进行了编辑(但将其通用化很有趣 ;-))。
          【解决方案6】:

          您可能有兴趣一一输入列表项,而不是使用split() 函数来拆分输入。此外,要检索您的最大列表,您已经有一个可以使用的内置 max() 函数:

          >>> num_list = []
          >>>
          >>> for i in range(3):
          ...     num = input("Enter number {}: ".format(i + 1))
          ...     num_list.append(int(num))
          ...
          Enter number 1: 3
          Enter number 2: 6
          Enter number 3: 2
          >>>
          >>> max_num = max(num_list)
          >>> print(max_num)
          6
          

          【讨论】:

            【解决方案7】:

            将数字放入列表中,然后使用 max() 函数获取列表中的最大值,如下所示:

            #create an empty numbers list
            lst=[]
            
            #loop for getting input numbers
            for i in range(1,4):    
            
                try:
                    #here we get the input number
                    my_new_number=int(raw_input("Please input the number "+str(i)+"/3 :\n"))
                except:
                    #in case of it is not a number raise an alert
                    print "not regular integer number"
            
                #here we check that number not exist
                if my_new_number not in lst:
            
                    #add the current input number to the list
                    lst.append(my_new_number)
                else:
                    print "the number",my_new_number,"already exist in this list"
            
            #show the maximum number of the list
            print "The maximum number is",max(lst)
            

            【讨论】:

              【解决方案8】:
              1. 您需要传入一个变量 - lst 可能吗?
              2. 如果你想让你的 main 打印一些东西,你需要返回值。
              3. 您需要整数数组的常量输入格式,我建议1 2 3 4 5(空格分隔),可以使用map(int, input().split()) 反转为列表
              4. 使用内置的max
              5. 您想将自己限制为 3 个数字数组吗?如果是,请使用断言。

              应该够了:

              def findMax3(lst):
                  assert len(lst) == 3
                  lst.sort()
                  return max(lst)
              
              lst = map(int, input().split())
              print(findMax3(lst))
              

              【讨论】:

              • 什么意思需要传入lst?当我在您的代码中输入多个输入时,它只会打印我输入的第一个数字并忽略其余数字。
              • 看我的5条笔记,我提供的代码的输入格式应该是89 45 23一行输入
              • 为什么要对列表进行排序?
              • 它在 OP 问题规范中 ("then sorts the list...")
              猜你喜欢
              • 1970-01-01
              • 2013-12-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多