【问题标题】:Mismatch Error in Python even with perfect Output即使输出完美,Python中的不匹配错误
【发布时间】:2017-08-16 10:36:31
【问题描述】:

这是我的任务:-

编写一个程序,反复提示用户输入整数,直到用户输入“完成”。输入“完成”后,打印出最大和最小的数字。如果用户输入的不是有效数字,请使用 try/except 捕获它并发出适当的消息并忽略该数字。输入 7、2、bob、10 和 4 并匹配下面的输出。
期望的输出-
输入无效
最大为 10
最小值为 2

我为此编写了以下代码-

largest = None
smallest = None
count=0
while True:
    num = input("Enter a number: ")

    if num == "done" :
        break
    try:
        fval=float(num)
        count=count+1

        if(fval == None):
            largest=None
            smallest=None

        if(largest<fval):
            largest=int(fval)
        if(count==1):
            smallest=fval                    
        else:
            if(int(fval) < smallest):
                    smallest=int(fval)



    except:
        print("Invalid input")
        continue






print("Maximum is", largest)
print("Minumum is", smallest)

它也运行良好。我能够获取最小和最大的条目。但是,最后,编辑器不接受此代码。代码逻辑中是否有任何可能的错误?

提前感谢您的帮助。

【问题讨论】:

  • 它不能正常工作。尝试运行您在此处发布的内容。
  • 先生,您能告诉我哪里出错了吗?
  • 你是用 python2.x 还是 python 3.y 运行这个?
  • 在 python 3.y 上运行。
  • 参考输入和输出与程序行为的描述相矛盾,因为从未输入“完成”,因此程序不应终止或打印出最小和最大数字。

标签: python python-3.x


【解决方案1】:

我认为您的 python 版本与代码判断运行以评估您的代码的版本不匹配。

有什么区别? None 可以与整数进行比较(实际上,python2 中几乎所有内容都可以比较)。看看这个:

Python 2.x

In [211]: None < 123456
Out[211]: True

Python 3.x

In [152]: None < 123456
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-152-cf9ae210e7ad> in <module>()
----> 1 None < 123456

TypeError: unorderable types: NoneType() < int()
> <ipython-input-152-cf9ae210e7ad>(1)<module>()
----> 1 None < 123456

这对你有什么影响?那么,对于第一次迭代,这行代码:

if(largest < fval):

fvallargest 进行比较,largest 的初始值为None

另外请注意,请注意 python2 与 python3 中的input。两者的行为不同。当你输入一个字符串时,前者会抛出一个NameError


我建议将您的 largestsmallest 初始化为有效值,如下所示:

largest = float('-inf')
smallest = float('inf')

【讨论】:

  • 我还要注意,Py2 中的 input 会尝试评估输入,因此输入 done 会抛出 NameError
  • 谢谢先生!!它适用于最大 = float('-inf') 和最小 = float('inf')。
  • @Vovanrock2002 实际上...如果 OP 将其提交给 python 3,输入应该不是问题。
  • @cᴏʟᴅsᴘᴇᴇᴅ 那么他们的python 2解释器和我的很不一样。
  • @cᴏʟᴅsᴘᴇᴇᴅ 我的意思是问题中的原始代码。它在 python 3 中不能按预期工作,在 python 2 中更糟。
【解决方案2】:

我将使用isinstance 检查输入是否为整数,并将所有元素存储在list中,在程序结束时调用minmax

这是一个有效的代码:

import ast

inputs = []
while True:
    num = input("Enter a number: ")

    if num == "done" :
        break
    try:
        # Check if the input is a number
        if num.isnumeric():
            # If so, convert the string to a number
            number = ast.literal_eval(num)
            # If it's an int, store it in the list
            if isinstance(number, int):
                inputs.append(number)
            else:
                # If not, raise and exception
                raise ValueError("Not an integer!")

    except ValueError as ve:
        print(ve)

# Show the desired output
print("Maximum is", max(inputs))
print("Minumum is", min(inputs))

【讨论】:

    【解决方案3】:

    一些建议:

    • 仅将代码放入您实际期望引发异常的 try-block 中。
    • 不要进行 Pokemon 异常处理(必须全部捕获)。只处理您实际预期的异常。
    • 如果要求您检查整数,为什么(尝试)将用户输入转换为 float
    • float(num) 永远不会是 None,因此检查它没有任何意义。

    最后,我想出:

    if __name__ == '__main__':
        minimum = maximum = None
    
        while True:
            user_input = input('Enter a number: ')
    
            if user_input == 'done':
                break
    
            try:
                integer = int(user_input)
            except ValueError:
                print('Invalid input')
            else:
                if minimum is None or integer < minimum:
                    minimum = integer
    
                if maximum is None or integer > maximum:
                    maximum = integer
    
        print('Maximum is', maximum)
        print('Minimum is', minimum)
    

    【讨论】:

      【解决方案4】:

      我编写的以下代码在所有终端中都可以正常工作,试试这个就可以了。

      largest = None
      smallest = None
      cnt = 0
      while True:
          num = input("Enter a number: ")
          if num == "done" : break
      
          elif(num == ""):
               print("InValid num")
               break
          try :
              val = int(num)
              #print(val)
              #break
          except ValueError:
              val = -1
              print("Invalid input")
              continue
      
      
          if cnt == 0 :
              largest = val
              smallest = val
          elif val > largest :
              largest = val
          elif val < smallest :
              smallest = val
      
          cnt = cnt +  1  
      
      
      
      
      print("Maximum is",largest)
      print("Minimum is",smallest)
      

      【讨论】:

        【解决方案5】:
        largest = None
        smallest = None
        
        while True:
            num = input("Enter a number: ")
            if num == "done":
                break
            try:
                n = int(num)
                if smallest is None or n < smallest:
                    smallest = n
                if largest is None or n > largest:
                    largest = n
            except ValueError:
            # num cannot be converted to an int
                print ("Invalid input")
        
        print("Maximum is", largest)
        print("Minimum is", smallest)
        

        【讨论】:

        • 大家好!我收到“不匹配错误”,任何人都知道原因
        【解决方案6】:

        最大 = 无 最小 = 无

        当真时: 尝试: num = raw_input("请输入一个数字:") 如果 num == “完成”: 休息 如果最大的是无: 最大 = int(num) 如果 int(num) > 最大: 最大 = int(num) 如果最小为无: 最小 = int(num) 如果 int(num)

        print("最大值为", 最大) print("最小是", 最小)

        【讨论】:

        • 您应该使用“代码”标记来正确显示代码
        • 是的,代码标记很重要!检查Code Blocks
        【解决方案7】:
        largest = 0
        smallest = 999999
        inval = "notdone"
        x = 0
        
        while True :
            inval = input("Enter a number: ")
            if (inval == "done") :
                break
            else :
                try:
                    x = int(inval)
                    if (x > largest) :
                        largest = x
                    if (x < smallest) :
                        smallest = x           
                except :
                    print("Invalid input")  
            
        print("Maximum is", largest)
        print("Minimum is", smallest)
        

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 2020-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多