Python 2.7调试基础代码

Python 2.7 debugging basic code

所以我将此提交给 Cousera 基础课程 python(我对编写代码非常陌生)。有效。但是,我在其中发现了一个错误(我很高兴我能看到它,但也很伤心,因为它存在)。

问题在于,如果一串数字中的最小数字是 第一个数字,那么它会被最大的变量吸收,而不是进入最小的变量。我该如何防止这种情况发生?

提前致谢!

代码如下:

    largest = -1
    smallest = None
    while True:
        try:
            num = raw_input('number\n')
            float(num)
            if num > largest:
                largest = num
            elif smallest is None:
                smallest = num
            elif smallest > num:
                smallest = num
        except:
            if num =="Done":
                print "Maximum is", largest
                print "Minimum is", smallest
                break
            print "Invalid input"

您应该能够通过将最小和最大设置为第一个数字输入并在 while 循环之前执行此操作来解决此问题。这样,对于您看到的每个新数字,您都可以根据其相对大小更新最小值和最大值。像这样:

largest = -1
smallest = None

try:
    num1 = raw_input('number\n')
    smallest = num1
    largest = num1

    while True:
        num = raw_input('number\n')
        num = float(num)
        if num > largest:
            largest = num
        elif smallest > num:
            smallest = num
    except:
        if num =="Done":
            print "Maximum is", largest
            print "Minimum is", smallest
            break
        print "Invalid input"

欢迎来到编程世界!

通常,当我进行 min/max 比较时,我会从负无穷大和正无穷大开始,而不是 None/null 或列表的第一个元素,因为这在过去让我很头疼。

这段代码对我来说似乎工作正常。

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

while True:
    try:
        num = raw_input('number: ')
        num = float(num) # I reassign num for good-measure
        if num > largest:
            largest = num
        if num < smallest:
            smallest = num
    except:
        if num == "Done":
            print "Maximum is", largest
            print "Minimum is", smallest
            break
        print "Invalid input" 

纯粹作为一种教育练习,您可以使用 python 的一些功能 (generators) 使此代码更通用。

这将创建一个名为 numbers 的生成器,其中 returns 一个输入数字序列,在 a 中收集为列表,然后您可以使用内置 min(a), max(a) 方法:

def numbers():
    while True:
        try:
            num = input('number\n')
            yield float(num)
        except ValueError:
            if num == "Done":
                break
            print "Invalid input"

a = list(numbers())
print "Maximum is", max(a)
print "Minimum is", min(a)