【问题标题】:question include exception handling with finding of largest and smallest no. this is a assignment problem of coursera platform问题包括异常处理以及查找最大和最小编号。这是coursera平台的作业问题
【发布时间】:2020-05-11 16:56:14
【问题描述】:

问题: 编写一个程序,重复提示用户输入整数,直到用户输入“完成”。输入“完成”后,打印出最大和最小的数字。如果用户输入的不是有效数字,请使用 try/except 捕获它,并发出适当的消息并忽略它。

输入:

7 ,2 , bob, 10, 4, done.

期望的输出:

Invalid input
Maximum is 10
Minimum is 2

实际输出:

Invalid input
Invalid input
Maximum is 10
Minimum is 2

代码:

largest=-1
smallest=None
while True:
    num =input("Enter a number: ")
    try:
        if num == "done" :
            break
        elif smallest is None:
            smallest=int(num)
        elif int(num)<smallest:
            smallest=int(num)
        elif int(num)>largest:
            largest=int(num)    
        else:
            raise ValueError()
    except ValueError:
        print("Invalid input")
print("Maximum is",largest) 
print("Minimum is",smallest)

【问题讨论】:

    标签: python


    【解决方案1】:

    我认为有一种更 Pythonic 的方式来做到这一点。试试这个:

    inputList = []
    while True:
        num = input("Enter a number:")
        try:
            num = int(num)
            inputList.append(num)
        except:
            if num == "done":
                break
            else:
                print ("Invalid input. Ignoring...")
    print ("Maximum is:",max(inputList))
    print ("Minimum is:",min(inputList))
    

    编辑:此代码适用于 Python3。对于 Python2,您可能希望使用 raw_input() 而不是 input()

    【讨论】:

      【解决方案2】:

      您已经在Exception 中捕获了ValueError, 所以在里面,try,你提出了ValueError,你留下了这个错误的范围。 当您接受输入时,它接受4 作为输入,既不大于largest(即10)也不小于smallest(即2)。所以它落在else 部分并引发ValueError(根据您的代码)。因此在您的情况下打印两次Invalid input。所以这部分是不必要的,也会使您的解决方案变得虚假。

      再次,从效率的角度来看 -

      1 - 您正在为每个输入检查 smallest == None,这需要 O(1) 时间,如果您将其取为任何整数,则没有必要

      这是您正在寻找的解决方案:-

      largest=None
      smallest=None
      while True:
      
          try:
              num = input("Enter a number: ")
              num = int(num)
              if smallest is None:
                  smallest = num
              if largest is None:
                  largest = num
              if num < smallest:
                  smallest = num
              elif num > largest:
                  largest = num    
      
          except ValueError:
              if num == 'done':
                  break
              else:
                  print("Invalid input")
                  continue
      print("Maximum is",largest) 
      print("Minimum is",smallest)
      

      【讨论】:

      • 作为原码,如果只输入一个个数,此解决方案将失败。
      • @amain 你介意详细说明你看到了什么失败吗?我测试了几个输入,我没有看到任何失败。这是一个示例输入[7 ,2 , 'bob', 10, 1, -9, 49, 'done']
      • 当输入为[7, 'done']时,你的代码报Max=7, Min=0,但应该是Max=7, Min=7我>。使用another answer 中提出的列表可以优雅地解决这个问题。
      猜你喜欢
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 2010-09-05
      • 2016-06-27
      相关资源
      最近更新 更多