2013-06-27 40 views
1

這是一個雙人單元:首先,使用一個參數定義一個函數,distance_from_zero(選擇您喜歡的任何參數名稱)。評論:內置函數

其次,有一個功能做到以下幾點:

檢查它接收輸入的類型。 如果類型爲int或float,則函數應該返回函數輸入的絕對值。 如果該類型是任何其他類型,該函數應返回「不是整數或浮點數!」

代碼:

def distance_from_zero(n): 
print type(n) 
if type(n) == int or type(n) == float: 
    var = abs(n) 
    print var 
    return n 
else: 
    print "no!" 
    return n 

var = input("Enter number:") 
print var 
distance_from_zero(var) 
+0

doenot工作串 – dummy

回答

1

首先,作爲其他人所說,使用raw_input()

然後,您可以嘗試將其轉換爲intfloat。如果這兩個都失敗了,你就沒有號碼。如果你想保持「原生態」的類型,您可以使用此:

def distance_from_zero(n): 
    try: 
     n = int(n) 
    except ValueError: 
     try: 
      n = float(n) 
     except ValueError: 
      print "Not a number!" 
      n = float("NaN") 
    return abs(n) 

如果你不介意的輸入1轉換爲1.0,那麼你就可以簡化功能:

def distance_from_zero(n): 
    try: 
     return abs(float(n)) 
    except ValueError: 
     print "Not a number!" 
     return float("NaN") # or remove this line to return None 

在這兩種情況下,你會這樣調用該函數:

var = raw_input("Enter number: ") 
print distance_from_zero(var) 
+0

但是這對初學者來說難道不是這麼困難嗎? –

1

幾件事情:

input()在Python 2.7,相當於eval(raw_input())。所以,如果你輸入「你好」,它會提高NameError(除非有一個變量你好)。如果您正在使用Python 2.7,請使用raw_input()。但是,如果你正在使用python 3,然後用input(),因爲raw_input()不會在Python 3存在(並輸入是完全相同的raw_input爲3)

也返回n和不var,絕對超值。

def distance_from_zero(n): 
    try: 
     return abs(float(n)) 
    except ValueError: 
     return "That is not an integer or float!" 

var = raw_input("Enter number:") 
print var 
distance_from_zero(var) 

此外,對於檢查類型,您應該使用isinstance()

+0

問題是..如果它是字符串,它在開始時會給出錯誤 – dummy

+0

@dummy是的,我編輯了我的答案來解釋(頂部) – TerryA

+0

我用你的代替了我的功能,但沒有運氣 – dummy

1

這裏你的代碼有一些缺陷。當您通過input()獲得用戶輸入時,它會爲任何非數字輸入引發錯誤。使用raw_input()。要檢查接收到的輸入的類型,使用literal_eval()

import ast 
def distance_from_zero(n): 
    try:   
     x = ast.literal_eval(n) 
     if isinstance(x, (int,float)): 
      var = abs(x) 
      print type(var) 
      return var 
    except: 
     print "No!" 
+0

給字符串作爲輸入...它會拋出一個錯誤 – dummy

+0

然後你不能傳遞數值... – dummy

+0

@Dummy:那是我有什麼用'literal_eval()'來表示。原始輸入接受數字和非數字輸入。 –

0
def distance_from_zero(n): 
    if type(n) is int or type (n) is float: 
     return abs(n) 
     #return abs(n) 
    else: 
     return "Nope" 
+1

請爲您的答案提供解釋 – SilentMonk