2015-10-14 40 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)