2013-10-15 61 views
1

我是新來的,我習慣用Python進行編程。我一直在尋找網絡尋找有用的答案,但是,我無法找到解決我的問題的辦法。錯誤python:需要一個浮點數

這裏有雲:

radiation=1.3888 
n=17 
LAT=51.05 

def dec(n): 
    if 0<n<365: 
     dec=23.45*math.sin(math.radians(360*(284+n)/365)) 
     print(dec) 
    else: 
     print('the day',n,'is not valid') 

def wss(LAT,dec): 
    wss=math.degrees(math.acos(((math.tan(math.radians(LAT)))*math.tan(math.radians(dec))))) 
    print(wss) 

---當我運行這段代碼,這是我收到:

>>> dec(n) 
-20.91696257447642 

>>> wss(LAT,dec) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:/Users/Gerard/Dropbox/Master Thesis Gerard Pujol/Master Thesis Work/work hourly radiation OK.py", line 25, in wss 
    wss=math.degrees(math.acos(-((math.tan(math.radians(LAT)))*math.tan(math.radians(dec))))) 
TypeError: a float is required 

我不知道爲什麼Python的給了我這種類型的錯誤:'需要浮動'。

我試了很多修改,但一直沒用。我希望有人能解決我的問題。非常感謝你!

+4

解決您的代碼 –

+1

的格式(我把代碼轉換成代碼塊,但它也縮進不正確地) – geoffspear

+0

它看起來像你打電話'math.radians(DEC)'; 'dec'是一個函數,而不是一個值;也許你打算叫'dec(某事)'? – geoffspear

回答

0

變量dec既用於函數名稱又用於變量。 Python將其視爲錯誤中的函數名稱。

0

你想要做的是一樣的東西

def dec(n): 
    if 0<n<365: 
     dec = 23.45*math.sin(math.radians(360*(284+n)/365)) 
    else: 
     print('the day %d is not valid' %n) 
     return 
    return(dec) 

,然後調用

wss(LAT, dec(n)) 

dec這裏是一個函數,所以你不能把它作爲參數傳遞。由於dec正在返回一個浮點數,我想這就是你實際想要檢索的。

+1

請檢查您的事實。 Python函數是對象,並且可以像其他任何對象一樣將它們作爲參數傳遞。在這種情況下'dec()'不返回一個浮點數,它返回'None'。 –

+0

我不好,我太快讀了這個問題。我糾正了我的答案。 – MBR

+0

非常感謝您的先生,它的工作原理!非常感謝!我奮鬥了幾個小時沒有成功..我必須學習更多! – gpujol

0

首先,你的格式很糟糕。瞭解代碼應該是什麼樣子 - 它會在以後節省很多時間,特別是在調試時。

其次,當你運行: WSS(LAT,DEC)

您傳遞2個參數的功能 'WSS',第一個就是LAT = 51.05,但你從來沒有定義所謂的 '月' 的說法 - 你已經定義了這樣一個功能。

你想要做的是這樣的:

import math 

n=17 
LAT=51.05 

def CalcDec(n): 
    if 0<n<365: 
     dec=23.45*math.sin(math.radians(360*(284+n)/365)) 
     return dec 

def CalcWss(LAT,dec): 
    wss=math.degrees(math.acos(((math.tan(math.radians(LAT)))*math.tan(math.radians(dec))))) 
    return wss 

print CalcWss(LAT, CalcDec(n)) 

記住採取可能的異常的照顧。和閱讀一些關於良好的編程習慣......

+0

在dec()函數中使用一個名爲'dec'的變量仍然相當混亂,爲什麼在其中一個'return'上使用'()'而不在另一個上? – unwind

+0

這是一個快速複製麪食;-),現在它更具可讀性。 –

+0

非常感謝您的先生,它的工作原理!非常感謝!我奮鬥了幾個小時沒有成功..我必須學習更多! – gpujol

0

首先必須真正從dec()函數返回的東西 - 既不是分配給一個本地名稱,也沒有打印到stdout不會做:

def dec(n): 
    if not 0 < n < 365: 
     # that's how you handle incorrect arguments in Python 
     raise ValueError("'%s' is not a valid day number" % n) 

    # 'n' is valid, let's proceed: 
    return 23.45 * math.sin(math.radians(360 * (284 + n)/365.0)) 

現在你可以使用這個值是由直通中間變量:

LAT = 51.5 
n = dec(17) 
print wss(LAT, n) 

或者只是跳過中間變量:

print wss(51.5, dec(17)) 

注意:如果使用Python 3。x,其中print(<something>)

0
radiation=1.3888 

    n=17 

    LAT=51.05 

    def dec(n): 

     if 0<n<365: 

      dec=23.45*math.sin(math.radians(360*(284+n)/365)) 
      print (dec) 
      return dec 

     else: 

      print('the day',n,'is not valid') 
      return -1 


    def wss(LAT,dec): 

     wss=math.degrees(math.acos(((math.tan(math.radians(LAT)))*math.tan(math.radians(dec))))) 

     print(wss) 

然後做替換print <something>

>>> dec = dec(n) 
-20.91696257447642 
>>> wss(LAT,dec) 

這將工作。要知道你的代碼爲什麼不起作用,請繼續閱讀。

你在做什麼與def wss(LAT,dec)是你正在定義一個函數,傳遞兩個參數LAT和dec。但是,當您實際調用該函數時(例如>>>wss(LAT,dec)),您尚未爲dec設置任何值。您在dec(n)有價值,但您尚未將其分配給任何內容。將其與您爲其分配值的變量LAT進行對比。 (記住LAT=51.05

+0

非常感謝!我非常感謝! – gpujol