【问题标题】:Compare 3 numbers and return the largest比较 3 个数字并返回最大的
【发布时间】:2020-04-18 11:11:36
【问题描述】:
def max_num(num1, num2, num3):
  if num1 > num2 and num3:
    return num1
  elif num2 > num1 and num3:
    return num2
  elif num3 > num1 and num2:
    return num3

print(max_num(-10, 0, 10)) # first check, returns 0 (wrong)
print(max_num(-10, 5, -30)) # second check, returns 5 (right)
print(max_num(-5, -10, -10)) # third check, returns -5 (right)

我只有大约 3 天的时间来学习我的第一门编程语言 (Python),我被分配了一项任务来比较 3 个数字并返回最大的数字。第 2 次和第 3 次打印检查是正确的,因为 5 和 -5 是它们 3 个数字中最大的。但是第一次检查返回0,显然不是最大的数,10才是。

【问题讨论】:

标签: python python-3.x


【解决方案1】:

虽然这确实回答了您的问题,但它并没有满足您课程的意图。

max([1, 3, 2]) # 3

当使用 and 运算符时,你应该这样想。

if (condition) and (condition):

所以使用if num1 > num2 and num1 > num3:

【讨论】:

    【解决方案2】:

    这是因为你不能像这样分解你的条件。条件:

    if num1 > num2 and num3:
        ...
    

    真正的意思是“如果num1 大于num2 并且num3 不同于0”。事实上,Python 尝试将 num3 转换为布尔值。如果num3 是一个空列表、一个空字符串、0False,那么它被评估为 False。否则,它被评估为True。例如,您真正想写的是:

    if num1 > num2 and num1 > num3:
        ...
    

    【讨论】:

      【解决方案3】:

      您的逻辑语句没有按照您的想法执行。在num1 > num2 and num3 中,它将检查num1 是否大于num2num 是否为0。您可以将您的条件更改为num1 > num2 and num1 > num3。请尝试以下操作:

      def max_num(num1, num2, num3):
        if num1 > num2 and num1 > num3:
          return num1
        elif num2 > num1 and num2 > num3:
          return num2
        elif num3 > num1 and num3 > num2:
          return num3
      
      print(max_num(-10, 0, 10)) # returns 10
      print(max_num(-10, 5, -30)) # returns 5
      print(max_num(-5, -10, -10)) # returns -5
      

      或者像这样:

      def max_num(num1, num2, num3):
          if num1 > num2:
              if num1 > num3:
                  return num1
              else:
                  return num3
          else:
              if num2 > num3:
                  return num2
              else:
                  return num3
      
      print(max_num(-10, 0, 10)) # returns 10
      print(max_num(-10, 5, -30)) # returns 5
      print(max_num(-5, -10, -10)) # returns -5
      

      【讨论】:

        【解决方案4】:

        在条件中使用python中的保留字“and”,只有当它的两边都为True时才返回True。如果整数不为零,则将其视为 True。例如:

        num1 = 5
        num2 = 1
        num3 = 0
        return num1 > num2 and num2 > num3 # returns True because all the conditions are true
        return num1 > num2 and num1: # returns True because num1>num2 and num1 is not 0
        return num1 > num2 and num3: # returns False because one of the conditions is False becuase num3 is 0
        

        如果是这样,您发送的条件被认为是:

        if num1 > num2 and num3: # if num1 > num2 and num3 is not 0 
        
        elif num2 > num1 and num3: # if num2 > num1 and num3 is not 0
        
        elif num3 > num1 and num2: # if num3 > num1 and num2 is not 0
        

        因此,第一个返回 0,因为在最后一个条件中,您正在检查 num2 是否不是 0,但确实是。

        一个简单的解决方法:

        def max_num(num1, num2, num3):
          if num1 > num2 and num1 > num3:
            return num1
          elif num2 > num1 and num2 > num3:
            return num2
          return num3
        
        print(max_num(-10, 0, 10)) # returns 10
        print(max_num(-10, 5, -30)) # returns 5
        print(max_num(-5, -10, -10)) # returns -5
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-03-04
          • 1970-01-01
          • 2021-11-21
          • 2022-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多