Python中即使有完美输出也存在不匹配错误

2024-04-23 06:13:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我把这个作为我的a转让:在

编写一个程序,反复提示用户输入整数,直到用户输入“done”。输入“完成”后,打印出最大和最小的数字。如果用户输入了除有效数字以外的任何内容,请使用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)

它工作也很好。我可以获取最小和最大的条目。但是,最后,编辑器不接受这段代码。代码逻辑中有没有可能的错误?在

提前谢谢你的帮助。在


Tags: 代码用户noneifcount数字numint
3条回答

我将使用isinstance检查输入是否为整数,并将存储list中的所有元素,以便在程序结束时调用min和{}。

下面是一个有效的代码:

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))

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

有什么区别?None可以与整数相比较(实际上,在python2中几乎所有的东西都可以比较)。看看这个:

Python2.x版

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

Python3.x版

^{pr2}$

这对你有什么关系?对于第一次迭代,这行代码:

if(largest < fval):

将比较fval与{},其初始值为None

另外一个注意事项是,在python2和python3中要小心input。两人表现不同。当您键入一个字符串时,前者将抛出一个NameError


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

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

一些建议:

  • 只将代码放入您实际希望引发异常的try-块中。在
  • 不要做口袋妖怪异常处理(必须抓住他们全部)。只处理您实际期望的异常。在
  • {2>如果用户要求你输入,为什么要转换?在
  • float(num)永远不会是{},因此检查它没有任何意义。在

最后,我会想到:

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)

相关问题 更多 >