1

私はここに来たばかりで、Python でのプログラミングに慣れてきました。有用な回答を求めて Web を検索してきましたが、問題の解決策を見つけることができませんでした。

ここに行きます:

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

5 に答える 5

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これは関数なので、引数として渡すことはできません。float を返すので、それdecが実際に取得したいものだと思います。

于 2013-10-15T12:00:10.110 に答える
0

変数decは、関数名と変数の両方に使用されます。Python は、エラーで関数名として認識しています。

于 2013-10-15T11:57:39.030 に答える
0

まず第一に、あなたのフォーマットはひどいです。コードがどのように見えるべきかを学びましょう - 特にデバッグ中に、後で多くの時間を節約できます。

次に、次を実行すると: wss(LAT,dec)

関数 'wss' に 2 つの引数を渡します。最初の引数は LAT = 51.05 ですが、'dec' という引数を定義していません。そのような関数を定義しています。

あなたがしたいことは次のようなものです:

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))

考えられる例外に注意してください。そして、良いプログラミングの実践について少し読んでください...

于 2013-10-15T12:08:47.883 に答える