错误python:需要一个浮点数

时间:2013-10-15 11:54:04

标签: python math runtime-error

我是新来的,我已经习惯了用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会给我这种类型的错误:'需要浮点数'。

我尝试了很多修改,但一直没用。我希望有人能解决我的问题。非常感谢你!

5 个答案:

答案 0 :(得分:0)

变量dec用于函数名和变量。 Python将其视为错误中的函数名称。

答案 1 :(得分: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正在返回一个浮点数,我想这就是你真正想要检索的内容。

答案 2 :(得分:0)

首先,你的格式很糟糕。了解代码的外观 - 它将在以后为您节省大量时间,尤其是在调试时。

其次,当你跑: WSS(LAT,分解)

你将2个参数传递给函数'wss',第一个是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))

请记住处理可能的例外情况。并阅读一些关于良好编程实践的内容......

答案 3 :(得分: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>替换为print(<something>)

答案 4 :(得分: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)

然后做:

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

这会奏效。要知道为什么你的代码不起作用,请继续阅读。

你在def wss(LAT,dec)做的是你正在定义一个传递两个参数LAT和dec的函数。但是,当您实际调用该函数(例如>>>wss(LAT,dec))时,您尚未为dec设置任何值。您的值为dec(n),但尚未将其分配给任何内容。将此与您为其指定值的变量LAT进行对比。 (还记得LAT=51.05吗?)