2013-05-19 76 views
1

我試圖教自己的Python對碼學院,並寫了下面的基本代碼,這是不工作作爲無論輸入的結果是'Please Enter a Valid Number',我得到一個消息,說"Oops, try again! Make sure area_of_circle takes exactly one input (radius)."Python函數輸入

import math 

radius = raw_input("Enter the radius of your circle") 

def area_of_circle(radius): 
    if type(radius) == int: 
     return math.pi() * radius**2 
    elif type(radius) == float: 
     return math.pi() * radius**2 
    else: 
     return "'Please enter a valid number'" 

print "Your Circle area is " + area_of_circle(radius) + " units squared" 

原始任務如下:

編寫一個函數area_of_circle,該函數將radius作爲輸入並返回圓的面積。圓的面積等於半徑平方的π倍。 (使用以表示裨的math.pi。)

+2

不要使用'型(variablename)== sometype'。充其量,使用'isinstance(variablename,sometype)'。或者根本不測試,假設它是一個有效的類型,那更加pythonic。如果需要,抓住異常,但不要測試特定類型。 –

+2

另請注意,'math.pi'是一個數字,而不是一個函數,因此您需要將'math.pi()'更改爲'math.pi'。 – Aya

回答

5

錯誤在你的程序:

  1. raw_input()返回一個字符串,你」先轉換爲floatint
  2. 類型檢查Python中的壞主意
  3. math.pi()不是一個函數只是使用math.pi

使用exception handling將字符串轉換成一個數字:

import math 
radius = raw_input("Enter the radius of your circle: ") 
def area_of_circle(radius): 
    try : 
     f = float(radius) #if this conversion fails then the `except` block will handle it 
     return math.pi * f**2 #use just math.pi 
    except ValueError: 
     return "'Please enter a valid number'" 

print "Your Circle area is {0} units squared".format(area_of_circle(radius)) 
+0

+1你已經回答了最佳答案 – HennyH

+0

Thankyou我只是一天進入蟒蛇,所以仍然找到我的雙腿! ;) –

2

raw_input()總是返回str。您需要將它傳遞給另一個類型的構造函數才能進行轉換。

radius = float(raw_input("Enter the radius of your circle"))

1

您可以在讀取輸入類型強制轉換

if type(radius) == int: 
     return math.pi() * radius**2 
elif type(radius) == float: 

由於raw_input()的字符串的解釋可能是int或浮動,你應該像這樣評價它:

import ast 
radius = ast.literl_eval(raw_input("Enter the radius of your circle")) 

這樣就可以避免試圖檢查它是否是一個浮動或INT等..

>>> type(ast.literal_eval(raw_input("Number: "))) 
Number: 2.5 
<type 'float'> 
>>> type(ast.literal_eval(raw_input("Number: "))) 
Number: 5 
<type 'int'> 
0

看到你想要的,如果輸入的是一個整數或浮點數不同的路徑(這並沒有太大的意義):

radius_val = float(radius)