2015-12-29 121 views
1

我正在做某個在線課程,並已完成使用此代碼的任務,但仍然可以通過某些輸入引發錯誤,但我不明白爲什麼。我問過課程導師(使用僞代碼),他們說我的try/except語句存在問題。嘗試除錯誤檢查

程序應該一次又一次地提示用戶輸入一個數字,如果輸入了非數字字符,則返回一個錯誤,字符串'done'除外,在這種情況下,它將返回最大值和最小值所有輸入的數字。

這裏的程序:

largest = None 
smallest = None 

while True: 

    num = input("Enter a number: ") 


    if num == 'done': break 

    try: 
     float(num) 

    except: 
     print("Invalid input") 
     continue 

    if largest is None: 
     largest = num 
    elif largest < num: 
     largest = num 

    if smallest is None: 
     smallest = num 
    elif smallest > num: 
     smallest = num 

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

如果您輸入以下值作爲輸入1 2 3 pk 27 -37 done,輸出爲Max: 3, Min -37.

它的駕駛我瘋了。我知道爲什麼會發生這種情況。

+0

有一個很難複製這一點,你是如何在非數值輸入? – Stedy

+0

條目變爲1,2,3,pk,27,-37。 任何字符串都可以放在'pk'的地方 – GotYaNumba

+0

忘了在輸入 – GotYaNumba

回答

3

您正在將輸入轉換爲浮點數,但不保留該點以供稍後檢查。

所以後來後except塊,Python是做字符串比較,並串"3"比較字符串"27",自'3'是「大」比'2'它認爲不是「27」大"3",很像"b"較大比"aaabbbbzzz"

要修復它改變這種:

float(num) 

這樣:

num = float(num) 
+0

完美!非常有道理!因爲這篇文章而學習了一些關於字符串比較的內容。 謝謝! – GotYaNumba

+0

很高興幫助,這是任何人都可以犯的一個小錯誤。如果有幫助,可以通過點擊問題旁邊的勾號讓其他人知道您已經得到了很好的答案。 –