2015-10-14 64 views
0

所以我提交了一个关于基本python的Cousera课程(我对编写代码非常感兴趣)。有效。但是,我发现了一个错误(我很高兴我能看到并因为它存在而伤心欲绝)。Python 2.7调试基本代码

问题是,如果数字串中的最小数字是的第一个数字,因为它被最大变量吸收而不是最小变量。我将如何防止这种情况发生?

在此先感谢!下面

代码:

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" 

回答

1

欢迎来到编程的世界!

通常,当我进行最小/最大比较时,我从负值和正值无穷大开始,而不是无/空或列表的第一个元素,因为这在过去给我带来了麻烦。

此代码似乎对我很好。

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" 
+0

重新分配NUM不仅仅是好的措施,这是必要的! OP的'float(num)'示例将输入转换为一个float,然后立即丢弃该float! – turbulencetoo

+0

@turbulencetoo - Python变量没有输入,他只是调用'float(num)'而无需重新分配,让它将异常向下引发到标记块。我做到了,所以十进制数字不能被解释和比较为字符串。 –

+0

我很惊讶地发现有一个''''定义可以让你比较'str'和'int',通常python对这些比较是严格的。 – turbulencetoo

0

您应该能够通过最小和最大设置为第一个数字输入,并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" 
1

纯粹作为一个教育运动,你可以使用一些Python的功能(generators),使这个代码更通用。

这将创建一个名为numbers返回输入数字的序列发生器,被收集在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)