2016-02-07 66 views
0
def distance_from_zero(distance): 
    if type(distance) == int or type(distance) == float: 
     return abs(distance) 
     print(distance) 
    else: 
     return "Nope" 
     print distance_from_zero(distance) 

distance_from_zero(18) 
+2

返回後的任何代碼都未執行!在編程時記住這一點 –

+1

目前,在遞歸調用之前放置'return'語句是防止無限遞歸的唯一方法。 – chepner

+0

我不認爲我明白你的意思是「返回打印」。我最好的猜測是「打印返回的值」 - ? –

回答

2

您應該在返回之前打印。一旦你返回,你的打印語句不可達。

取代:

return abs(distance) 
print(distance) 

有:

print(distance) 
return abs(distance) 

這:

return "Nope" 
print distance_from_zero(distance) 

有:

print distance_from_zero(distance) 
return "Nope" 
+0

謝謝!我還有一個簡單的問題。在控制檯中,我的代碼最後總是沒有。這是爲什麼? – INeedVerification

+0

@JacobKJakielaszek您可以將控制檯中輸出的全部內容與控制檯中的輸出一起復制粘貼嗎? – Atri

0

返回後的代碼永遠不會執行。

您必須恢復訂單。

喜歡的東西:

print(distance) 
return abs(distance) 
0

這是原來的代碼與打印語句放在正確的位置。請注意仍然出現的無限遞歸錯誤。

def distance_from_zero(distance): 
    if type(distance) == int or type(distance) == float: 
     print(distance) 
     return abs(distance) 
    else: 
     # This print forces infinite recursion because of distance 
     # print distance_from_zero(distance) 
     return "Nope" 

這是測試它

def distance_from_zero(distance): 
    if type(distance) == int or type(distance) == float: 
     print(distance) 
     return abs(distance) 
    else: 
     try: 
      distance = float(distance) 
      print(distance) 
      return abs(distance) 
     except: 
      print ("invalid distance specified", distance) 
      return "Nope" 

當然,如果能夠被丟棄,因爲float(int)float(float)還是回到一個正常的浮動最初的一種方式。

def distance_from_zero(distance): 
    try: 
     distance = float(distance) 
     print(distance) 
     return abs(distance) 
    except: 
     print ("invalid distance specified", distance) 
     return "Nope" 
+0

它看起來像你遺漏了'距離'和'浮動(距離)之間的等號# – zondo

+0

@zondo謝謝。我會修好它 – sabbahillel

0

首先,爲什麼在調用abs()之前需要檢查參數的類型?只需調用它。 abs()最瞭解它可以使用的操作數的類型。如果看到一個不能處理的問題,TypeError將引發異常並且調用者可以處理它。

如果您確實想處理函數中的錯誤,請使用try/except塊,而不要試圖猜測abs()支持的類型,例如,支持複數; abs(complex(1, 2))是完全合法:

try: 
    distance = abs(distance) 
except TypeError as e: 
    print('{!r} is not a valid distance'.format(distance)) 
    return None # or some other error 
else: 
    print(distance) 
    return distance 

最後,如果你真的想支持限制爲僅intfloat類型,最好是使用isinstance()type()因爲是支持繼承:

if isinstance(distance, (int, float)): 
    # it's a float or an int 
    distance = abs(distance) 

一幾個其他的事情要注意:

  • 致電print()打電話之前return中的函數。 return 終止函數並將執行返回給調用代碼,因此return之後的任何語句都不會執行。
  • 你似乎想abs()後打印距離的價值,所以 你需要將結果保存在一個變量中(或執行兩次計算):

    distance = abs(distance) 
    print(distance) 
    return distance 
    
0

我想在你編輯了一些東西之後Python會停止讀取定義,所以你應該交換printreturn指令。

相關問題